From ad35670cc53d872662f41fdfcd28ee518a9de50d Mon Sep 17 00:00:00 2001 From: "h2.seo" Date: Tue, 21 Aug 2012 21:44:19 +0900 Subject: [PATCH] Update camera code --- .camera.ini | 48 + .gitignore | 2 + CMakeLists.txt | 151 + LICENSE | 75 + edc/cam_capture_image_selection.edc | 72 + edc/cam_ctxpopup_shortcuts.edc | 853 +++ edc/cam_funcs.edc | 163 + edc/cam_guideline_edje.edc | 383 + edc/cam_indicator_layout.edc | 115 + edc/cam_main_layout.edc | 208 + edc/cam_recording_edje.edc | 275 + edc/cam_recording_edje_inc.edc | 53 + edc/cam_recording_edje_inverse.edc | 278 + edc/cam_recording_edje_inverse_inc.edc | 53 + edc/cam_recording_edje_vertical.edc | 276 + edc/cam_recording_edje_vertical_inc.edc | 44 + edc/cam_recording_edje_vertical_inverse.edc | 276 + edc/cam_recording_edje_vertical_inverse_inc.edc | 45 + edc/cam_setting_popup_layout.edc | 50 + edc/cam_setting_popup_layout_inc.edc | 291 + edc/cam_toolbar_layout.edc | 663 ++ edc/cam_toolbar_layout_inc.edc | 389 + edc/cam_toolbar_layout_inverse.edc | 662 ++ edc/cam_toolbar_layout_inverse_inc.edc | 392 + edc/cam_toolbar_layout_vertical.edc | 663 ++ edc/cam_toolbar_layout_vertical_inc.edc | 391 + edc/cam_toolbar_layout_vertical_inverse.edc | 658 ++ edc/cam_toolbar_layout_vertical_inverse_inc.edc | 396 + edc/cam_utils.edc | 227 + edc/cam_zoom_layout.edc | 131 + edc/cam_zoom_layout_inverse.edc | 133 + edc/cam_zoom_layout_vertical.edc | 133 + edc/cam_zoom_layout_vertical_inverse.edc | 133 + edc/style_ctxpopup_camera.edc | 132 + edc/style_ctxpopup_camera_with_radio.edc | 2257 ++++++ edc/style_genlist_macro.edc | 847 +++ edc/style_genlist_normal.edc | 634 ++ edc/style_slider_camera.edc | 839 +++ edc/style_tizen_hd_inc.edc | 1150 +++ images/00_check_off.png | Bin 0 -> 3235 bytes images/00_check_on.png | Bin 0 -> 3539 bytes images/Touch AF_rect/camera_focus_fail.png | Bin 0 -> 439 bytes images/Touch AF_rect/camera_focus_fail_1.png | Bin 0 -> 230 bytes images/Touch AF_rect/camera_focus_fail_2.png | Bin 0 -> 238 bytes images/Touch AF_rect/camera_focus_fail_3.png | Bin 0 -> 235 bytes images/Touch AF_rect/camera_focus_fail_4.png | Bin 0 -> 226 bytes images/Touch AF_rect/camera_focus_notready.png | Bin 0 -> 441 bytes images/Touch AF_rect/camera_focus_notready_1.png | Bin 0 -> 231 bytes images/Touch AF_rect/camera_focus_notready_2.png | Bin 0 -> 240 bytes images/Touch AF_rect/camera_focus_notready_3.png | Bin 0 -> 236 bytes images/Touch AF_rect/camera_focus_notready_4.png | Bin 0 -> 233 bytes images/Touch AF_rect/camera_focus_ready_1.png | Bin 0 -> 249 bytes images/Touch AF_rect/camera_focus_ready_2.png | Bin 0 -> 250 bytes images/Touch AF_rect/camera_focus_ready_3.png | Bin 0 -> 257 bytes images/Touch AF_rect/camera_focus_ready_4.png | Bin 0 -> 251 bytes images/Touch AF_rect/camera_ready.png | Bin 0 -> 446 bytes images/Touch AF_rect/touch_af_focus_rect_01.9.png | Bin 0 -> 2852 bytes images/Touch AF_rect/touch_af_focus_rect_02.9.png | Bin 0 -> 2850 bytes images/Touch AF_rect/touch_af_focus_rect_03.9.png | Bin 0 -> 2857 bytes images/camara_icon_back.png | Bin 0 -> 4048 bytes images/camara_icon_back_press.png | Bin 0 -> 3988 bytes images/camcorder_recording_shutter.png | Bin 0 -> 13746 bytes images/camcorder_standby_shutter.png | Bin 0 -> 12302 bytes images/camera_action_bar_icon.png | Bin 0 -> 5475 bytes images/camera_handle.png | Bin 0 -> 8521 bytes images/camera_help_image.png | Bin 0 -> 23382 bytes images/camera_menu_bg.png | Bin 0 -> 3415 bytes images/camera_menu_bg_press.png | Bin 0 -> 3388 bytes images/camera_menu_tab_hold.png | Bin 0 -> 1692 bytes images/camera_mode_shutter_icon.png | Bin 0 -> 2249 bytes images/camera_mode_shutter_normal.png | Bin 0 -> 21827 bytes images/camera_mode_shutter_press.png | Bin 0 -> 21089 bytes images/camera_mode_thumbnail_bg.png | Bin 0 -> 2450 bytes images/camera_mode_thumbnail_bg_press.png | Bin 0 -> 2368 bytes images/camera_normal_left.png | Bin 0 -> 2210 bytes images/camera_normal_opacity_l_bg.png | Bin 0 -> 2122 bytes images/camera_normal_opacity_r_bg.png | Bin 0 -> 2241 bytes images/camera_normal_right.png | Bin 0 -> 2203 bytes images/camera_option_popup_anker.png | Bin 0 -> 3117 bytes images/camera_option_popup_bg.png | Bin 0 -> 3134 bytes images/camera_option_popup_bg_2depth.png | Bin 0 -> 3130 bytes images/camera_option_popup_scroll.png | Bin 0 -> 2860 bytes images/camera_option_popup_shadow_01.png | Bin 0 -> 10603 bytes images/camera_option_popup_shadow_02.png | Bin 0 -> 9836 bytes images/camera_popup_bg.9.png | Bin 0 -> 462 bytes images/camera_popup_ex.png | Bin 0 -> 1955 bytes images/camera_popup_ex_bar.png | Bin 0 -> 3130 bytes images/camera_popup_ex_line.png | Bin 0 -> 1086 bytes images/camera_popup_zoom.png | Bin 0 -> 1846 bytes images/camera_popup_zoom_bar.png | Bin 0 -> 1330 bytes images/camera_radio_btn_off.png | Bin 0 -> 2458 bytes images/camera_radio_btn_on.png | Bin 0 -> 3208 bytes images/camera_shoot_share_popup.png | Bin 0 -> 174 bytes images/camera_shortcut_line_h_01.png | Bin 0 -> 3912 bytes images/camera_shortcut_line_v_01.png | Bin 0 -> 3832 bytes images/camera_shortcut_line_v_02.png | Bin 0 -> 2276 bytes images/camera_shrtcut_edit_bg.png | Bin 0 -> 4197 bytes images/camera_shrtcut_menubar_bg.png | Bin 0 -> 2209 bytes images/camera_shrtcut_text_bg.png | Bin 0 -> 1595 bytes images/camera_timer_popup.png | Bin 0 -> 8502 bytes images/indicator/camera_indicator_battery_00.png | Bin 0 -> 3007 bytes images/indicator/camera_indicator_battery_01.png | Bin 0 -> 3234 bytes images/indicator/camera_indicator_battery_02.png | Bin 0 -> 3300 bytes images/indicator/camera_indicator_battery_03.png | Bin 0 -> 3300 bytes images/indicator/camera_indicator_battery_04.png | Bin 0 -> 3304 bytes images/indicator/camera_indicator_battery_05.png | Bin 0 -> 3288 bytes .../indicator/camera_indicator_battery_charge.png | Bin 0 -> 1455 bytes images/indicator/camera_indicator_battery_full.png | Bin 0 -> 3265 bytes images/indicator/camera_rec.png | Bin 0 -> 3926 bytes images/pinch_zoom_focus_rect_01.9.png | Bin 0 -> 2852 bytes .../camera_mode_effect_Black and white_nor.png | Bin 0 -> 4074 bytes .../camera_mode_effect_Black and white_press.png | Bin 0 -> 4090 bytes .../short cut/camera_mode_effect_negative_nor.png | Bin 0 -> 3981 bytes .../camera_mode_effect_negative_press.png | Bin 0 -> 4009 bytes images/short cut/camera_mode_effect_none_nor.png | Bin 0 -> 3277 bytes images/short cut/camera_mode_effect_none_press.png | Bin 0 -> 4424 bytes images/short cut/camera_mode_effect_sepia_nor.png | Bin 0 -> 4137 bytes .../short cut/camera_mode_effect_sepia_press.png | Bin 0 -> 4130 bytes .../short cut/camera_mode_guidelines_off_nor.png | Bin 0 -> 3214 bytes .../short cut/camera_mode_guidelines_off_press.png | Bin 0 -> 2527 bytes images/short cut/camera_mode_guidelines_on_nor.png | Bin 0 -> 1451 bytes .../short cut/camera_mode_guidelines_on_press.png | Bin 0 -> 1305 bytes images/short cut/camera_mode_refresh_nor.png | Bin 0 -> 3597 bytes images/short cut/camera_mode_refresh_press.png | Bin 0 -> 4713 bytes images/short cut/camera_mode_reset_nor.png | Bin 0 -> 4501 bytes images/short cut/camera_mode_reset_press.png | Bin 0 -> 5712 bytes images/short cut/camera_mode_setting_nor.png | Bin 0 -> 3075 bytes images/short cut/camera_mode_setting_press.png | Bin 0 -> 4350 bytes images/short cut/camera_mode_timer_10_nor.png | Bin 0 -> 4772 bytes images/short cut/camera_mode_timer_10_press.png | Bin 0 -> 5608 bytes images/short cut/camera_mode_timer_2_nor.png | Bin 0 -> 4663 bytes images/short cut/camera_mode_timer_2_press.png | Bin 0 -> 5494 bytes images/short cut/camera_mode_timer_5_nor.png | Bin 0 -> 4716 bytes images/short cut/camera_mode_timer_5_press.png | Bin 0 -> 5549 bytes images/short cut/camera_mode_timer_off_nor.png | Bin 0 -> 4690 bytes images/short cut/camera_mode_timer_off_press.png | Bin 0 -> 5578 bytes images/smale_shot_g.png | Bin 0 -> 2816 bytes images/smale_shot_o.png | Bin 0 -> 2815 bytes images/smale_shot_w.png | Bin 0 -> 2813 bytes images/tmp/11_camcorder_standby_press.png | Bin 0 -> 25958 bytes images/tmp/11_camcorder_standby_press_ver.png | Bin 0 -> 26128 bytes images/tmp/11_camera_mode_bg.png | Bin 0 -> 7075 bytes images/tmp/11_camera_mode_bg_ver.png | Bin 0 -> 7163 bytes images/tmp/11_camera_mode_button.png | Bin 0 -> 8788 bytes images/tmp/11_camera_mode_button_ver.png | Bin 0 -> 8842 bytes images/tmp/11_camera_mode_camcorder_off.png | Bin 0 -> 3363 bytes images/tmp/11_camera_mode_camcorder_on.png | Bin 0 -> 3363 bytes images/tmp/11_camera_mode_camera_off.png | Bin 0 -> 3613 bytes images/tmp/11_camera_mode_camera_on.png | Bin 0 -> 3613 bytes images/tmp/11_camera_mode_recording_normal.png | Bin 0 -> 24190 bytes images/tmp/11_camera_mode_recording_normal_ver.png | Bin 0 -> 23973 bytes images/tmp/11_camera_mode_recording_press.png | Bin 0 -> 23027 bytes images/tmp/11_camera_mode_recording_press_ver.png | Bin 0 -> 22954 bytes images/tmp/11_camera_snapshot.png | Bin 0 -> 8360 bytes images/tmp/11_camera_snapshot_press.png | Bin 0 -> 8146 bytes images/tmp/37_guideline_1.png | Bin 0 -> 2812 bytes images/tmp/37_guideline_2.png | Bin 0 -> 2811 bytes images/tmp/37_guideline_opa_1.png | Bin 0 -> 2814 bytes images/tmp/37_guideline_opa_2.png | Bin 0 -> 2812 bytes images/tmp/37_shootingmode_popup_bg.png | Bin 0 -> 698 bytes images/tmp/imageeditor_bottom_arrow.png | Bin 0 -> 3152 bytes images/tmp/imageeditor_left_arrow.png | Bin 0 -> 3203 bytes images/tmp/imageeditor_right_arrow.png | Bin 0 -> 3136 bytes images/tmp/imageeditor_top_arrow.png | Bin 0 -> 3141 bytes images/vertical/camera_mode_bg_ver.png | Bin 0 -> 3770 bytes images/vertical/camera_mode_button_ver.png | Bin 0 -> 7937 bytes images/vertical/camera_mode_option_bg_ver.PNG | Bin 0 -> 2804 bytes .../vertical/camera_mode_option_bg_ver_press.PNG | Bin 0 -> 2939 bytes images/vertical/camera_mode_shutter_normal_ver.png | Bin 0 -> 21672 bytes images/vertical/camera_mode_shutter_press_ver.png | Bin 0 -> 20774 bytes images/vertical/camera_normal_bg_ver.png | Bin 0 -> 1647 bytes images/vertical/camera_normal_bg_ver2.png | Bin 0 -> 1640 bytes images/vertical/camera_normal_bg_ver2_01.png | Bin 0 -> 625 bytes images/vertical/camera_normal_bg_ver_01.png | Bin 0 -> 625 bytes .../camera_option_popup_anker_vertical.png | Bin 0 -> 3154 bytes images/vertical/camera_popup_ex_bar_ver.png | Bin 0 -> 3111 bytes images/vertical/camera_popup_ex_line_ver.png | Bin 0 -> 1094 bytes .../vertical/camera_popup_exposure_vertical_bg.png | Bin 0 -> 592 bytes images/vertical/camera_popup_zoom_bar_ver.png | Bin 0 -> 1292 bytes images/vertical/camera_popup_zoom_ver.png | Bin 0 -> 515 bytes images/vertical/camera_shrtcut_edit_bg_02_ver.png | Bin 0 -> 3682 bytes images/vertical/camera_shrtcut_edit_bg_ver.png | Bin 0 -> 4250 bytes images/vertical/camera_shrtcut_menubar_bg_ver.png | Bin 0 -> 1783 bytes images/vertical/camera_shrtcut_text_bg_ver.png | Bin 0 -> 1618 bytes include/CamDeviceCapacity.h | 82 + include/CamTypeConverter.h | 33 + include/cam.h | 411 ++ include/cam_animation.h | 24 + include/cam_app.h | 438 ++ include/cam_capacity_type.h | 66 + include/cam_config.h | 84 + include/cam_debug.h | 296 + include/cam_device_capacity.h | 39 + include/cam_devman.h | 27 + include/cam_error.h | 66 + include/cam_file.h | 88 + include/cam_image_name.h | 77 + include/cam_long_press.h | 42 + include/cam_menu_composer.h | 30 + include/cam_mm.h | 170 + include/cam_popup.h | 76 + include/cam_property.h | 598 ++ include/cam_rec.h | 44 + include/cam_sound.h | 56 + include/cam_ta.h | 112 + include/cam_typeconverter.h | 40 + include/cam_ui_effect_utils.h | 80 + include/cam_ui_rotate_utils.h | 101 + include/camera_utils.h | 147 + include/edc-callback/cam_common_edc_callback.h | 33 + include/edc-callback/cam_indicator_edc_callback.h | 28 + include/edc-callback/cam_recording_edc_callback.h | 28 + include/edc-callback/cam_toolbar_edc_callback.h | 69 + include/edc-callback/cam_zoom_edc_callback.h | 37 + include/edc_image_name.h | 106 + include/edc_string.h | 109 + org.tizen.camera-app.png | Bin 0 -> 10899 bytes org.tizen.camera-app.xml | 30 + org.tizen.camera.jpg | Bin 0 -> 31892 bytes packaging/org.tizen.camera-app.spec | 72 + po/CMakeLists.txt | 26 + po/POTFILES.in | 37 + po/ar.po | 327 + po/backup_en_US.po | 521 ++ po/bg.po | 327 + po/ca.po | 327 + po/camera.pot | 37 + po/cs.po | 327 + po/da.po | 327 + po/de.po | 327 + po/el.po | 327 + po/en.po | 327 + po/en_US.po | 327 + po/es.po | 327 + po/fi.po | 327 + po/fr.po | 327 + po/he.po | 327 + po/hi.po | 327 + po/hr.po | 327 + po/htm2po.py | 97 + po/hu.po | 327 + po/id.po | 327 + po/it.po | 327 + po/ja.po | 327 + po/ko.po | 327 + po/lt.po | 327 + po/lv.po | 327 + po/ms.po | 327 + po/nl.po | 327 + po/no.po | 327 + po/pl.po | 327 + po/pt.po | 327 + po/ro.po | 327 + po/ru.po | 327 + po/sk.po | 327 + po/sl.po | 327 + po/sr.po | 327 + po/sv.po | 327 + po/th.po | 327 + po/tr_TR.po | 327 + po/uk.po | 327 + po/update-po.sh | 57 + po/vi.po | 327 + po/zh_CN.po | 327 + po/zh_HK.po | 327 + po/zh_TW.po | 327 + sounds/Shutter_01.wav | Bin 0 -> 31228 bytes sounds/Shutter_02.wav | Bin 0 -> 66714 bytes sounds/Shutter_03.wav | Bin 0 -> 35326 bytes sounds/af_fail.wav | Bin 0 -> 18132 bytes sounds/af_ok.wav | Bin 0 -> 16104 bytes sounds/cam_start_01.wav | Bin 0 -> 22228 bytes sounds/cam_start_02.wav | Bin 0 -> 20162 bytes sounds/cam_start_03.wav | Bin 0 -> 26584 bytes sounds/cam_stop_01.wav | Bin 0 -> 39852 bytes sounds/cam_stop_02.wav | Bin 0 -> 21844 bytes sounds/cam_stop_03.wav | Bin 0 -> 26584 bytes sounds/count.wav | Bin 0 -> 26700 bytes src/CamDeviceCapacity.cpp | 183 + src/CamTypeConverter.cpp | 104 + src/cam.c | 731 ++ src/cam_animation.c | 389 + src/cam_app.c | 7642 ++++++++++++++++++++ src/cam_config.c | 360 + src/cam_debug.c | 291 + src/cam_device_capacity.cpp | 45 + src/cam_devman.c | 59 + src/cam_file.c | 489 ++ src/cam_long_press.c | 162 + src/cam_menu_composer.c | 169 + src/cam_mm.c | 1753 +++++ src/cam_popup.c | 290 + src/cam_rec.c | 477 ++ src/cam_sound.c | 263 + src/cam_ta.c | 620 ++ src/cam_typeconverter.cpp | 36 + src/cam_ui_effect_utils.c | 167 + src/cam_ui_rotate_utils.c | 602 ++ src/camera_utils.c | 1451 ++++ src/edc-callback/cam_common_edc_callback.c | 573 ++ src/edc-callback/cam_indicator_edc_callback.c | 215 + src/edc-callback/cam_recording_edc_callback.c | 449 ++ src/edc-callback/cam_toolbar_edc_callback.c | 4439 ++++++++++++ src/edc-callback/cam_zoom_edc_callback.c | 307 + 304 files changed, 54401 insertions(+) create mode 100644 .camera.ini create mode 100644 .gitignore create mode 100755 CMakeLists.txt create mode 100644 LICENSE create mode 100644 edc/cam_capture_image_selection.edc create mode 100644 edc/cam_ctxpopup_shortcuts.edc create mode 100644 edc/cam_funcs.edc create mode 100644 edc/cam_guideline_edje.edc create mode 100755 edc/cam_indicator_layout.edc create mode 100644 edc/cam_main_layout.edc create mode 100644 edc/cam_recording_edje.edc create mode 100644 edc/cam_recording_edje_inc.edc create mode 100644 edc/cam_recording_edje_inverse.edc create mode 100644 edc/cam_recording_edje_inverse_inc.edc create mode 100644 edc/cam_recording_edje_vertical.edc create mode 100644 edc/cam_recording_edje_vertical_inc.edc create mode 100644 edc/cam_recording_edje_vertical_inverse.edc create mode 100644 edc/cam_recording_edje_vertical_inverse_inc.edc create mode 100644 edc/cam_setting_popup_layout.edc create mode 100644 edc/cam_setting_popup_layout_inc.edc create mode 100644 edc/cam_toolbar_layout.edc create mode 100644 edc/cam_toolbar_layout_inc.edc create mode 100644 edc/cam_toolbar_layout_inverse.edc create mode 100644 edc/cam_toolbar_layout_inverse_inc.edc create mode 100644 edc/cam_toolbar_layout_vertical.edc create mode 100644 edc/cam_toolbar_layout_vertical_inc.edc create mode 100644 edc/cam_toolbar_layout_vertical_inverse.edc create mode 100644 edc/cam_toolbar_layout_vertical_inverse_inc.edc create mode 100644 edc/cam_utils.edc create mode 100644 edc/cam_zoom_layout.edc create mode 100644 edc/cam_zoom_layout_inverse.edc create mode 100644 edc/cam_zoom_layout_vertical.edc create mode 100644 edc/cam_zoom_layout_vertical_inverse.edc create mode 100644 edc/style_ctxpopup_camera.edc create mode 100644 edc/style_ctxpopup_camera_with_radio.edc create mode 100644 edc/style_genlist_macro.edc create mode 100644 edc/style_genlist_normal.edc create mode 100644 edc/style_slider_camera.edc create mode 100644 edc/style_tizen_hd_inc.edc create mode 100644 images/00_check_off.png create mode 100644 images/00_check_on.png create mode 100644 images/Touch AF_rect/camera_focus_fail.png create mode 100644 images/Touch AF_rect/camera_focus_fail_1.png create mode 100644 images/Touch AF_rect/camera_focus_fail_2.png create mode 100644 images/Touch AF_rect/camera_focus_fail_3.png create mode 100644 images/Touch AF_rect/camera_focus_fail_4.png create mode 100644 images/Touch AF_rect/camera_focus_notready.png create mode 100644 images/Touch AF_rect/camera_focus_notready_1.png create mode 100644 images/Touch AF_rect/camera_focus_notready_2.png create mode 100644 images/Touch AF_rect/camera_focus_notready_3.png create mode 100644 images/Touch AF_rect/camera_focus_notready_4.png create mode 100644 images/Touch AF_rect/camera_focus_ready_1.png create mode 100644 images/Touch AF_rect/camera_focus_ready_2.png create mode 100644 images/Touch AF_rect/camera_focus_ready_3.png create mode 100644 images/Touch AF_rect/camera_focus_ready_4.png create mode 100644 images/Touch AF_rect/camera_ready.png create mode 100644 images/Touch AF_rect/touch_af_focus_rect_01.9.png create mode 100644 images/Touch AF_rect/touch_af_focus_rect_02.9.png create mode 100644 images/Touch AF_rect/touch_af_focus_rect_03.9.png create mode 100644 images/camara_icon_back.png create mode 100644 images/camara_icon_back_press.png create mode 100644 images/camcorder_recording_shutter.png create mode 100644 images/camcorder_standby_shutter.png create mode 100644 images/camera_action_bar_icon.png create mode 100644 images/camera_handle.png create mode 100644 images/camera_help_image.png create mode 100644 images/camera_menu_bg.png create mode 100644 images/camera_menu_bg_press.png create mode 100644 images/camera_menu_tab_hold.png create mode 100644 images/camera_mode_shutter_icon.png create mode 100644 images/camera_mode_shutter_normal.png create mode 100644 images/camera_mode_shutter_press.png create mode 100644 images/camera_mode_thumbnail_bg.png create mode 100644 images/camera_mode_thumbnail_bg_press.png create mode 100644 images/camera_normal_left.png create mode 100644 images/camera_normal_opacity_l_bg.png create mode 100644 images/camera_normal_opacity_r_bg.png create mode 100644 images/camera_normal_right.png create mode 100644 images/camera_option_popup_anker.png create mode 100644 images/camera_option_popup_bg.png create mode 100644 images/camera_option_popup_bg_2depth.png create mode 100644 images/camera_option_popup_scroll.png create mode 100644 images/camera_option_popup_shadow_01.png create mode 100644 images/camera_option_popup_shadow_02.png create mode 100644 images/camera_popup_bg.9.png create mode 100644 images/camera_popup_ex.png create mode 100644 images/camera_popup_ex_bar.png create mode 100644 images/camera_popup_ex_line.png create mode 100644 images/camera_popup_zoom.png create mode 100644 images/camera_popup_zoom_bar.png create mode 100644 images/camera_radio_btn_off.png create mode 100644 images/camera_radio_btn_on.png create mode 100644 images/camera_shoot_share_popup.png create mode 100644 images/camera_shortcut_line_h_01.png create mode 100644 images/camera_shortcut_line_v_01.png create mode 100644 images/camera_shortcut_line_v_02.png create mode 100644 images/camera_shrtcut_edit_bg.png create mode 100644 images/camera_shrtcut_menubar_bg.png create mode 100644 images/camera_shrtcut_text_bg.png create mode 100644 images/camera_timer_popup.png create mode 100644 images/indicator/camera_indicator_battery_00.png create mode 100644 images/indicator/camera_indicator_battery_01.png create mode 100644 images/indicator/camera_indicator_battery_02.png create mode 100644 images/indicator/camera_indicator_battery_03.png create mode 100644 images/indicator/camera_indicator_battery_04.png create mode 100644 images/indicator/camera_indicator_battery_05.png create mode 100644 images/indicator/camera_indicator_battery_charge.png create mode 100644 images/indicator/camera_indicator_battery_full.png create mode 100644 images/indicator/camera_rec.png create mode 100644 images/pinch_zoom_focus_rect_01.9.png create mode 100644 images/short cut/camera_mode_effect_Black and white_nor.png create mode 100644 images/short cut/camera_mode_effect_Black and white_press.png create mode 100644 images/short cut/camera_mode_effect_negative_nor.png create mode 100644 images/short cut/camera_mode_effect_negative_press.png create mode 100644 images/short cut/camera_mode_effect_none_nor.png create mode 100644 images/short cut/camera_mode_effect_none_press.png create mode 100644 images/short cut/camera_mode_effect_sepia_nor.png create mode 100644 images/short cut/camera_mode_effect_sepia_press.png create mode 100644 images/short cut/camera_mode_guidelines_off_nor.png create mode 100644 images/short cut/camera_mode_guidelines_off_press.png create mode 100644 images/short cut/camera_mode_guidelines_on_nor.png create mode 100644 images/short cut/camera_mode_guidelines_on_press.png create mode 100644 images/short cut/camera_mode_refresh_nor.png create mode 100644 images/short cut/camera_mode_refresh_press.png create mode 100644 images/short cut/camera_mode_reset_nor.png create mode 100644 images/short cut/camera_mode_reset_press.png create mode 100644 images/short cut/camera_mode_setting_nor.png create mode 100644 images/short cut/camera_mode_setting_press.png create mode 100644 images/short cut/camera_mode_timer_10_nor.png create mode 100644 images/short cut/camera_mode_timer_10_press.png create mode 100644 images/short cut/camera_mode_timer_2_nor.png create mode 100644 images/short cut/camera_mode_timer_2_press.png create mode 100644 images/short cut/camera_mode_timer_5_nor.png create mode 100644 images/short cut/camera_mode_timer_5_press.png create mode 100644 images/short cut/camera_mode_timer_off_nor.png create mode 100644 images/short cut/camera_mode_timer_off_press.png create mode 100644 images/smale_shot_g.png create mode 100644 images/smale_shot_o.png create mode 100644 images/smale_shot_w.png create mode 100644 images/tmp/11_camcorder_standby_press.png create mode 100644 images/tmp/11_camcorder_standby_press_ver.png create mode 100644 images/tmp/11_camera_mode_bg.png create mode 100644 images/tmp/11_camera_mode_bg_ver.png create mode 100644 images/tmp/11_camera_mode_button.png create mode 100644 images/tmp/11_camera_mode_button_ver.png create mode 100644 images/tmp/11_camera_mode_camcorder_off.png create mode 100644 images/tmp/11_camera_mode_camcorder_on.png create mode 100644 images/tmp/11_camera_mode_camera_off.png create mode 100644 images/tmp/11_camera_mode_camera_on.png create mode 100644 images/tmp/11_camera_mode_recording_normal.png create mode 100644 images/tmp/11_camera_mode_recording_normal_ver.png create mode 100644 images/tmp/11_camera_mode_recording_press.png create mode 100644 images/tmp/11_camera_mode_recording_press_ver.png create mode 100644 images/tmp/11_camera_snapshot.png create mode 100644 images/tmp/11_camera_snapshot_press.png create mode 100644 images/tmp/37_guideline_1.png create mode 100644 images/tmp/37_guideline_2.png create mode 100644 images/tmp/37_guideline_opa_1.png create mode 100644 images/tmp/37_guideline_opa_2.png create mode 100644 images/tmp/37_shootingmode_popup_bg.png create mode 100644 images/tmp/imageeditor_bottom_arrow.png create mode 100644 images/tmp/imageeditor_left_arrow.png create mode 100644 images/tmp/imageeditor_right_arrow.png create mode 100644 images/tmp/imageeditor_top_arrow.png create mode 100644 images/vertical/camera_mode_bg_ver.png create mode 100644 images/vertical/camera_mode_button_ver.png create mode 100644 images/vertical/camera_mode_option_bg_ver.PNG create mode 100644 images/vertical/camera_mode_option_bg_ver_press.PNG create mode 100644 images/vertical/camera_mode_shutter_normal_ver.png create mode 100644 images/vertical/camera_mode_shutter_press_ver.png create mode 100644 images/vertical/camera_normal_bg_ver.png create mode 100644 images/vertical/camera_normal_bg_ver2.png create mode 100644 images/vertical/camera_normal_bg_ver2_01.png create mode 100644 images/vertical/camera_normal_bg_ver_01.png create mode 100644 images/vertical/camera_option_popup_anker_vertical.png create mode 100644 images/vertical/camera_popup_ex_bar_ver.png create mode 100644 images/vertical/camera_popup_ex_line_ver.png create mode 100644 images/vertical/camera_popup_exposure_vertical_bg.png create mode 100644 images/vertical/camera_popup_zoom_bar_ver.png create mode 100644 images/vertical/camera_popup_zoom_ver.png create mode 100644 images/vertical/camera_shrtcut_edit_bg_02_ver.png create mode 100644 images/vertical/camera_shrtcut_edit_bg_ver.png create mode 100644 images/vertical/camera_shrtcut_menubar_bg_ver.png create mode 100644 images/vertical/camera_shrtcut_text_bg_ver.png create mode 100755 include/CamDeviceCapacity.h create mode 100755 include/CamTypeConverter.h create mode 100755 include/cam.h create mode 100644 include/cam_animation.h create mode 100755 include/cam_app.h create mode 100755 include/cam_capacity_type.h create mode 100644 include/cam_config.h create mode 100644 include/cam_debug.h create mode 100755 include/cam_device_capacity.h create mode 100644 include/cam_devman.h create mode 100755 include/cam_error.h create mode 100644 include/cam_file.h create mode 100755 include/cam_image_name.h create mode 100644 include/cam_long_press.h create mode 100755 include/cam_menu_composer.h create mode 100755 include/cam_mm.h create mode 100644 include/cam_popup.h create mode 100755 include/cam_property.h create mode 100644 include/cam_rec.h create mode 100644 include/cam_sound.h create mode 100644 include/cam_ta.h create mode 100755 include/cam_typeconverter.h create mode 100644 include/cam_ui_effect_utils.h create mode 100644 include/cam_ui_rotate_utils.h create mode 100755 include/camera_utils.h create mode 100755 include/edc-callback/cam_common_edc_callback.h create mode 100755 include/edc-callback/cam_indicator_edc_callback.h create mode 100644 include/edc-callback/cam_recording_edc_callback.h create mode 100644 include/edc-callback/cam_toolbar_edc_callback.h create mode 100755 include/edc-callback/cam_zoom_edc_callback.h create mode 100755 include/edc_image_name.h create mode 100755 include/edc_string.h create mode 100644 org.tizen.camera-app.png create mode 100644 org.tizen.camera-app.xml create mode 100644 org.tizen.camera.jpg create mode 100644 packaging/org.tizen.camera-app.spec create mode 100644 po/CMakeLists.txt create mode 100644 po/POTFILES.in create mode 100644 po/ar.po create mode 100644 po/backup_en_US.po create mode 100644 po/bg.po create mode 100644 po/ca.po create mode 100644 po/camera.pot create mode 100644 po/cs.po create mode 100644 po/da.po create mode 100644 po/de.po create mode 100644 po/el.po create mode 100644 po/en.po create mode 100644 po/en_US.po create mode 100644 po/es.po create mode 100644 po/fi.po create mode 100644 po/fr.po create mode 100644 po/he.po create mode 100644 po/hi.po create mode 100644 po/hr.po create mode 100644 po/htm2po.py create mode 100644 po/hu.po create mode 100644 po/id.po create mode 100644 po/it.po create mode 100644 po/ja.po create mode 100644 po/ko.po create mode 100644 po/lt.po create mode 100644 po/lv.po create mode 100644 po/ms.po create mode 100644 po/nl.po create mode 100644 po/no.po create mode 100644 po/pl.po create mode 100644 po/pt.po create mode 100644 po/ro.po create mode 100644 po/ru.po create mode 100644 po/sk.po create mode 100644 po/sl.po create mode 100644 po/sr.po create mode 100644 po/sv.po create mode 100644 po/th.po create mode 100644 po/tr_TR.po create mode 100644 po/uk.po create mode 100644 po/update-po.sh create mode 100644 po/vi.po create mode 100644 po/zh_CN.po create mode 100644 po/zh_HK.po create mode 100644 po/zh_TW.po create mode 100644 sounds/Shutter_01.wav create mode 100644 sounds/Shutter_02.wav create mode 100644 sounds/Shutter_03.wav create mode 100644 sounds/af_fail.wav create mode 100644 sounds/af_ok.wav create mode 100644 sounds/cam_start_01.wav create mode 100644 sounds/cam_start_02.wav create mode 100644 sounds/cam_start_03.wav create mode 100644 sounds/cam_stop_01.wav create mode 100644 sounds/cam_stop_02.wav create mode 100644 sounds/cam_stop_03.wav create mode 100644 sounds/count.wav create mode 100755 src/CamDeviceCapacity.cpp create mode 100755 src/CamTypeConverter.cpp create mode 100755 src/cam.c create mode 100644 src/cam_animation.c create mode 100755 src/cam_app.c create mode 100644 src/cam_config.c create mode 100644 src/cam_debug.c create mode 100755 src/cam_device_capacity.cpp create mode 100644 src/cam_devman.c create mode 100644 src/cam_file.c create mode 100644 src/cam_long_press.c create mode 100755 src/cam_menu_composer.c create mode 100755 src/cam_mm.c create mode 100644 src/cam_popup.c create mode 100755 src/cam_rec.c create mode 100644 src/cam_sound.c create mode 100644 src/cam_ta.c create mode 100755 src/cam_typeconverter.cpp create mode 100644 src/cam_ui_effect_utils.c create mode 100644 src/cam_ui_rotate_utils.c create mode 100755 src/camera_utils.c create mode 100755 src/edc-callback/cam_common_edc_callback.c create mode 100755 src/edc-callback/cam_indicator_edc_callback.c create mode 100644 src/edc-callback/cam_recording_edc_callback.c create mode 100755 src/edc-callback/cam_toolbar_edc_callback.c create mode 100755 src/edc-callback/cam_zoom_edc_callback.c diff --git a/.camera.ini b/.camera.ini new file mode 100644 index 0000000..a614fd0 --- /dev/null +++ b/.camera.ini @@ -0,0 +1,48 @@ + +[common] +mode=1 + +[still] +storage=0 +ahs=0 +scene_mode=0 +iso=0 +flash=0 +wdr=0 +metering=2 +resolution=167774080 +brightness=5 +image_quality=95 +video_quality=95 +review=false +shutter_sound=0 +guideline=false +af_mode=1 +wb=1 +effect=0 +contrast=4 +saturation=4 +sharpness=4 +audio_rec=true +toolbar_0 =-1 +toolbar_1 =-1 +toolbar_2 =-1 +toolbar_3 =-1 +toolbar_4 =-1 +[video] +ahs=0 +scene_mode=0 +iso=0 +flash=0 +guideline=false +wdr=0 +metering=2 +resolution=41943520 +image_quality=95 +video_quality=95 +review=false +toolbar_0 =-1 +toolbar_1 =-1 +toolbar_2 =-1 +toolbar_3 =-1 +toolbar_4 =-1 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..d8ba09e --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,151 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(camera 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(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") + +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_rec.c +src/cam_devman.c +src/cam_popup.c +src/cam_long_press.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/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_zoom_edc_callback.c +src/edc-callback/cam_recording_edc_callback.c +) + +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-haptic + capi-system-power + gconf-2.0 vconf dlog ui-gadget-1 + utilX + ecore-x ecore ecore-evas ecore-input eina + syspopup-caller +) +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(PREFIX ${CMAKE_INSTALL_PREFIX}) +SET(BINDIR "${PREFIX}/bin") +SET(RESDIR "${PREFIX}/res") +SET(DATADIR "${PREFIX}/data") +SET(LOCALEDIR "${RESDIR}/locale") +SET(ICONDIR "${RESDIR}/icons/default/small") +SET(EDJDIR "${RESDIR}/edje") +SET(IMAGEDIR "${RESDIR}/images") + +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("-DIMAGEDIR=\"${IMAGESDIR}\"") +ADD_DEFINITIONS("-DSLP_DEBUG") + +if(NOT "${CMAKE_SYSTEM_VERSION}" MATCHES "^arm.*") +add_definitions(-DCAMERA_MACHINE_I686="${CMAKE_SYSTEM_VERSION}") +endif() + +ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) + +if("${CMAKE_SYSTEM_VERSION}" MATCHES "^arm.*") + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} ${EXTPkgs_LDFLAGS} "-pie") + +else() +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS}) +endif() +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin) + +###################################### EDC, Begin ################################ +SET(EDC_DIR ${CMAKE_SOURCE_DIR}/edc) +SET(IMAGE_DIR ${CMAKE_SOURCE_DIR}/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_ctxpopup_camera +style_slider_camera +cam_indicator_layout +cam_utils +cam_zoom_layout +cam_zoom_layout_inverse +cam_zoom_layout_vertical +cam_zoom_layout_vertical_inverse +cam_ctxpopup_shortcuts +cam_setting_popup_layout +) + +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 manifest file & icon +INSTALL(FILES ${CMAKE_SOURCE_DIR}/org.tizen.camera-app.xml DESTINATION /opt/share/packages/) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/org.tizen.camera-app.png DESTINATION /opt/share/icons/default/small/) +INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/sounds DESTINATION ${RESDIR}) +INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/images DESTINATION ${RESDIR}) + +# install .camera.ini file +INSTALL(FILES ${CMAKE_SOURCE_DIR}/.camera.ini DESTINATION ${DATADIR}) + +# i18n +ADD_SUBDIRECTORY(po) + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7ccb5b5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,75 @@ +Flora License + +Version 1.0, May, 2012 + +http://www.tizenopensource.org/license + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +"Tizen Certified Platform" shall mean a software platform that complies with the standards set forth in the Compatibility Definition Document and passes the Compatibility Test Suite as defined from time to time by the Tizen Technical Steering Group and certified by the Tizen Association or its designated agent. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work solely as incorporated into a Tizen Certified Platform, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work solely as incorporated into a Tizen Certified Platform to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof pursuant to the copyright license above, in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Flora License to your work + +To apply the Flora License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Flora License, Version 1.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.tizenopensource.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/edc/cam_capture_image_selection.edc b/edc/cam_capture_image_selection.edc new file mode 100644 index 0000000..a2a8eb7 --- /dev/null +++ b/edc/cam_capture_image_selection.edc @@ -0,0 +1,72 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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"; + parts { + part { name: "captured_image_selection"; + 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 255; + } + } + + part { name: CAPTURED_IMAGE_SCREEN; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: -1 -1; } + } + } + + part { name: CAPTURED_IMAGE_RETRY; + type: SWALLOW; + scale: 1; + + description { state: "default" 0.0; + fixed: 1 1; + rel1 { relative: 0.0 1.0; to: CAPTURED_IMAGE_SCREEN; offset: +20 -30} + rel2 { relative: 0.0 1.0; to: CAPTURED_IMAGE_SCREEN; offset: +30 -20} + align: 0.5 0.5; + } + } + + part { name: CAPTURED_IMAGE_SAVE; + type: SWALLOW; + scale: 1; + + description { state: "default" 0.0; + fixed: 1 1; + rel1 { relative: 1.0 1.0; to: CAPTURED_IMAGE_SCREEN; offset: -40 -30} + rel2 { relative: 1.0 1.0; to: CAPTURED_IMAGE_SCREEN; offset: -20 -20} + align: 0.5 0.5; + } + } + + } + + + } +} diff --git a/edc/cam_ctxpopup_shortcuts.edc b/edc/cam_ctxpopup_shortcuts.edc new file mode 100644 index 0000000..53d571a --- /dev/null +++ b/edc/cam_ctxpopup_shortcuts.edc @@ -0,0 +1,853 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 SHOTCUTS_MENU_H(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/SHORTCUTS_PANEL_HEIGHT) (rely1/SHORTCUTS_PANEL_HEIGHT); to:to_part;} \ + rel2 { relative: (relx2/SHORTCUTS_PANEL_HEIGHT) (rely2/SHORTCUTS_PANEL_HEIGHT); to:to_part;} \ + } \ + } + + /*#define SHOTCUTS_LINE_V_IMAGE*/ + 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; + } + +collections { + 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 180; + max: 180 180; + 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 100/180; 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/180; 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; + fixed: 1 1; + 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.1"; + type: TEXT; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0.5 0.5; + fixed: 1 1; + rel1 { relative: 0.0 0.0; to:"ele.bg.bottom";} + rel2 { relative: 1.0 0.45; to:"ele.bg.bottom";} + text { + font: FONT_NAME; + size: 30; + align: 0.5 0.5; + min: 1 1; + text: ""; + } + } + } + part { + name: "ele.txt.2"; + type: TEXT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 1; + align: 0.5 0.5; + fixed: 1 1; + rel1 { relative: 0.0 0.55; to:"ele.bg.bottom";} + rel2 { relative: 1.0 1.0; to:"ele.bg.bottom";} + text { + font: FONT_NAME; + size: 30; + align: 0.5 0.5; + min: 1 1; + text: ""; + } + } + } + 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; + fixed: 0 1; + rel1 { relative: 1.0 1.0; to:"ele.txt.2";} + rel2 { relative: 1.0 1.0; to:"ele.txt.2";} + } + } + + } + } + + #define SHORTCUST_LAYOUT_WIDTH 720 + #define SHORTCUST_LAYOUT_HEIGHT 930 + + 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 138; + fixed: 1 1; + 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: "description.txt.1"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + rel1 { + relative: 0.0 48/138; + to: "bg.content.img"; + } + rel2 { + relative: 1.0 78/138; + to: "bg.content.img"; + } + align: 0.0 0.0; + text { + font: FONT_NAME; + size: 30; + align: 0.5 0.5; + min: 1 1; + text: "Tap and hold an icon and move to edit"; + } + /*color: 0 0 0 255;*/ + } + } + part { name: "description.txt.2"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + rel1 { + relative: 0.0 78/138; + to: "bg.content.img"; + } + rel2 { + relative: 1.0 108/138; + to: "bg.content.img"; + } + align: 0.0 0.0; + text { + font: FONT_NAME; + size: 30; + align: 0.5 0.5; + min: 1 1; + text: "your shortcuts"; + } + /*color: 0 0 0 255;*/ + } + }//end part: "line_v.txt.2" + }//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: 980 880;*/ + min: SHORTCUST_LAYOUT_WIDTH SHORTCUST_LAYOUT_HEIGHT; + fixed: 1 0; + 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 900/SHORTCUST_LAYOUT_HEIGHT; to: "bg";} + } + } + part { + name: "bg.content.text"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + rel1 { relative: 0.0 900/SHORTCUST_LAYOUT_HEIGHT; to: "bg";} + rel2 { relative: 1.0 1.0; to: "bg";} + } + } + + part { name: "bg.padding.top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 13; + fixed: 0 1; + 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_v.1.padding.top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 180; + fixed: 0 1; + 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_v.1"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + min: 0 4; + fixed: 0 1; + visible: 1; + rel1 { + relative: 0.0 1.0; + to: "line_v.1.padding.top"; + } + rel2 { + relative: 1.0 1.0; + to: "line_v.1.padding.top"; + } + align: 0.0 0.0; + image{ + normal: SHOTCUTS_LINE_V_IMAGE ; + } + /*color: 0 0 0 255;*/ + } + } + + part { name: "line_v.2.padding.top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 180; + fixed: 0 1; + visible: 0; + rel1 { + relative: 0.0 1.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; + description { + state: "default" 0.0; + min: 0 4; + fixed: 0 1; + visible: 1; + rel1 { + relative: 0.0 1.0; + to: "line_v.2.padding.top"; + } + rel2 { + relative: 1.0 1.0; + to: "line_v.2.padding.top"; + } + image{ + normal: SHOTCUTS_LINE_V_IMAGE ; + } + align: 0.0 0.0; + /*color: 0 0 0 255;*/ + } + } + + part { name: "line_v.3.padding.top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 180; + fixed: 0 1; + visible: 0; + rel1 { + relative: 0.0 1.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; + description { + state: "default" 0.0; + min: 0 4; + fixed: 0 1; + visible: 1; + rel1 { + relative: 0.0 1.0; + to: "line_v.3.padding.top"; + } + rel2 { + relative: 1.0 1.0; + to: "line_v.3.padding.top"; + } + align: 0.0 0.0; + image{ + normal: SHOTCUTS_LINE_V_IMAGE ; + } + /*color: 0 0 0 255;*/ + } + } + + part { name: "line_v.4.padding.top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 180; + fixed: 0 1; + visible: 0; + rel1 { + relative: 0.0 1.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; + } + } + part { name: "line_v.4"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + min: 0 4; + fixed: 0 1; + visible: 1; + rel1 { + relative: 0.0 1.0; + to: "line_v.4.padding.top"; + } + rel2 { + relative: 1.0 1.0; + to: "line_v.4.padding.top"; + } + align: 0.0 0.0; + image{ + normal: SHOTCUTS_LINE_V_IMAGE ; + } + /*color: 0 0 0 255;*/ + } + } + + part { name: "line_v.5.padding.top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 180; + fixed: 0 1; + visible: 0; + rel1 { + relative: 0.0 1.0; + to: "line_v.4"; + } + rel2 { + relative: 1.0 1.0; + to: "line_v.4"; + } + align: 0.0 0.0; + color: 0 0 0 255; + } + } + + part { name: "line_v.5"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + min: 0 4; + fixed: 0 1; + visible: 1; + rel1 { + relative: 0.0 1.0; + to: "line_v.5.padding.top"; + } + rel2 { + relative: 1.0 1.0; + to: "line_v.5.padding.top"; + } + align: 0.0 0.0; + image{ + normal: SHOTCUTS_LINE_V_IMAGE ; + } + /*color: 0 0 0 255;*/ + } + } +#if 0 + part { name: "line_v.6.padding.top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 48; + fixed: 0 1; + visible: 0; + rel1 { + relative: 0.0 1.0; + to: "line_v.5"; + } + rel2 { + relative: 1.0 1.0; + to: "line_v.5"; + } + align: 0.0 0.0; + color: 0 0 0 255; + } + } + + part { name: "line_v.txt.1"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + min: 0 30; + fixed: 0 1; + visible: 1; + rel1 { + relative: 0.0 1.0; + to: "line_v.6.padding.top"; + } + rel2 { + relative: 1.0 1.0; + to: "line_v.6.padding.top"; + } + align: 0.0 0.0; + text { + font: FONT_NAME; + size: 30; + align: 0.5 0.5; + min: 1 1; + text: "Tap and hold an icon and move to edit"; + } + /*color: 0 0 0 255;*/ + } + } + part { name: "line_v.txt.2"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + min: 0 30; + fixed: 0 1; + visible: 1; + rel1 { + relative: 0.0 1.0; + to: "line_v.txt.1"; + } + rel2 { + relative: 1.0 1.0; + to: "line_v.txt.1"; + } + align: 0.0 0.0; + text { + font: FONT_NAME; + size: 30; + align: 0.5 0.5; + min: 1 1; + text: "your shortcuts"; + } + /*color: 0 0 0 255;*/ + } + } +#endif + part { name: "line_h.1.padding.left"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + min: 180 0; + fixed: 1 0; + 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_h.1"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 1; + min: 4 900; + fixed: 1 1; + visible: 1; + rel1 { + relative: 1.0 0.0; to:"line_h.1.padding.left"; + } + rel2 { + relative: 1.0 1.0; to:"line_h.1.padding.left"; + } + image{ + normal: SHOTCUTS_LINE_H_IMAGE ; + } + align: 0.0 0.0; + } + + } + part { name: "line_h.2.padding.left"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + min: 180 0; + fixed: 1 0; + visible: 0; + rel1 { + relative: 1.0 0.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; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 1; + min: 4 0; + fixed: 1 0; + rel1 { + relative: 1.0 0.0; to:"line_h.2.padding.left"; + } + rel2 { + relative: 1.0 1.0; to:"line_h.2.padding.left"; + } + image{ + normal: SHOTCUTS_LINE_H_IMAGE ; + } + align: 0.0 0.0; + } + + } + part { name: "line_h.3.padding.left"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + min: 180 0; + fixed: 1 0; + visible: 0; + rel1 { + relative: 1.0 0.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; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 1; + min: 4 0; + fixed: 1 0; + rel1 { + relative: 1.0 0.0; to:"line_h.3.padding.left"; + } + rel2 { + relative: 1.0 1.0; to:"line_h.3.padding.left"; + } + image{ + normal: SHOTCUTS_LINE_H_IMAGE ; + } + align: 0.0 0.0; + } + + } + part { name: "line_h.4.padding.left"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + min: 180 0; + fixed: 1 0; + visible: 0; + rel1 { + relative: 1.0 0.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; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 1; + min: 4 0; + fixed: 1 0; + rel1 { + relative: 1.0 0.0; to:"line_h.4.padding.left"; + } + rel2 { + relative: 1.0 1.0; to:"line_h.4.padding.left"; + } + image{ + normal: SHOTCUTS_LINE_H_IMAGE ; + } + align: 0.0 0.0; + } + + } + + SHOTCUTS_MENU_H("0", 0, 0, SHORTCUTS_PANEL_HEIGHT, 180, "line_h.1.padding.left") + SHOTCUTS_MENU_H("4", 0, 180, SHORTCUTS_PANEL_HEIGHT, 360, "line_h.1.padding.left") + SHOTCUTS_MENU_H("8", 0, 360, SHORTCUTS_PANEL_HEIGHT, 540, "line_h.1.padding.left") + SHOTCUTS_MENU_H("12", 0, 540, SHORTCUTS_PANEL_HEIGHT, 720, "line_h.1.padding.left") + SHOTCUTS_MENU_H("16", 0, 720, SHORTCUTS_PANEL_HEIGHT, 900, "line_h.1.padding.left") + /*SHOTCUTS_MENU_H("20", 0, 900, 1280, 1080, "line_h.1.padding.left") + + SHOTCUTS_MENU_H("24", 0, 1080, 1280, 1160, "line_h.1.padding.left")*/ + + SHOTCUTS_MENU_H("1", 0, 0, SHORTCUTS_PANEL_HEIGHT, 180, "line_h.2.padding.left") + SHOTCUTS_MENU_H("5", 0, 180, SHORTCUTS_PANEL_HEIGHT, 360, "line_h.2.padding.left") + SHOTCUTS_MENU_H("9", 0, 360, SHORTCUTS_PANEL_HEIGHT, 540, "line_h.2.padding.left") + SHOTCUTS_MENU_H("13", 0, 540, SHORTCUTS_PANEL_HEIGHT, 720, "line_h.2.padding.left") + SHOTCUTS_MENU_H("17", 0, 720, SHORTCUTS_PANEL_HEIGHT, 900, "line_h.2.padding.left") + /*SHOTCUTS_MENU_H("21", 0, 900, 1280, 1080, "line_h.2.padding.left") + + SHOTCUTS_MENU_H("25", 0, 1080, 1280, 1160, "line_h.2.padding.left")*/ + + SHOTCUTS_MENU_H("2", 0, 0, SHORTCUTS_PANEL_HEIGHT, 180, "line_h.3.padding.left") + SHOTCUTS_MENU_H("6", 0, 180, SHORTCUTS_PANEL_HEIGHT, 360, "line_h.3.padding.left") + SHOTCUTS_MENU_H("10", 0, 360, SHORTCUTS_PANEL_HEIGHT, 540, "line_h.3.padding.left") + SHOTCUTS_MENU_H("14", 0, 540, SHORTCUTS_PANEL_HEIGHT, 720, "line_h.3.padding.left") + SHOTCUTS_MENU_H("18", 0, 720, SHORTCUTS_PANEL_HEIGHT, 900, "line_h.3.padding.left") + /*SHOTCUTS_MENU_H("22", 0, 900, 1280, 1080, "line_h.3.padding.left") + + SHOTCUTS_MENU_H("26", 0, 1080, 1280, 1160, "line_h.3.padding.left")*/ + + SHOTCUTS_MENU_H("3", 0, 0, SHORTCUTS_PANEL_HEIGHT, 180, "line_h.4.padding.left") + SHOTCUTS_MENU_H("7", 0, 180, SHORTCUTS_PANEL_HEIGHT, 360, "line_h.4.padding.left") + SHOTCUTS_MENU_H("11", 0, 360, SHORTCUTS_PANEL_HEIGHT, 540, "line_h.4.padding.left") + SHOTCUTS_MENU_H("15", 0, 540, SHORTCUTS_PANEL_HEIGHT, 720, "line_h.4.padding.left") + SHOTCUTS_MENU_H("19", 0, 720, SHORTCUTS_PANEL_HEIGHT, 900, "line_h.4.padding.left") + /*SHOTCUTS_MENU_H("23", 0, 900, 1280, 1080, "line_h.4.padding.left") + + SHOTCUTS_MENU_H("27", 0, 1080, 1280, 1160, "line_h.4.padding.left")*/ + } + } + +}//END connection +//end file diff --git a/edc/cam_funcs.edc b/edc/cam_funcs.edc new file mode 100644 index 0000000..dde8e67 --- /dev/null +++ b/edc/cam_funcs.edc @@ -0,0 +1,163 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "../include/edc_string.h" + +// background +#define BACKGROUND_IMAGE(part_name, x, y, w, h, img) \ + part { \ + name: part_name; \ + type: IMAGE; \ + description { \ + state: "default" 0.0;\ + rel1 { relative: (x)/MAIN_W (y)/MAIN_H; } \ + rel2 { relative: (x+w)/MAIN_W (y+h)/MAIN_H; } \ + image { normal: img; } \ + } \ + } +#define BACKGROUND_IMAGE_WITH_ALPHA(part_name, x, y, w, h, img, alpha) \ + part { \ + name: part_name; \ + type: IMAGE; \ + description { \ + state: "default" 0.0;\ + rel1 { relative: (x)/MAIN_W (y)/MAIN_H; } \ + rel2 { relative: (x+w)/MAIN_W (y+h)/MAIN_H; } \ + image { normal: img; }\ + color: 255 255 255 alpha; \ + } \ + } + +#define VER_BACKGROUND_IMAGE(part_name, x, y, w, h, img) \ + part { \ + name: part_name; \ + type: IMAGE; \ + description { \ + state: "default" 0.0;\ + rel1 { relative: (x)/VER_MAIN_W (y)/VER_MAIN_H; } \ + rel2 { relative: (x+w)/VER_MAIN_W (y+h)/VER_MAIN_H; } \ + image { normal: img; } \ + } \ + } + +#define GENERAL_BUTTON(part_name, x, y, w, h, img_dim, img, img_p, img_s) \ + part { \ + name: part_name; \ + type: IMAGE; \ + mouse_events: 1;\ + description { \ + state: "default" 0.0;\ + rel1 { relative: (x)/MAIN_W (y)/MAIN_H; } \ + rel2 { relative: (x+w)/MAIN_W (y+h)/MAIN_H; } \ + image { normal: img; } \ + } \ + description { \ + state: "press" 0.0; \ + inherit: "default" 0.0; \ + image { normal: img_p; }\ + } \ + description { \ + state: "selected" 0.0; \ + inherit: "default" 0.0; \ + image { normal: img_s; }\ + } \ + description { \ + state: "dim" 0.0; \ + inherit: "default" 0.0; \ + image { normal: img_dim;} \ + } \ + description { \ + state: "invisible" 0.0; \ + inherit: "default" 0.0; \ + visible: 0; \ + } \ + } + +#define VER_GENERAL_BUTTON(part_name, x, y, w, h, img_dim, img, img_p, img_s) \ + part { \ + name: part_name; \ + type: IMAGE; \ + mouse_events: 1;\ + description { \ + state: "default" 0.0;\ + rel1 { relative: (x)/VER_MAIN_W (y)/VER_MAIN_H; } \ + rel2 { relative: (x+w)/VER_MAIN_W (y+h)/VER_MAIN_H; } \ + image { normal: img; } \ + } \ + description { \ + state: "press" 0.0; \ + inherit: "default" 0.0; \ + image { normal: img_p; }\ + } \ + description { \ + state: "selected" 0.0; \ + inherit: "default" 0.0; \ + image { normal: img_s; }\ + } \ + description { \ + state: "dim" 0.0; \ + inherit: "default" 0.0; \ + image { normal: img_dim;} \ + } \ + description { \ + state: "invisible" 0.0; \ + inherit: "default" 0.0; \ + visible: 0; \ + } \ + } + +#define GENERAL_BUTTON_PROGRAMS(part_name, signal_name, source_name) \ + program { \ + name: "lbutton_down_"part_name; \ + signal: "mouse,down,1"; \ + source: part_name; \ + script {\ + new st[31];\ + new Float:vl;\ + get_state(PART:part_name, st, 30, vl);\ + if (strcmp(st, "dim") != 0) \ + { \ + set_state(PART:part_name, "press", 0.0);\ + emit( HAPTIC_SIG, HAPTIC_SIG_SRC );\ + } \ + }\ + } \ + program { \ + name: "lbutton_send_event_"part_name; \ + signal: "mouse,clicked,1"; \ + source: part_name; \ + script {\ + new st[31];\ + new Float:vl;\ + get_state(PART:part_name, st, 30, vl);\ + if (strcmp(st, "dim") != 0) \ + emit( signal_name, source_name );\ + }\ + } \ + program { \ + name: "lbutton_up_"part_name; \ + signal: "mouse,up,1"; \ + source: part_name; \ + script {\ + new st[31];\ + new Float:vl;\ + get_state(PART:part_name, st, 30, vl);\ + if (strcmp(st, "dim") != 0) \ + set_state(PART:part_name, "default", 0.0);\ + }\ + } + diff --git a/edc/cam_guideline_edje.edc b/edc/cam_guideline_edje.edc new file mode 100644 index 0000000..fcb6cbc --- /dev/null +++ b/edc/cam_guideline_edje.edc @@ -0,0 +1,383 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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; + 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; + 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.1; } + rel2 { relative: (VER_GUIDE_LINE_W1 + GUIDE_LINE_GAP)/VER_MAIN_W 0.9; } + 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; + } + + } + /*outline*/ + part { + name: "guide_line1_outline1_2"; + type: IMAGE; + mouse_events: 0; + 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; + 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; + 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.1; } + rel2 { relative: (VER_GUIDE_LINE_W1 + GUIDE_LINE_GAP + VER_GUIDE_LINE_W2 + GUIDE_LINE_GAP)/VER_MAIN_W 0.9; } + 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; + } + + } + /*outline*/ + part { + name: "guide_line2_outline2_2"; + type: IMAGE; + mouse_events: 0; + 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; + 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; + description { + state: "default" 0.0; + rel1 { relative: 0.1 GUIDE_LINE_H1/MAIN_H; } + rel2 { relative: 0.9 (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: "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; + 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; + 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; + description { + state: "default" 0.0; + rel1 { relative: 0.1 (GUIDE_LINE_H1 + GUIDE_LINE_GAP + GUIDE_LINE_H2)/MAIN_H; } + rel2 { relative: 0.9 (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: "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; + 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); + + } + } + + /*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_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_indicator_layout.edc b/edc/cam_indicator_layout.edc new file mode 100755 index 0000000..7261d8c --- /dev/null +++ b/edc/cam_indicator_layout.edc @@ -0,0 +1,115 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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" + +//indicator +#define INDI_BATTERY_X 1044 +#define INDICATOR_Y 12 +#define INDICATOR_W 48 +#define INDICATOR_H 48 + +//portrait +#define INDI_PORTRAIT_BATTERY_X 660 +#define INDICATOR_PORTRAIT_Y 172 + +// portrait & recording +#define INDI_PORTRAIT_REC_Y 28 + + +#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_BATTERY, INDI_BATTERY_X, INDICATOR_Y) + INDICATOR(INDI_REC_BATTERY, INDI_BATTERY_X, INDICATOR_Y) + } + } + + group { name: "indicator_landscape_inverse"; + min: MAIN_W MAIN_H; + parts{ + INDICATOR(INDICATOR_BATTERY, INDI_BATTERY_X, INDICATOR_Y) + INDICATOR(INDI_REC_BATTERY, INDI_BATTERY_X, INDICATOR_Y) + } + } + + group { name: "indicator_portrait"; + min: MAIN_H MAIN_W; + parts{ + INDICATOR_PORTRAIT(INDICATOR_BATTERY, INDI_PORTRAIT_BATTERY_X, INDICATOR_PORTRAIT_Y) + INDICATOR_PORTRAIT(INDI_REC_BATTERY, INDI_PORTRAIT_BATTERY_X, INDI_PORTRAIT_REC_Y) + } + } + + group { name: "indicator_portrait_inverse"; + min: MAIN_H MAIN_W; + parts{ + INDICATOR_PORTRAIT(INDICATOR_BATTERY, INDI_PORTRAIT_BATTERY_X, INDICATOR_PORTRAIT_Y) + INDICATOR_PORTRAIT(INDI_REC_BATTERY, INDI_PORTRAIT_BATTERY_X, INDI_PORTRAIT_REC_Y) + } + } + +}//end collections +//end file diff --git a/edc/cam_main_layout.edc b/edc/cam_main_layout.edc new file mode 100644 index 0000000..678c880 --- /dev/null +++ b/edc/cam_main_layout.edc @@ -0,0 +1,208 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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"; + min: MAIN_W MAIN_H; + parts { + + part { name: "main_bg"; + 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; + } + } + } + } + +#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; + 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; + } + } + } + } + } + + group { + name: "black_screen"; + min: MAIN_W MAIN_H; + + parts { + part { name: "black_screen_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 255; + } + } + } + } + + 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" "*"; + } + } + } + + /*#include "cam_recording_edje.edc"*/ +} + + diff --git a/edc/cam_recording_edje.edc b/edc/cam_recording_edje.edc new file mode 100644 index 0000000..52ac7fe --- /dev/null +++ b/edc/cam_recording_edje.edc @@ -0,0 +1,275 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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: RECORDING_STOP_BUTTON; + type: IMAGE; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (RECBTN_X)/(MAIN_W) (RECBTN_Y)/(MAIN_H); offset: 0 0; } + rel2 { relative: (RECBTN_X+RECBTN_W)/(MAIN_W) (RECBTN_Y+RECBTN_H)/(MAIN_H); offset: -1 -1; } + image { normal: SHUTTER_REC_NORMAL_IMAGE; } + } + description { + state: "rec" 0.0; + inherit: "default" 0.0; + image { normal: SHUTTER_REC_NORMAL_IMAGE; } + } + description { + state: "rec1" 0.0; + inherit: "default" 0.0; + image { normal: RECORDING_PRESS_IMAGE_ANI ; } + } + description { + state: "press" 0.0; + inherit: "default" 0.0; + image { normal: SHUTTER_REC_PRESS_IMAGE ; } + } + } + + 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: "recording_stop_button,clicked"; + signal: "mouse,clicked,1"; + source: "recording_stop_button"; + script { + emit( REC_STOP_SIG, REC_SIG_SRC ); + } + } + +#ifdef NEW_RECORDING_LAYOUT + + 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); + //set_state(PART:REC_REC, "invisible", 0.0); + //set_state(PART:REC_STOP, "default", 0.0); + //set_state(PART:REC_PAUSE, "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); + //set_state(PART:REC_REC, "invisible", 0.0); + //set_state(PART:REC_STOP, "default", 0.0); + //set_state(PART:REC_PAUSE, "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); + //set_state(PART:REC_REC, "default", 0.0); + //set_state(PART:REC_STOP, "invisible", 0.0); + //set_state(PART:REC_PAUSE, "dim", 0.0); + } + } + +#else + + program { name: "set_rec_state"; + source: "program"; + signal: "state,rec"; + script { + set_state(PART:RECORDING_IMAGE, "rec", 0.0); + set_state(PART:RECORDING_STOP_BUTTON, "rec",0.0); + set_state(PART:RECORDING_TEXT, "default", 0.0); + //set_state(PART:REC_PAUSE, "default", 0.0); + //set_state(PART:REC_REC, "invisible", 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_STOP_BUTTON, "rec1",0.0); + set_state(PART:RECORDING_TEXT, "default", 0.0); + //set_state(PART:REC_PAUSE, "default", 0.0); + //set_state(PART:REC_REC, "invisible", 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); + //set_state(PART:REC_PAUSE, "invisible", 0.0); + //set_state(PART:REC_REC, "default", 0.0); + } + } + program{ name : "set_press"; + signal : "mouse,down,1"; + source: RECORDING_STOP_BUTTON; + action: STATE_SET "press" 0.0; + target: RECORDING_STOP_BUTTON; + } +#endif + + 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 100644 index 0000000..ecb6567 --- /dev/null +++ b/edc/cam_recording_edje_inc.edc @@ -0,0 +1,53 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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; + image: SHUTTER_REC_NORMAL_IMAGE COMP; + image: SHUTTER_REC_PRESS_IMAGE COMP; + image: RECORDING_PRESS_IMAGE_ANI COMP; +} + + +#define RECORDING_IMAGE_X 894 +#define RECORDING_IMAGE_Y 12 +#define RECORDING_IMAGE_W 48 +#define RECORDING_IMAGE_H 48 +#define RECORDING_TEXT_X 784 +#define RECORDING_TEXT_Y 12 +#define RECORDING_LEFT_TEXT_X 128 +#define RECORDING_LEFT_TEXT_Y 10 + + + +#undef PROGRESS_BAR_X +#undef PROGRESS_BAR_Y +#undef PROGRESS_BAR_W +#undef PROGRESS_BAR_H +#define PROGRESS_BAR_X 320 +#define PROGRESS_BAR_Y 657 +#define PROGRESS_BAR_W 639 +#define PROGRESS_BAR_H 20 + + #define RECBTN_X 1152 + #define RECBTN_Y 239 + #define RECBTN_W 128 + #define RECBTN_H 240 + +//endfiles \ No newline at end of file diff --git a/edc/cam_recording_edje_inverse.edc b/edc/cam_recording_edje_inverse.edc new file mode 100644 index 0000000..1930a02 --- /dev/null +++ b/edc/cam_recording_edje_inverse.edc @@ -0,0 +1,278 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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: RECORDING_STOP_BUTTON; + type: IMAGE; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (1 - (RECBTN_X+RECBTN_W)/(MAIN_W)) (1 - (RECBTN_Y+RECBTN_H)/(MAIN_H)); offset: 0 0; } + rel2 { relative: (1 - (RECBTN_X)/(MAIN_W)) (1 - (RECBTN_Y)/(MAIN_H)); offset: -1 -1; } + image { normal: SHUTTER_REC_NORMAL_IMAGE; } + } + description { + state: "rec" 0.0; + inherit: "default" 0.0; + image { normal: SHUTTER_REC_NORMAL_IMAGE; } + } + description { + state: "rec1" 0.0; + inherit: "default" 0.0; + image { normal: RECORDING_PRESS_IMAGE_ANI ; } + } + description { + state: "press" 0.0; + inherit: "default" 0.0; + image { normal: SHUTTER_REC_PRESS_IMAGE ; } + } + } + + 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: "recording_stop_button,clicked"; + signal: "mouse,clicked,1"; + source: "recording_stop_button"; + script { + emit( REC_STOP_SIG, REC_SIG_SRC ); + } + } + +#ifdef NEW_RECORDING_LAYOUT + + 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); + //set_state(PART:REC_REC, "invisible", 0.0); + //set_state(PART:REC_STOP, "default", 0.0); + //set_state(PART:REC_PAUSE, "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); + //set_state(PART:REC_REC, "invisible", 0.0); + //set_state(PART:REC_STOP, "default", 0.0); + //set_state(PART:REC_PAUSE, "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); + //set_state(PART:REC_REC, "default", 0.0); + //set_state(PART:REC_STOP, "invisible", 0.0); + //set_state(PART:REC_PAUSE, "dim", 0.0); + } + } + +#else + + program { name: "set_rec_state"; + source: "program"; + signal: "state,rec"; + script { + set_state(PART:RECORDING_IMAGE, "rec", 0.0); + set_state(PART:RECORDING_STOP_BUTTON, "rec",0.0); + set_state(PART:RECORDING_TEXT, "default", 0.0); + //set_state(PART:REC_PAUSE, "default", 0.0); + //set_state(PART:REC_REC, "invisible", 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_STOP_BUTTON, "rec1",0.0); + set_state(PART:RECORDING_TEXT, "default", 0.0); + //set_state(PART:REC_PAUSE, "default", 0.0); + //set_state(PART:REC_REC, "invisible", 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); + //set_state(PART:REC_PAUSE, "invisible", 0.0); + //set_state(PART:REC_REC, "default", 0.0); + } + } + program{ name : "set_press"; + signal : "mouse,down,1"; + source: RECORDING_STOP_BUTTON; + action: STATE_SET "press" 0.0; + target: RECORDING_STOP_BUTTON; + } +#endif + + 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 100644 index 0000000..63e567d --- /dev/null +++ b/edc/cam_recording_edje_inverse_inc.edc @@ -0,0 +1,53 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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; + image: SHUTTER_REC_NORMAL_IMAGE COMP; + image: SHUTTER_REC_PRESS_IMAGE COMP; + image: RECORDING_PRESS_IMAGE_ANI COMP; +} + + +#define RECORDING_IMAGE_X 894 +#define RECORDING_IMAGE_Y 12 +#define RECORDING_IMAGE_W 48 +#define RECORDING_IMAGE_H 48 +#define RECORDING_TEXT_X 784 +#define RECORDING_TEXT_Y 12 +#define RECORDING_LEFT_TEXT_X 128 +#define RECORDING_LEFT_TEXT_Y 10 + + + +#undef PROGRESS_BAR_X +#undef PROGRESS_BAR_Y +#undef PROGRESS_BAR_W +#undef PROGRESS_BAR_H +#define PROGRESS_BAR_X 320 +#define PROGRESS_BAR_Y 657 +#define PROGRESS_BAR_W 639 +#define PROGRESS_BAR_H 20 + + #define RECBTN_X 1152 + #define RECBTN_Y 239 + #define RECBTN_W 128 + #define RECBTN_H 240 + +//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 100644 index 0000000..d29cb0b --- /dev/null +++ b/edc/cam_recording_edje_vertical.edc @@ -0,0 +1,276 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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: RECORDING_STOP_BUTTON; + type: IMAGE; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (RECBTN_X)/(VER_MAIN_W) (RECBTN_Y)/(VER_MAIN_H); offset: 0 0; } + rel2 { relative: (RECBTN_X+RECBTN_W)/(VER_MAIN_W) (RECBTN_Y+RECBTN_H)/(VER_MAIN_H); offset: -1 -1; } + image { normal: SHUTTER_REC_NORMAL_VERTICAL_IMAGE; } + } + description { + state: "rec" 0.0; + inherit: "default" 0.0; + image { normal: SHUTTER_REC_NORMAL_VERTICAL_IMAGE; } + } + description { + state: "rec1" 0.0; + inherit: "default" 0.0; + image { normal: RECORDING_PRESS_IMAGE_ANI_VER ; } + } + description { + state: "press" 0.0; + inherit: "default" 0.0; + image { normal: SHUTTER_REC_PRESS_VERTICAL_IMAGE ; } + } + } + + 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: "recording_stop_button,clicked"; + signal: "mouse,clicked,1"; + source: "recording_stop_button"; + script { + emit( REC_STOP_SIG, REC_SIG_SRC ); + } + } + +#ifdef NEW_RECORDING_LAYOUT + + 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); + //set_state(PART:REC_REC, "invisible", 0.0); + //set_state(PART:REC_STOP, "default", 0.0); + //set_state(PART:REC_PAUSE, "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); + //set_state(PART:REC_REC, "invisible", 0.0); + //set_state(PART:REC_STOP, "default", 0.0); + //set_state(PART:REC_PAUSE, "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); + //set_state(PART:REC_REC, "default", 0.0); + //set_state(PART:REC_STOP, "invisible", 0.0); + //set_state(PART:REC_PAUSE, "dim", 0.0); + } + } + +#else + + program { name: "set_rec_state"; + source: "program"; + signal: "state,rec"; + script { + set_state(PART:RECORDING_IMAGE, "rec", 0.0); + set_state(PART:RECORDING_STOP_BUTTON, "rec",0.0); + set_state(PART:RECORDING_TEXT, "default", 0.0); + //set_state(PART:REC_PAUSE, "default", 0.0); + //set_state(PART:REC_REC, "invisible", 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_STOP_BUTTON, "rec1",0.0); + set_state(PART:RECORDING_TEXT, "default", 0.0); + //set_state(PART:REC_PAUSE, "default", 0.0); + //set_state(PART:REC_REC, "invisible", 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); + //set_state(PART:REC_PAUSE, "invisible", 0.0); + //set_state(PART:REC_REC, "default", 0.0); + } + } + program{ name : "set_press"; + signal : "mouse,down,1"; + source: RECORDING_STOP_BUTTON; + action: STATE_SET "press" 0.0; + target: RECORDING_STOP_BUTTON; + } +#endif + + 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 100644 index 0000000..ddb3fb7 --- /dev/null +++ b/edc/cam_recording_edje_vertical_inc.edc @@ -0,0 +1,44 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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; + image: SHUTTER_REC_NORMAL_VERTICAL_IMAGE COMP; + image: SHUTTER_REC_PRESS_VERTICAL_IMAGE COMP; + image: RECORDING_PRESS_IMAGE_ANI_VER COMP; +} + +#define PROGRESS_BAR_X 128 +#define PROGRESS_BAR_Y 1000 +#define PROGRESS_BAR_W 464 +#define PROGRESS_BAR_H 20 +#define RECBTN_X 239 +#define RECBTN_Y 1152 +#define RECBTN_W 240 +#define RECBTN_H 128 +#define RECORDING_IMAGE_X 510 +#define RECORDING_IMAGE_Y 28 +#define RECORDING_IMAGE_W 48 +#define RECORDING_IMAGE_H 48 +#define RECORDING_TEXT_X 400 +#define RECORDING_TEXT_Y 28 +#define RECORDING_LEFT_TEXT_X 10 +#define RECORDING_LEFT_TEXT_Y 28 + +//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 100644 index 0000000..6d13cbb --- /dev/null +++ b/edc/cam_recording_edje_vertical_inverse.edc @@ -0,0 +1,276 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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: RECORDING_STOP_BUTTON; + type: IMAGE; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (1 - (RECBTN_X+RECBTN_W)/(VER_MAIN_W)) (1 - (RECBTN_Y+RECBTN_H)/(VER_MAIN_H)); offset: 0 0; } + rel2 { relative: (1 - (RECBTN_X)/(VER_MAIN_W)) (1 - (RECBTN_Y)/(VER_MAIN_H)); offset: -1 -1; } + image { normal: SHUTTER_REC_NORMAL_VERTICAL_IMAGE; } + } + description { + state: "rec" 0.0; + inherit: "default" 0.0; + image { normal: SHUTTER_REC_NORMAL_VERTICAL_IMAGE; } + } + description { + state: "rec1" 0.0; + inherit: "default" 0.0; + image { normal: RECORDING_PRESS_IMAGE_ANI_VER ; } + } + description { + state: "press" 0.0; + inherit: "default" 0.0; + image { normal: SHUTTER_REC_PRESS_VERTICAL_IMAGE ; } + } + } + + 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: "recording_stop_button,clicked"; + signal: "mouse,clicked,1"; + source: "recording_stop_button"; + script { + emit( REC_STOP_SIG, REC_SIG_SRC ); + } + } + +#ifdef NEW_RECORDING_LAYOUT + + 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); + //set_state(PART:REC_REC, "invisible", 0.0); + //set_state(PART:REC_STOP, "default", 0.0); + //set_state(PART:REC_PAUSE, "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); + //set_state(PART:REC_REC, "invisible", 0.0); + //set_state(PART:REC_STOP, "default", 0.0); + //set_state(PART:REC_PAUSE, "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); + //set_state(PART:REC_REC, "default", 0.0); + //set_state(PART:REC_STOP, "invisible", 0.0); + //set_state(PART:REC_PAUSE, "dim", 0.0); + } + } + +#else + + program { name: "set_rec_state"; + source: "program"; + signal: "state,rec"; + script { + set_state(PART:RECORDING_IMAGE, "rec", 0.0); + set_state(PART:RECORDING_STOP_BUTTON, "rec",0.0); + set_state(PART:RECORDING_TEXT, "default", 0.0); + //set_state(PART:REC_PAUSE, "default", 0.0); + //set_state(PART:REC_REC, "invisible", 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_STOP_BUTTON, "rec1",0.0); + set_state(PART:RECORDING_TEXT, "default", 0.0); + //set_state(PART:REC_PAUSE, "default", 0.0); + //set_state(PART:REC_REC, "invisible", 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); + //set_state(PART:REC_PAUSE, "invisible", 0.0); + //set_state(PART:REC_REC, "default", 0.0); + } + } + program{ name : "set_press"; + signal : "mouse,down,1"; + source: RECORDING_STOP_BUTTON; + action: STATE_SET "press" 0.0; + target: RECORDING_STOP_BUTTON; + } +#endif + + 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 100644 index 0000000..dfab252 --- /dev/null +++ b/edc/cam_recording_edje_vertical_inverse_inc.edc @@ -0,0 +1,45 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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; + image: SHUTTER_REC_NORMAL_VERTICAL_IMAGE COMP; + image: SHUTTER_REC_PRESS_VERTICAL_IMAGE COMP; + image: RECORDING_PRESS_IMAGE_ANI_VER COMP; +} + + +#define PROGRESS_BAR_X 128 +#define PROGRESS_BAR_Y 1000 +#define PROGRESS_BAR_W 464 +#define PROGRESS_BAR_H 20 +#define RECBTN_X 239 +#define RECBTN_Y 1152 +#define RECBTN_W 240 +#define RECBTN_H 128 +#define RECORDING_IMAGE_X 510 +#define RECORDING_IMAGE_Y 172 +#define RECORDING_IMAGE_W 48 +#define RECORDING_IMAGE_H 48 +#define RECORDING_TEXT_X 400 +#define RECORDING_TEXT_Y 172 +#define RECORDING_LEFT_TEXT_X 10 +#define RECORDING_LEFT_TEXT_Y 28 + +//endfiles \ No newline at end of file diff --git a/edc/cam_setting_popup_layout.edc b/edc/cam_setting_popup_layout.edc new file mode 100644 index 0000000..84ed771 --- /dev/null +++ b/edc/cam_setting_popup_layout.edc @@ -0,0 +1,50 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 100644 index 0000000..0452dea --- /dev/null +++ b/edc/cam_setting_popup_layout_inc.edc @@ -0,0 +1,291 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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_CAMERA_ARROW_SIZE 41 +#define CTXPOPUP_FRAME_CORNER_SIZE 4 4 +#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 100644 index 0000000..9d5a1e8 --- /dev/null +++ b/edc/cam_toolbar_layout.edc @@ -0,0 +1,663 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 { + + 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"; + mouse_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;} + } + } + + part { name: "setting_popup"; + type: SWALLOW; + 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;} + } + } + + part { name: "shortcuts_popup"; + type: SWALLOW; + description{ + state:"default" 0.0; + rel1{ relative: (TOOLBAR_W+20)/MAIN_W) 0.0;} + rel2{ relative: ((TOOLBAR_W+740+20)/MAIN_W) (MAIN_H - 138)/MAIN_H;} + } + description{ + state:"wide" 0.0; + rel1{ relative: (TOOLBAR_W+20)/MAIN_W) 0.0;} + rel2{ relative: ((TOOLBAR_W+740+20)/MAIN_W) 1.0;} + } + } + + part { name: "shortcuts_popup_description"; + type: SWALLOW; + description{ + state:"default" 0.0; + min:0 138; + fixed:0 1; + align: 0 0; + rel1{ relative: 0.0 1.0;to: "shortcuts_popup";} + rel2{ relative: 1.0 1.0;to: "shortcuts_popup";} + } + description{ + state:"wide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + 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_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_ICON("toolbar_0_icon", TOOLBAR_0_X, TOOLBAR_0_Y, TOOLBAR_ITEM_W, TOOLBAR_ITEM_H) + + + part { name: "shutter_button"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: SHUTTER_X/MAIN_W SHUTTER_Y/MAIN_H; offset: 0 0; } + rel2 { relative: (SHUTTER_X+SHUTTER_W)/MAIN_W (SHUTTER_Y+SHUTTER_H)/MAIN_H; offset: -1 -1; } + } + } + part { name: "mode_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (MAIN_W - TOOLBAR_W)/MAIN_W 0.0; offset: 0 0; } + rel2 { relative: 1.0 TOOLBAR_RIGHT_ITEM_H/MAIN_H; offset: -1 -1; } + } + } + part { name: "quickview_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: QUICKVIEW_X/MAIN_W QUICKVIEW_Y/MAIN_H; offset: 0 0; } + rel2 { relative: (QUICKVIEW_X+QUICKVIEW_W)/MAIN_W (QUICKVIEW_Y+QUICKVIEW_H)/MAIN_H; offset: -1 -1; } + } + } + part { name: "backbutton_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: BACKBTN_X/MAIN_W BACKBTN_Y/MAIN_H; offset: 0 0; } + rel2 { relative: (BACKBTN_X+BACKBTN_W)/MAIN_W (BACKBTN_Y+BACKBTN_H)/MAIN_H; offset: -1 -1; } + } + } + part { name: "capture_button_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: CAPTUREBTN_X/MAIN_W CAPTUREBTN_Y/MAIN_H; offset: 0 0; } + rel2 { relative: (MAIN_W-10)/MAIN_W (CAPTUREBTN_Y+108)/MAIN_H; offset: -1 -1; } + } + } + + }/*end parts*/ + + programs { + program { + name: "shortcuts,normal"; + source: "prog"; + signal: "shortcuts,normal"; + script: { + set_state(PART:"shortcuts_popup", "default", 0.0); + set_state(PART:"shortcuts_popup_description", "default", 0.0); + } + } + program { + name: "shortcuts,wide"; + source: "prog"; + signal: "shortcuts,wide"; + script: { + set_state(PART:"shortcuts_popup", "wide", 0.0); + set_state(PART:"shortcuts_popup_description", "wide", 0.0); + } + } + program { + name: "toolbar_bg,show"; + source: "program"; + signal: "toolbar_bg,show"; + action: STATE_SET "default" 0.0; + target: "left_bg"; + } + + program { + name: "toolbar_bg,hide"; + source: "program"; + signal: "toolbar_bg,hide"; + action: STATE_SET "hide" 0.0; + target: "left_bg"; + } + + 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: "toolbar_mode_item"; + min: TOOLBAR_MODE_ITEM_W TOOLBAR_MODE_ITEM_H; + + images { + image: MODE_BG_IMAGE COMP; + image: MODE_BUTTON_IMAGE COMP; + } + + parts { + part { name: "rect"; + 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: "bg"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + relative: TOOLBAR_MODE_ITEM_BG_X/TOOLBAR_MODE_ITEM_W + TOOLBAR_MODE_ITEM_BG_Y/TOOLBAR_MODE_ITEM_H; + offset: 0 0; + } + rel2 { + relative: (TOOLBAR_MODE_ITEM_BG_X+TOOLBAR_MODE_ITEM_BG_W)/TOOLBAR_MODE_ITEM_W + (TOOLBAR_MODE_ITEM_BG_Y+TOOLBAR_MODE_ITEM_BG_H)/TOOLBAR_MODE_ITEM_H; + offset: -1 -1; + } + image{ normal: MODE_BG_IMAGE; } + } + description { + state: "invisible" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + + + part { name: "button"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: -1 -1; } + visible: 0; + } + description { + state: "camera" 0.0; + rel1 { relative: CAMERA_BUTTON_X/TOOLBAR_MODE_ITEM_W CAMERA_BUTTON_Y/TOOLBAR_MODE_ITEM_H; offset: 0 0;} + rel2 { relative: (CAMERA_BUTTON_X+CAMERA_BUTTON_W)/TOOLBAR_MODE_ITEM_W (CAMERA_BUTTON_Y+CAMERA_BUTTON_H)/TOOLBAR_MODE_ITEM_H; offset: -1 -1;} + image{ normal: MODE_BUTTON_IMAGE; } + visible: 1; + } + description { + state: "camcorder" 0.0; + rel1 { relative: CAMCORDER_BUTTON_X/TOOLBAR_MODE_ITEM_W CAMCORDER_BUTTON_Y/TOOLBAR_MODE_ITEM_H; offset: 0 0;} + rel2 { relative: (CAMCORDER_BUTTON_X+CAMCORDER_BUTTON_W)/TOOLBAR_MODE_ITEM_W (CAMCORDER_BUTTON_Y+CAMCORDER_BUTTON_H)/TOOLBAR_MODE_ITEM_H; offset: -1 -1;} + image{ normal: MODE_BUTTON_IMAGE; } + visible: 1; + } + } + + + + part { name: "camera_icon"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + rel1 { relative: CAMERA_ICON_X/TOOLBAR_MODE_ITEM_W CAMERA_ICON_Y/TOOLBAR_MODE_ITEM_H; offset: 0 0; } + rel2 { relative: (CAMERA_ICON_X+CAMERA_ICON_W)/TOOLBAR_MODE_ITEM_W (CAMERA_ICON_Y+CAMERA_ICON_H)/TOOLBAR_MODE_ITEM_H; offset: -1 -1;} + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + + + part { name: "camcorder_icon"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + rel1 { relative: CAMCORDER_ICON_X/TOOLBAR_MODE_ITEM_W CAMCORDER_ICON_Y/TOOLBAR_MODE_ITEM_H; offset: 0 0;} + rel2 { relative: (CAMCORDER_ICON_X+CAMCORDER_ICON_W)/TOOLBAR_MODE_ITEM_W (CAMCORDER_ICON_Y+CAMCORDER_ICON_H)/TOOLBAR_MODE_ITEM_H; offset: -1 -1;} + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + }/*end parts*/ + + programs{ + program { + name:"prog_set_camera"; + source: "prog"; + signal: "SET_MODE_CAMERA"; + script: { + set_state(PART:"bg", "default", 0.0); + set_state(PART:"button", "camera", 0.0); + set_state(PART:"camera_icon", "normal", 0.0); + set_state(PART:"camcorder_icon", "normal", 0.0); + } + } + program { + name: "prog_set_camcorder"; + source: "prog"; + signal: "SET_MODE_CAMCORDER"; + script: { + set_state(PART:"bg", "default", 0.0); + set_state(PART:"button", "camcorder", 0.0); + set_state(PART:"camera_icon", "normal", 0.0); + set_state(PART:"camcorder_icon", "normal", 0.0); + } + } + program { + name: "prog_set_invisible"; + source: "prog"; + signal: "SET_INVISIBLE"; + script: { + set_state(PART:"bg", "invisible", 0.0); + set_state(PART:"button", "default", 0.0); + set_state(PART:"camera_icon", "dim", 0.0); + set_state(PART:"camcorder_icon", "dim", 0.0); + } + } + }/*end programs*/ + }/*end group:toolbar_mode_item*/ + + group { + name: "shutter_button"; + + images { + image: SHUTTER_NORMAL_IMAGE COMP; + image: SHUTTER_PRESS_IMAGE COMP; + image: CAMERA_SHUTTER_ICON_IMAGE COMP; + image: CAMCORDER_SHUTTER_ICON_IMAGE COMP; + } + + parts { + part { name: "capture_button"; + type: IMAGE; + 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; } + 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: 0; + } + } + + 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; + visible: 1; + } + + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "camcorder_icon"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + max: 106 106; + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + }/*end parts*/ + + programs { + TOOLBAR_RIGHT_ITEM_PROGRAM("capture_button", "press_shutter_sig", "release_shutter_sig", "move_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); } + } + program { + name: "camcorder_icon,normal"; + source: "prog"; + signal: "camcorder_icon,normal"; + script: { set_state(PART:"camcorder_icon", "normal", 0.0); } + } + program { + name: "camcorder_icon,invisible"; + source: "prog"; + signal: "camcorder_icon,invisible"; + script: { set_state(PART:"camcorder_icon", "dim", 0.0); } + } + }/*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; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: -1 -1; } + 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; + description { + state: "default" 0.0; + rel1 { relative: 1/9 1/9; offset: 0 0; to: "bg"; } + rel2 { relative: 8/9 8/9; offset: -1 -1; 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; + 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; + description{ + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + image { + normal : BACK_BUTTON_NORMAL_IMAGE; + } + } + description{ + state: "press" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + 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_capture_button_item"; + + images{ + image: SNAPSHOT_PRESS_IMAGE COMP; + image: SNAPSHOT_NORMAL_IMAGE COMP; + } + + parts{ + part{ + name: "capture_button"; + type: IMAGE; + 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;} + image { + normal : SNAPSHOT_NORMAL_IMAGE; + } + } + description{ + state: "press" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + 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 100644 index 0000000..e1f1bac --- /dev/null +++ b/edc/cam_toolbar_layout_inc.edc @@ -0,0 +1,389 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 593 + +#define TOOLBAR_1_X 38 +#define TOOLBAR_1_Y 455 + +#define TOOLBAR_2_X 38 +#define TOOLBAR_2_Y 317 + +#define TOOLBAR_3_X 38 +#define TOOLBAR_3_Y 179 + +#define TOOLBAR_4_X 38 +#define TOOLBAR_4_Y 41 + +#define SHUTTER_X 1160 +#define SHUTTER_Y 254 +#define SHUTTER_W 108 +#define SHUTTER_H 214 + +#define QUICKVIEW_X 1162 +#define QUICKVIEW_Y 604 +#define QUICKVIEW_W 108 +#define QUICKVIEW_H 108 + +#define BACKBTN_X 1173 +#define BACKBTN_Y 615 +#define BACKBTN_W 86 +#define BACKBTN_H 86 + +#define CAPTUREBTN_X 1162 +#define CAPTUREBTN_Y 68 + +/*NOTE:below is for toolbar mode item*/ +#define TOOLBAR_MODE_ITEM_BG_X 33 +#define TOOLBAR_MODE_ITEM_BG_Y 58 +#define TOOLBAR_MODE_ITEM_BG_W 71 +#define TOOLBAR_MODE_ITEM_BG_H 119 + +#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 +#define CAMCORDER_ICON_X 38 +#define CAMCORDER_ICON_Y 170 +#define CAMCORDER_ICON_W 56 +#define CAMCORDER_ICON_H 48 + +#define TOOLBAR_MODE_ITEM_W TOOLBAR_W +#define TOOLBAR_MODE_ITEM_H TOOLBAR_RIGHT_ITEM_H + +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; +} + +#define TOOLBAR_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; } \ + }\ + 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; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (x)/(bg_w) (y)/(bg_h); } \ + rel2 { relative: (x+TOOLBAR_ITEM_W)/(bg_w) (y+TOOLBAR_ITEM_H)/(bg_h);} \ + 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_ICON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h, img_normal, img_press) \ + part { name: icon_name; \ + type: IMAGE; \ + mouse_events: 1; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (x)/(bg_w) (y)/(bg_h);} \ + rel2 { relative: (x+w)/(bg_w) (y+h)/(bg_h);} \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_normal; } \ + } \ + description { \ + state: "press" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_press; } \ + } \ + 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; \ + description { \ + state: "default" 0.0; \ + aspect: 1.0 1.0; \ + align: 0.5 0.5; \ + rel1 { relative: (x)/(bg_w) (y)/(bg_h);} \ + rel2 { relative: (x+w)/(bg_w) (y+h)/(bg_h);} \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + } \ + description { \ + state: "dim" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + } \ + } + +#define TOOLBAR_ITEM_ICON_WITH_DIM(icon_name, x, y, w, h, bg_w, bg_h, img_normal, img_press, img_dim) \ + part { name: icon_name; \ + type: IMAGE; \ + mouse_events: 1; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (x)/(bg_w) (y)/(bg_h);} \ + rel2 { relative: (x+w)/(bg_w) (y+h)/(bg_h);} \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_normal; } \ + } \ + description { \ + state: "press" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_press; } \ + } \ + description { \ + state: "dim" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_dim; } \ + } \ + } + +#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; \ + script {\ + new st[31];\ + new Float:vl;\ + get_state(PART:icon_name, st, 30, vl);\ + if (strcmp(st, "dim") != 0) { \ + emit( press_signal, "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, "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, "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, move_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) { \ + set_state(PART:icon_name, "press", 0.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) { \ + set_state(PART:icon_name, "normal", 0.0);\ + } \ + }\ + }\ + program { \ + name: "mouse_move_"icon_name; \ + signal: "mouse,move"; \ + source: icon_name; \ + script {\ + new st[31];\ + new Float:vl;\ + get_state(PART:icon_name, st, 30, vl);\ + if (strcmp(st, "dim") != 0) \ + emit( move_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( release_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",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_ICON(name, x, y, w, h, img_normal, img_press) \ + TOOLBAR_ITEM_ICON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H, img_normal, img_press) + +#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) + +#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 100644 index 0000000..eb46df8 --- /dev/null +++ b/edc/cam_toolbar_layout_inverse.edc @@ -0,0 +1,662 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 { + 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"; + mouse_events: 0; + description{ + state:"default" 0.0; + rel1{ relative: (1 - (MAIN_W-TOOLBAR_W-20)/MAIN_W) 0.0;} + rel2{ relative: (1 - (TOOLBAR_W+20)/MAIN_W) 1.0;} + } + } + + part { name: "setting_popup"; + type: SWALLOW; + description{ + state:"default" 0.0; + rel1{ relative: (1 - (MAIN_W-TOOLBAR_W-20)/MAIN_W) 0.0;} + rel2{ relative: (1 - (TOOLBAR_W+20)/MAIN_W) 1.0;} + } + } + part { name: "shortcuts_popup"; + type: SWALLOW; + description{ + state:"default" 0.0; + rel1{ relative: (1 - (TOOLBAR_W+740+20)/MAIN_W) 0.0;} + rel2{ relative: (1 -(TOOLBAR_W+20)/MAIN_W) (MAIN_H-138)/MAIN_H;} + } + description{ + state:"wide" 0.0; + rel1{ relative: (1 - (TOOLBAR_W+740+20)/MAIN_W) 0.0;} + rel2{ relative: (1 -(TOOLBAR_W+20)/MAIN_W) 1.0;} + } + } + + part { name: "shortcuts_popup_description"; + type: SWALLOW; + description{ + state:"default" 0.0; + min:0 138; + fixed:0 1; + align: 0 0; + rel1{ relative: 0.0 1.0;to: "shortcuts_popup";} + rel2{ relative: 1.0 1.0;to: "shortcuts_popup";} + } + description{ + state:"wide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + 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) + + part { name: "shutter_button"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (1 - (SHUTTER_X+SHUTTER_W)/MAIN_W) (1 - (SHUTTER_Y+SHUTTER_H)/MAIN_H); offset: 0 0; } + rel2 { relative: (1 - SHUTTER_X/MAIN_W) (1 - SHUTTER_Y/MAIN_H); offset: -1 -1; } + } + } + part { name: "mode_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 (1 - TOOLBAR_RIGHT_ITEM_H/MAIN_H); offset: 0 0; } + rel2 { relative: (1 - (MAIN_W - TOOLBAR_W)/MAIN_W) 1; offset: -1 -1; } + } + } + part { name: "quickview_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (1 - (QUICKVIEW_X+QUICKVIEW_W)/MAIN_W) (1 - (QUICKVIEW_Y+QUICKVIEW_H)/MAIN_H); offset: 0 0; } + rel2 { relative: (1-QUICKVIEW_X/MAIN_W) (1 - QUICKVIEW_Y/MAIN_H); offset: -1 -1; } + } + } + part { name: "backbutton_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (1 - (BACKBTN_X+BACKBTN_W)/MAIN_W) (1 - (BACKBTN_Y+BACKBTN_H)/MAIN_H); offset: 0 0; } + rel2 { relative: (1 - BACKBTN_X/MAIN_W) (1 - BACKBTN_Y/MAIN_H); offset: -1 -1; } + } + } + part { name: "capture_button_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (1 - (MAIN_W-10)/MAIN_W) (1 - (CAPTUREBTN_Y+108)/MAIN_H); offset: 0 0; } + rel2 { relative: (1 - CAPTUREBTN_X/MAIN_W) (1 - CAPTUREBTN_Y/MAIN_H); offset: -1 -1; } + } + } + + }/*end parts*/ + + programs { + program { + name: "shortcuts,normal"; + source: "prog"; + signal: "shortcuts,normal"; + script: { + set_state(PART:"shortcuts_popup", "default", 0.0); + set_state(PART:"shortcuts_popup_description", "default", 0.0); + } + } + program { + name: "shortcuts,wide"; + source: "prog"; + signal: "shortcuts,wide"; + script: { + set_state(PART:"shortcuts_popup", "wide", 0.0); + set_state(PART:"shortcuts_popup_description", "wide", 0.0); + } + } + program { + name: "toolbar_bg,show"; + source: "program"; + signal: "toolbar_bg,show"; + action: STATE_SET "default" 0.0; + target: "left_bg"; + } + + program { + name: "toolbar_bg,hide"; + source: "program"; + signal: "toolbar_bg,hide"; + action: STATE_SET "hide" 0.0; + target: "left_bg"; + } + 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: "toolbar_mode_item"; + min: TOOLBAR_MODE_ITEM_W TOOLBAR_MODE_ITEM_H; + + images { + image: MODE_BG_IMAGE COMP; + image: MODE_BUTTON_IMAGE COMP; + } + + parts { + part { name: "rect"; + 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: "bg"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + relative: (1 - (TOOLBAR_MODE_ITEM_BG_X+TOOLBAR_MODE_ITEM_BG_W)/TOOLBAR_MODE_ITEM_W) + (1 - (TOOLBAR_MODE_ITEM_BG_Y+TOOLBAR_MODE_ITEM_BG_H)/TOOLBAR_MODE_ITEM_H); + offset: 0 0; + } + rel2 { + relative: (1 - TOOLBAR_MODE_ITEM_BG_X/TOOLBAR_MODE_ITEM_W) + (1 - TOOLBAR_MODE_ITEM_BG_Y/TOOLBAR_MODE_ITEM_H) + ; + offset: -1 -1; + } + image{ normal: MODE_BG_IMAGE; } + } + description { + state: "invisible" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + + + part { name: "button"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: -1 -1; } + visible: 0; + } + description { + state: "camera" 0.0; + rel1 { relative: (1 - (CAMERA_BUTTON_X+CAMERA_BUTTON_W)/TOOLBAR_MODE_ITEM_W) (1 - (CAMERA_BUTTON_Y+CAMERA_BUTTON_H)/TOOLBAR_MODE_ITEM_H); offset: 0 0;} + rel2 { relative: (1 - CAMERA_BUTTON_X/TOOLBAR_MODE_ITEM_W) (1 - CAMERA_BUTTON_Y/TOOLBAR_MODE_ITEM_H); offset: -1 -1;} + image{ normal: MODE_BUTTON_IMAGE; } + visible: 1; + } + description { + state: "camcorder" 0.0; + rel1 { relative: (1 - (CAMCORDER_BUTTON_X+CAMCORDER_BUTTON_W)/TOOLBAR_MODE_ITEM_W) (1 - (CAMCORDER_BUTTON_Y+CAMCORDER_BUTTON_H)/TOOLBAR_MODE_ITEM_H); offset: 0 0;} + rel2 { relative: (1 - CAMCORDER_BUTTON_X/TOOLBAR_MODE_ITEM_W) (1 - CAMCORDER_BUTTON_Y/TOOLBAR_MODE_ITEM_H); offset: -1 -1;} + image{ normal: MODE_BUTTON_IMAGE; } + visible: 1; + } + } + + + + part { name: "camera_icon"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + rel1 { relative: (1 - (CAMERA_ICON_X+CAMERA_ICON_W)/TOOLBAR_MODE_ITEM_W) (1 - (CAMERA_ICON_Y+CAMERA_ICON_H)/TOOLBAR_MODE_ITEM_H); offset: 0 0; } + rel2 { relative: (1 - CAMERA_ICON_X/TOOLBAR_MODE_ITEM_W) (1 - CAMERA_ICON_Y/TOOLBAR_MODE_ITEM_H); offset: -1 -1;} + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + + + part { name: "camcorder_icon"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + rel1 { relative: (1 - (CAMCORDER_ICON_X+CAMCORDER_ICON_W)/TOOLBAR_MODE_ITEM_W) (1 - (CAMCORDER_ICON_Y+CAMCORDER_ICON_H)/TOOLBAR_MODE_ITEM_H); offset: 0 0;} + rel2 { relative: (1 - CAMCORDER_ICON_X/TOOLBAR_MODE_ITEM_W) (1 - CAMCORDER_ICON_Y/TOOLBAR_MODE_ITEM_H); offset: -1 -1;} + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + }/*end parts*/ + + programs{ + program { + name:"prog_set_camera"; + source: "prog"; + signal: "SET_MODE_CAMERA"; + script: { + set_state(PART:"bg", "default", 0.0); + set_state(PART:"button", "camera", 0.0); + set_state(PART:"camera_icon", "normal", 0.0); + set_state(PART:"camcorder_icon", "normal", 0.0); + } + } + program { + name: "prog_set_camcorder"; + source: "prog"; + signal: "SET_MODE_CAMCORDER"; + script: { + set_state(PART:"bg", "default", 0.0); + set_state(PART:"button", "camcorder", 0.0); + set_state(PART:"camera_icon", "normal", 0.0); + set_state(PART:"camcorder_icon", "normal", 0.0); + } + } + program { + name: "prog_set_invisible"; + source: "prog"; + signal: "SET_INVISIBLE"; + script: { + set_state(PART:"bg", "invisible", 0.0); + set_state(PART:"button", "default", 0.0); + set_state(PART:"camera_icon", "dim", 0.0); + set_state(PART:"camcorder_icon", "dim", 0.0); + } + } + }/*end programs*/ + }/*end group:toolbar_mode_item*/ + + group { + name: "shutter_button"; + + images { + image: SHUTTER_NORMAL_IMAGE COMP; + image: SHUTTER_PRESS_IMAGE COMP; + image: CAMERA_SHUTTER_ICON_IMAGE COMP; + image: CAMCORDER_SHUTTER_ICON_IMAGE COMP; + } + + parts { + + part { name: "capture_button"; + type: IMAGE; + 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; } + 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: 0; + } + } + + + 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; + visible: 1; + } + + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "camcorder_icon"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + max: 106 106; + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + }/*end parts*/ + + programs { + TOOLBAR_RIGHT_ITEM_PROGRAM("capture_button", "press_shutter_sig", "release_shutter_sig", "move_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); } + } + program { + name: "camcorder_icon,normal"; + source: "prog"; + signal: "camcorder_icon,normal"; + script: { set_state(PART:"camcorder_icon", "normal", 0.0); } + } + program { + name: "camcorder_icon,invisible"; + source: "prog"; + signal: "camcorder_icon,invisible"; + script: { set_state(PART:"camcorder_icon", "dim", 0.0); } + } + }/*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; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: -1 -1; } + 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; + description { + state: "default" 0.0; + rel1 { relative: 1/9 1/9; offset: 0 0; to: "bg"; } + rel2 { relative: 8/9 8/9; offset: -1 -1; 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; + 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; + description{ + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + image { + normal : BACK_BUTTON_NORMAL_IMAGE; + } + } + description{ + state: "press" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + 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_capture_button_item"; + + images{ + image: SNAPSHOT_PRESS_IMAGE COMP; + image: SNAPSHOT_NORMAL_IMAGE COMP; + } + + parts{ + part{ + name: "capture_button"; + type: IMAGE; + 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;} + image { + normal : SNAPSHOT_NORMAL_IMAGE; + } + } + description{ + state: "press" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + 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 100644 index 0000000..75670d0 --- /dev/null +++ b/edc/cam_toolbar_layout_inverse_inc.edc @@ -0,0 +1,392 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 593 + +#define TOOLBAR_1_X 38 +#define TOOLBAR_1_Y 455 + +#define TOOLBAR_2_X 38 +#define TOOLBAR_2_Y 317 + +#define TOOLBAR_3_X 38 +#define TOOLBAR_3_Y 179 + +#define TOOLBAR_4_X 38 +#define TOOLBAR_4_Y 41 + + +#define SHUTTER_X 1160 +#define SHUTTER_Y 254 +#define SHUTTER_W 108 +#define SHUTTER_H 214 + +#define QUICKVIEW_X 1162 +#define QUICKVIEW_Y 604 +#define QUICKVIEW_W 108 +#define QUICKVIEW_H 108 + +#define BACKBTN_X 1173 +#define BACKBTN_Y 615 +#define BACKBTN_W 86 +#define BACKBTN_H 86 + +#define CAPTUREBTN_X 1162 +#define CAPTUREBTN_Y 68 + +/*NOTE:below is for toolbar mode item*/ +#define TOOLBAR_MODE_ITEM_BG_X 33 +#define TOOLBAR_MODE_ITEM_BG_Y 58 +#define TOOLBAR_MODE_ITEM_BG_W 71 +#define TOOLBAR_MODE_ITEM_BG_H 119 + +#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 +#define CAMCORDER_ICON_X 38 +#define CAMCORDER_ICON_Y 170 +#define CAMCORDER_ICON_W 56 +#define CAMCORDER_ICON_H 48 + +#define TOOLBAR_MODE_ITEM_W TOOLBAR_W +#define TOOLBAR_MODE_ITEM_H TOOLBAR_RIGHT_ITEM_H + +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; +} + +#define TOOLBAR_BACKGROUND_IMAGE(part_name, x, y, w, h, img) \ + part { \ + name: part_name; \ + type: IMAGE; \ + 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; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (1 - (x+TOOLBAR_ITEM_W)/(bg_w)) (1 - (y+TOOLBAR_ITEM_H)/(bg_h));} \ + rel2 { relative: (1 - (x)/(bg_w)) (1 - (y)/(bg_h));} \ + 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_ICON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h, img_normal, img_press) \ + part { name: icon_name; \ + type: IMAGE; \ + mouse_events: 1; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (1 - (x)/(bg_w)) (1 - (y+h)/(bg_h));} \ + rel2 { relative: (1 - (x+w)/(bg_w)) (1 - (y)/(bg_h));} \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_normal; } \ + } \ + description { \ + state: "press" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_press; } \ + } \ + 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; \ + description { \ + state: "default" 0.0; \ + aspect: 1.0 1.0; \ + align: 0.5 0.5; \ + rel1 { relative: (1 - (x+w)/(bg_w)) (1 - (y+h)/(bg_h)); } \ + rel2 { relative: (1 - (x)/(bg_w)) (1 - (y)/(bg_h)); } \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + } \ + description { \ + state: "dim" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + } \ + } + +#define TOOLBAR_ITEM_ICON_WITH_DIM(icon_name, x, y, w, h, bg_w, bg_h, img_normal, img_press, img_dim) \ + part { name: icon_name; \ + type: IMAGE; \ + mouse_events: 1; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (1 - (x+w)/(bg_w)) (1 - (y+h)/(bg_h));} \ + rel2 { relative: (1 - (x)/(bg_w)) (1 - (y)/(bg_h));} \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_normal; } \ + } \ + description { \ + state: "press" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_press; } \ + } \ + description { \ + state: "dim" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_dim; } \ + } \ + } + +#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; \ + script {\ + new st[31];\ + new Float:vl;\ + get_state(PART:icon_name, st, 30, vl);\ + if (strcmp(st, "dim") != 0) { \ + emit( press_signal, "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, "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, "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, move_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) { \ + set_state(PART:icon_name, "press", 0.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) { \ + set_state(PART:icon_name, "normal", 0.0);\ + } \ + }\ + }\ + program { \ + name: "mouse_move_"icon_name; \ + signal: "mouse,move"; \ + source: icon_name; \ + script {\ + new st[31];\ + new Float:vl;\ + get_state(PART:icon_name, st, 30, vl);\ + if (strcmp(st, "dim") != 0) \ + emit( move_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( release_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",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_ICON(name, x, y, w, h, img_normal, img_press) \ + TOOLBAR_ITEM_ICON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H, img_normal, img_press) + +#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) + +#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 100644 index 0000000..686a925 --- /dev/null +++ b/edc/cam_toolbar_layout_vertical.edc @@ -0,0 +1,663 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 { + 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"; + mouse_events: 0; + description{ + state:"default" 0.0; + rel1{ relative: 0.0 (TOOLBAR_W+20)/MAIN_W;} + rel2{ relative: 1.0 (MAIN_W-TOOLBAR_W-20)/MAIN_W;} + } + } + + part { name: "setting_popup"; + type: SWALLOW; + description{ + state:"default" 0.0; + rel1{ relative: 0.0 ((TOOLBAR_W+20)/MAIN_W);} + rel2{ relative: 1.0 ((MAIN_W-TOOLBAR_W-20)/MAIN_W);} + } + } + + part { name: "shortcuts_popup"; + type: SWALLOW; + description{ + state:"default" 0.0; + rel1{ relative: 0.0 (TOOLBAR_W+20)/MAIN_W);} + rel2{ relative: 1.0 ((TOOLBAR_W+740+20 - 138)/MAIN_W);} + } + description{ + state:"wide" 0.0; + rel1{ relative: 0.0 (TOOLBAR_W+20)/MAIN_W);} + rel2{ relative: 1.0 ((TOOLBAR_W+740+20)/MAIN_W);} + } + } + + part { name: "shortcuts_popup_description"; + type: SWALLOW; + description{ + state:"default" 0.0; + min:0 138; + fixed:0 1; + align: 0 0; + rel1{ relative: 0.0 1.0;to: "shortcuts_popup";} + rel2{ relative: 1.0 1.0;to: "shortcuts_popup";} + } + description{ + state:"wide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + 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) + + part { name: "shutter_button"; + type: SWALLOW; + mouse_events: 1; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: (1 - (SHUTTER_Y+SHUTTER_H)/MAIN_H) SHUTTER_X/MAIN_W; offset: 0 0; } + rel2 { relative: (1 - SHUTTER_Y/MAIN_H) (SHUTTER_X+SHUTTER_W)/MAIN_W; offset: -1 -1; } + } + } + part { name: "mode_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (1 - TOOLBAR_RIGHT_ITEM_H/MAIN_H) (MAIN_W - TOOLBAR_W)/MAIN_W; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: -1 -1; } + } + } + part { name: "quickview_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - (QUICKVIEW_Y+QUICKVIEW_H)/MAIN_H) QUICKVIEW_X/MAIN_W; offset: 0 0; } + rel2 { relative: (1.0 - QUICKVIEW_Y/MAIN_H) (QUICKVIEW_X+QUICKVIEW_W)/MAIN_W; offset: -1 -1; } + } + } + part { name: "backbutton_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - (BACKBTN_Y+BACKBTN_H)/MAIN_H) BACKBTN_X/MAIN_W; offset: 0 0; } + rel2 { relative: (1.0 - BACKBTN_Y/MAIN_H) (BACKBTN_X+BACKBTN_W)/MAIN_W; offset: -1 -1; } + } + } + part { name: "capture_button_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - (CAPTUREBTN_Y+108)/MAIN_H) CAPTUREBTN_X/MAIN_W; offset: 0 0; } + rel2 { relative: (1.0 - CAPTUREBTN_Y/MAIN_H) (MAIN_W-10)/MAIN_W; offset: -1 -1; } + } + } + + }/*end parts*/ + + programs { + program { + name: "shortcuts,normal"; + source: "prog"; + signal: "shortcuts,normal"; + script: { + set_state(PART:"shortcuts_popup", "default", 0.0); + set_state(PART:"shortcuts_popup_description", "default", 0.0); + } + } + program { + name: "shortcuts,wide"; + source: "prog"; + signal: "shortcuts,wide"; + script: { + set_state(PART:"shortcuts_popup", "wide", 0.0); + set_state(PART:"shortcuts_popup_description", "wide", 0.0); + } + } + program { + name: "toolbar_bg,show"; + source: "program"; + signal: "toolbar_bg,show"; + action: STATE_SET "default" 0.0; + target: "left_bg"; + } + + program { + name: "toolbar_bg,hide"; + source: "program"; + signal: "toolbar_bg,hide"; + action: STATE_SET "hide" 0.0; + target: "left_bg"; + } + 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: "toolbar_mode_item"; + min: TOOLBAR_MODE_ITEM_W TOOLBAR_MODE_ITEM_H; + + images { + image: MODE_BG_VER_IMAGE COMP; + image: MODE_BUTTON_VER_IMAGE COMP; + } + + parts { + part { name: "rect"; + 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: "bg"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + relative: (1 - (TOOLBAR_MODE_ITEM_BG_Y+TOOLBAR_MODE_ITEM_BG_H)/TOOLBAR_MODE_ITEM_H) + TOOLBAR_MODE_ITEM_BG_X/TOOLBAR_MODE_ITEM_W + ; + offset: 0 0; + } + rel2 { + relative: (1 - TOOLBAR_MODE_ITEM_BG_Y/TOOLBAR_MODE_ITEM_H) + (TOOLBAR_MODE_ITEM_BG_X+TOOLBAR_MODE_ITEM_BG_W)/TOOLBAR_MODE_ITEM_W + ; + offset: -1 -1; + } + image{ normal: MODE_BG_VER_IMAGE; } + } + description { + state: "invisible" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + + + part { name: "button"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: -1 -1; } + visible: 0; + } + description { + state: "camera" 0.0; + rel1 { relative: (1 - (CAMERA_BUTTON_Y+CAMERA_BUTTON_H)/TOOLBAR_MODE_ITEM_H) CAMERA_BUTTON_X/TOOLBAR_MODE_ITEM_W ; offset: 0 0;} + rel2 { relative: (1 - CAMERA_BUTTON_Y/TOOLBAR_MODE_ITEM_H) (CAMERA_BUTTON_X+CAMERA_BUTTON_W)/TOOLBAR_MODE_ITEM_W; offset: -1 -1;} + image{ normal: MODE_BUTTON_VER_IMAGE; } + visible: 1; + } + description { + state: "camcorder" 0.0; + rel1 { relative: (1- (CAMCORDER_BUTTON_Y+CAMCORDER_BUTTON_H)/TOOLBAR_MODE_ITEM_H) CAMCORDER_BUTTON_X/TOOLBAR_MODE_ITEM_W ; offset: 0 0;} + rel2 { relative: (1 - CAMCORDER_BUTTON_Y/TOOLBAR_MODE_ITEM_H) (CAMCORDER_BUTTON_X+CAMCORDER_BUTTON_W)/TOOLBAR_MODE_ITEM_W; offset: -1 -1;} + image{ normal: MODE_BUTTON_VER_IMAGE; } + visible: 1; + } + } + + + + part { name: "camera_icon"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + rel1 { relative: (1 - (CAMERA_ICON_Y+CAMERA_ICON_H)/TOOLBAR_MODE_ITEM_H) CAMERA_ICON_X/TOOLBAR_MODE_ITEM_W; offset: 0 0; } + rel2 { relative: (1 - CAMERA_ICON_Y/TOOLBAR_MODE_ITEM_H) (CAMERA_ICON_X+CAMERA_ICON_W)/TOOLBAR_MODE_ITEM_W; offset: -1 -1;} + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + + + part { name: "camcorder_icon"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + rel1 { relative: (1 - (CAMCORDER_ICON_Y+CAMCORDER_ICON_H)/TOOLBAR_MODE_ITEM_H) CAMCORDER_ICON_X/TOOLBAR_MODE_ITEM_W; offset: 0 0;} + rel2 { relative: (1 - CAMCORDER_ICON_Y/TOOLBAR_MODE_ITEM_H) (CAMCORDER_ICON_X+CAMCORDER_ICON_W)/TOOLBAR_MODE_ITEM_W; offset: -1 -1;} + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + }/*end parts*/ + + programs{ + program { + name:"prog_set_camera"; + source: "prog"; + signal: "SET_MODE_CAMERA"; + script: { + set_state(PART:"bg", "default", 0.0); + set_state(PART:"button", "camera", 0.0); + set_state(PART:"camera_icon", "normal", 0.0); + set_state(PART:"camcorder_icon", "normal", 0.0); + } + } + program { + name: "prog_set_camcorder"; + source: "prog"; + signal: "SET_MODE_CAMCORDER"; + script: { + set_state(PART:"bg", "default", 0.0); + set_state(PART:"button", "camcorder", 0.0); + set_state(PART:"camera_icon", "normal", 0.0); + set_state(PART:"camcorder_icon", "normal", 0.0); + } + } + program { + name: "prog_set_invisible"; + source: "prog"; + signal: "SET_INVISIBLE"; + script: { + set_state(PART:"bg", "invisible", 0.0); + set_state(PART:"button", "default", 0.0); + set_state(PART:"camera_icon", "dim", 0.0); + set_state(PART:"camcorder_icon", "dim", 0.0); + } + } + }/*end programs*/ + }/*end group:toolbar_mode_item*/ + + group { + name: "shutter_button"; + + images { + image: SHUTTER_NORMAL_VER_IMAGE COMP; + image: SHUTTER_PRESS_VER_IMAGE COMP; + image: CAMERA_SHUTTER_ICON_IMAGE COMP; + image: CAMCORDER_SHUTTER_ICON_IMAGE COMP; + } + + parts { + part { name: "capture_button"; + type: IMAGE; + 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; } + 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: 0; + } + } + + 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; + visible: 1; + } + + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "camcorder_icon"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + max: 106 106; + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + }/*end parts*/ + + programs { + TOOLBAR_RIGHT_ITEM_PROGRAM("capture_button", "press_shutter_sig", "release_shutter_sig", "move_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); } + } + program { + name: "camcorder_icon,normal"; + source: "prog"; + signal: "camcorder_icon,normal"; + script: { set_state(PART:"camcorder_icon", "normal", 0.0); } + } + program { + name: "camcorder_icon,invisible"; + source: "prog"; + signal: "camcorder_icon,invisible"; + script: { set_state(PART:"camcorder_icon", "dim", 0.0); } + } + }/*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; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: -1 -1; } + 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; + description { + state: "default" 0.0; + rel1 { relative: 1/9 1/9; offset: 0 0; to: "bg"; } + rel2 { relative: 8/9 8/9; offset: -1 -1; 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; + 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; + description{ + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + image { + normal : BACK_BUTTON_NORMAL_IMAGE; + } + } + description{ + state: "press" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + 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_capture_button_item"; + + images{ + image: SNAPSHOT_PRESS_IMAGE COMP; + image: SNAPSHOT_NORMAL_IMAGE COMP; + } + + parts{ + part{ + name: "capture_button"; + type: IMAGE; + 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;} + image { + normal : SNAPSHOT_NORMAL_IMAGE; + } + } + description{ + state: "press" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + 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 100644 index 0000000..1d3b8b1 --- /dev/null +++ b/edc/cam_toolbar_layout_vertical_inc.edc @@ -0,0 +1,391 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 593 + +#define TOOLBAR_1_X 38 +#define TOOLBAR_1_Y 455 + +#define TOOLBAR_2_X 38 +#define TOOLBAR_2_Y 317 + +#define TOOLBAR_3_X 38 +#define TOOLBAR_3_Y 179 + +#define TOOLBAR_4_X 38 +#define TOOLBAR_4_Y 41 + + +#define SHUTTER_X 1160 +#define SHUTTER_Y 254 +#define SHUTTER_W 108 +#define SHUTTER_H 214 + +#define QUICKVIEW_X 1162 +#define QUICKVIEW_Y 604 +#define QUICKVIEW_W 108 +#define QUICKVIEW_H 108 + +#define BACKBTN_X 1173 +#define BACKBTN_Y 615 +#define BACKBTN_W 86 +#define BACKBTN_H 86 + +#define CAPTUREBTN_X 1162 +#define CAPTUREBTN_Y 68 + +/*NOTE:below is for toolbar mode item*/ +#define TOOLBAR_MODE_ITEM_BG_X 33 +#define TOOLBAR_MODE_ITEM_BG_Y 58 +#define TOOLBAR_MODE_ITEM_BG_W 71 +#define TOOLBAR_MODE_ITEM_BG_H 119 + +#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 +#define CAMCORDER_ICON_X 38 +#define CAMCORDER_ICON_Y 170 +#define CAMCORDER_ICON_W 56 +#define CAMCORDER_ICON_H 48 + +#define TOOLBAR_MODE_ITEM_W TOOLBAR_W +#define TOOLBAR_MODE_ITEM_H TOOLBAR_RIGHT_ITEM_H + +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; +} + +#define TOOLBAR_BACKGROUND_IMAGE(part_name, x, y, w, h, img) \ + part { \ + name: part_name; \ + type: IMAGE; \ + 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; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (1 - (y+TOOLBAR_ITEM_H)/(bg_h)) (x)/(bg_w);} \ + rel2 { relative: (1 - (y)/(bg_h)) (x+TOOLBAR_ITEM_W)/(bg_w);} \ + 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_ICON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h, img_normal, img_press) \ + part { name: icon_name; \ + type: IMAGE; \ + mouse_events: 1; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (1 - (y+h)/(bg_h)) (x)/(bg_w);} \ + rel2 { relative: (1 - (y)/(bg_h)) (x+w)/(bg_w);} \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_normal; } \ + } \ + description { \ + state: "press" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_press; } \ + } \ + 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; \ + description { \ + state: "default" 0.0; \ + aspect: 1.0 1.0; \ + align: 0.5 0.5; \ + rel1 { relative: (1 - (y+h)/(bg_h)) (x)/(bg_w);} \ + rel2 { relative: (1 - (y)/(bg_h)) (x+w)/(bg_w);} \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + } \ + description { \ + state: "dim" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + } \ + } + +#define TOOLBAR_ITEM_ICON_WITH_DIM(icon_name, x, y, w, h, bg_w, bg_h, img_normal, img_press, img_dim) \ + part { name: icon_name; \ + type: IMAGE; \ + mouse_events: 1; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (1 - (y+h)/(bg_h)) (x)/(bg_w);} \ + rel2 { relative: (1 - (y)/(bg_h)) (x+w)/(bg_w);} \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_normal; } \ + } \ + description { \ + state: "press" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_press; } \ + } \ + description { \ + state: "dim" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_dim; } \ + } \ + } + +#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; \ + script {\ + new st[31];\ + new Float:vl;\ + get_state(PART:icon_name, st, 30, vl);\ + if (strcmp(st, "dim") != 0) { \ + emit( press_signal, "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, "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, "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, move_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) { \ + set_state(PART:icon_name, "press", 0.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) { \ + set_state(PART:icon_name, "normal", 0.0);\ + } \ + }\ + }\ + program { \ + name: "mouse_move_"icon_name; \ + signal: "mouse,move"; \ + source: icon_name; \ + script {\ + new st[31];\ + new Float:vl;\ + get_state(PART:icon_name, st, 30, vl);\ + if (strcmp(st, "dim") != 0) \ + emit( move_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( release_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",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_ICON(name, x, y, w, h, img_normal, img_press) \ + TOOLBAR_ITEM_ICON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H, img_normal, img_press) + +#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) + +#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 100644 index 0000000..f060744 --- /dev/null +++ b/edc/cam_toolbar_layout_vertical_inverse.edc @@ -0,0 +1,658 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 { + 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"; + mouse_events: 0; + description{ + state:"default" 0.0; + rel1{ relative: 0.0 (1 - (MAIN_W-TOOLBAR_W-20)/MAIN_W) ;} + rel2{ relative: 1.0 (1 - ((TOOLBAR_W+20)/MAIN_W));} + } + } + + part { name: "setting_popup"; + type: SWALLOW; + description{ + state:"default" 0.0; + rel1{ relative: 0.0 (1 - (MAIN_W-TOOLBAR_W-20)/MAIN_W) ;} + rel2{ relative: 1.0 (1 - ((TOOLBAR_W+20)/MAIN_W));} + } + } + part { name: "shortcuts_popup"; + type: SWALLOW; + description{ + state:"default" 0.0; + rel1{ relative: 0.0 (1 - (TOOLBAR_W+740+20)/MAIN_W);} + rel2{ relative: 1.0 (1 - (TOOLBAR_W + 20 + 138)/MAIN_W));} + } + description{ + state:"wide" 0.0; + rel1{ relative: 0.0 (1 - (TOOLBAR_W+740+20)/MAIN_W);} + rel2{ relative: 1.0 (1 - (TOOLBAR_W+20)/MAIN_W));} + } + } + part { name: "shortcuts_popup_description"; + type: SWALLOW; + description{ + state:"default" 0.0; + min:0 138; + fixed:0 1; + align: 0 0; + rel1{ relative: 0.0 1.0;to: "shortcuts_popup";} + rel2{ relative: 1.0 1.0;to: "shortcuts_popup";} + } + description{ + state:"wide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + 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) + + part { name: "shutter_button"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: SHUTTER_Y/MAIN_H (1 - (SHUTTER_X+SHUTTER_W)/MAIN_W); offset: 0 0; } + rel2 { relative: (SHUTTER_Y+SHUTTER_H)/MAIN_H (1 - SHUTTER_X/MAIN_W); offset: -1 -1; } + } + } + part { name: "mode_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: TOOLBAR_RIGHT_ITEM_H/MAIN_H (1 - (MAIN_W - TOOLBAR_W)/MAIN_W); offset: -1 -1; } + } + } + part { name: "quickview_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: QUICKVIEW_Y/MAIN_H (1 - (QUICKVIEW_X+QUICKVIEW_W)/MAIN_W); offset: 0 0; } + rel2 { relative: (QUICKVIEW_Y+QUICKVIEW_H)/MAIN_H (1 - QUICKVIEW_X/MAIN_W); offset: -1 -1; } + } + } + part { name: "backbutton_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: BACKBTN_Y/MAIN_H (1 - (BACKBTN_X+BACKBTN_W)/MAIN_W); offset: 0 0; } + rel2 { relative: (BACKBTN_Y+BACKBTN_H)/MAIN_H (1 - BACKBTN_X/MAIN_W); offset: -1 -1; } + } + } + part { name: "capture_button_item"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + rel1 { relative: CAPTUREBTN_Y/MAIN_H (1 - (MAIN_W-10)/MAIN_W); offset: 0 0; } + rel2 { relative: (CAPTUREBTN_Y+108)/MAIN_H (1 - CAPTUREBTN_X/MAIN_W); offset: -1 -1; } + } + } + + }/*end parts*/ + + programs { + program { + name: "shortcuts,normal"; + source: "prog"; + signal: "shortcuts,normal"; + script: { + set_state(PART:"shortcuts_popup", "default", 0.0); + set_state(PART:"shortcuts_popup_description", "default", 0.0); + } + } + program { + name: "shortcuts,wide"; + source: "prog"; + signal: "shortcuts,wide"; + script: { + set_state(PART:"shortcuts_popup", "wide", 0.0); + set_state(PART:"shortcuts_popup_description", "wide", 0.0); + } + } + program { + name: "toolbar_bg,show"; + source: "program"; + signal: "toolbar_bg,show"; + action: STATE_SET "default" 0.0; + target: "left_bg"; + } + + program { + name: "toolbar_bg,hide"; + source: "program"; + signal: "toolbar_bg,hide"; + action: STATE_SET "hide" 0.0; + target: "left_bg"; + } + 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: "toolbar_mode_item"; + min: TOOLBAR_MODE_ITEM_W TOOLBAR_MODE_ITEM_H; + + images { + image: MODE_BG_VER_IMAGE COMP; + image: MODE_BUTTON_VER_IMAGE COMP; + } + + parts { + part { name: "rect"; + 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: "bg"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + relative: TOOLBAR_MODE_ITEM_BG_Y/TOOLBAR_MODE_ITEM_H + (1 - (TOOLBAR_MODE_ITEM_BG_X+TOOLBAR_MODE_ITEM_BG_W)/TOOLBAR_MODE_ITEM_W); + offset: 0 0; + } + rel2 { + relative: (TOOLBAR_MODE_ITEM_BG_Y+TOOLBAR_MODE_ITEM_BG_H)/TOOLBAR_MODE_ITEM_H + (1 - TOOLBAR_MODE_ITEM_BG_X/TOOLBAR_MODE_ITEM_W); + offset: -1 -1; + } + image{ normal: MODE_BG_VER_IMAGE; } + } + description { + state: "invisible" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + + + part { name: "button"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: -1 -1; } + visible: 0; + } + description { + state: "camera" 0.0; + rel1 { relative: CAMERA_BUTTON_Y/TOOLBAR_MODE_ITEM_H (1 - (CAMERA_BUTTON_X+CAMERA_BUTTON_W)/TOOLBAR_MODE_ITEM_W); offset: 0 0;} + rel2 { relative: (CAMERA_BUTTON_Y+CAMERA_BUTTON_H)/TOOLBAR_MODE_ITEM_H (1 - CAMERA_BUTTON_X/TOOLBAR_MODE_ITEM_W); offset: -1 -1;} + image{ normal: MODE_BUTTON_VER_IMAGE; } + visible: 1; + } + description { + state: "camcorder" 0.0; + rel1 { relative: CAMCORDER_BUTTON_Y/TOOLBAR_MODE_ITEM_H (1 - CAMCORDER_BUTTON_X+CAMCORDER_BUTTON_W)/TOOLBAR_MODE_ITEM_W); offset: 0 0;} + rel2 { relative: (CAMCORDER_BUTTON_Y+CAMCORDER_BUTTON_H)/TOOLBAR_MODE_ITEM_H (1 - CAMCORDER_BUTTON_X/TOOLBAR_MODE_ITEM_W); offset: -1 -1;} + image{ normal: MODE_BUTTON_VER_IMAGE; } + visible: 1; + } + } + + + + part { name: "camera_icon"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + rel1 { relative: CAMERA_ICON_Y/TOOLBAR_MODE_ITEM_H (1 - (CAMERA_ICON_X+CAMERA_ICON_W)/TOOLBAR_MODE_ITEM_W); offset: 0 0; } + rel2 { relative: (CAMERA_ICON_Y+CAMERA_ICON_H)/TOOLBAR_MODE_ITEM_H (1 - CAMERA_ICON_X/TOOLBAR_MODE_ITEM_W); offset: -1 -1;} + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + + + part { name: "camcorder_icon"; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + rel1 { relative: CAMCORDER_ICON_Y/TOOLBAR_MODE_ITEM_H (1 - (CAMCORDER_ICON_X+CAMCORDER_ICON_W)/TOOLBAR_MODE_ITEM_W); offset: 0 0; } + rel2 { relative: (CAMCORDER_ICON_Y+CAMCORDER_ICON_H)/TOOLBAR_MODE_ITEM_H (1 - CAMCORDER_ICON_X/TOOLBAR_MODE_ITEM_W); offset: -1 -1;} + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + }/*end parts*/ + + programs{ + program { + name:"prog_set_camera"; + source: "prog"; + signal: "SET_MODE_CAMERA"; + script: { + set_state(PART:"bg", "default", 0.0); + set_state(PART:"button", "camera", 0.0); + set_state(PART:"camera_icon", "normal", 0.0); + set_state(PART:"camcorder_icon", "normal", 0.0); + } + } + program { + name: "prog_set_camcorder"; + source: "prog"; + signal: "SET_MODE_CAMCORDER"; + script: { + set_state(PART:"bg", "default", 0.0); + set_state(PART:"button", "camcorder", 0.0); + set_state(PART:"camera_icon", "normal", 0.0); + set_state(PART:"camcorder_icon", "normal", 0.0); + } + } + program { + name: "prog_set_invisible"; + source: "prog"; + signal: "SET_INVISIBLE"; + script: { + set_state(PART:"bg", "invisible", 0.0); + set_state(PART:"button", "default", 0.0); + set_state(PART:"camera_icon", "dim", 0.0); + set_state(PART:"camcorder_icon", "dim", 0.0); + } + } + }/*end programs*/ + }/*end group:toolbar_mode_item*/ + + group { + name: "shutter_button"; + + images { + image: SHUTTER_NORMAL_VER_IMAGE COMP; + image: SHUTTER_PRESS_VER_IMAGE COMP; + image: CAMERA_SHUTTER_ICON_IMAGE COMP; + image: CAMCORDER_SHUTTER_ICON_IMAGE COMP; + } + + parts { + part { name: "capture_button"; + type: IMAGE; + 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; } + 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: 0; + } + } + + 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; + visible: 1; + } + + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "camcorder_icon"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + align: 0.5 0.5; + max: 106 106; + visible: 1; + } + description { + state: "normal" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "dim" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + }/*end parts*/ + + programs { + TOOLBAR_RIGHT_ITEM_PROGRAM("capture_button", "press_shutter_sig", "release_shutter_sig", "move_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); } + } + program { + name: "camcorder_icon,normal"; + source: "prog"; + signal: "camcorder_icon,normal"; + script: { set_state(PART:"camcorder_icon", "normal", 0.0); } + } + program { + name: "camcorder_icon,invisible"; + source: "prog"; + signal: "camcorder_icon,invisible"; + script: { set_state(PART:"camcorder_icon", "dim", 0.0); } + } + }/*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; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0; } + rel2 { relative: 1.0 1.0; offset: -1 -1; } + 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; + description { + state: "default" 0.0; + rel1 { relative: 1/9 1/9; offset: 0 0; to: "bg"; } + rel2 { relative: 8/9 8/9; offset: -1 -1; 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; + 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; + description{ + state: "default" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + image { + normal : BACK_BUTTON_NORMAL_IMAGE; + } + } + description{ + state: "press" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + 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_capture_button_item"; + + images{ + image: SNAPSHOT_PRESS_IMAGE COMP; + image: SNAPSHOT_NORMAL_IMAGE COMP; + } + + parts{ + part{ + name: "capture_button"; + type: IMAGE; + 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;} + image { + normal : SNAPSHOT_NORMAL_IMAGE; + } + } + description{ + state: "press" 0.0; + rel1 { relative: 0.0 0.0; offset: 0 0;} + rel2 { relative: 1.0 1.0; offset: -1 -1;} + 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 100644 index 0000000..2fe63a1 --- /dev/null +++ b/edc/cam_toolbar_layout_vertical_inverse_inc.edc @@ -0,0 +1,396 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 593 + +#define TOOLBAR_1_X 38 +#define TOOLBAR_1_Y 455 + +#define TOOLBAR_2_X 38 +#define TOOLBAR_2_Y 317 + +#define TOOLBAR_3_X 38 +#define TOOLBAR_3_Y 179 + +#define TOOLBAR_4_X 38 +#define TOOLBAR_4_Y 41 + + +#define SHUTTER_X 1160 +#define SHUTTER_Y 254 +#define SHUTTER_W 108 +#define SHUTTER_H 214 + +#define QUICKVIEW_X 1162 +#define QUICKVIEW_Y 604 +#define QUICKVIEW_W 108 +#define QUICKVIEW_H 108 + +#define THUMBNAIL_H 108 +#define THUMBNAIK_W 108 + +#define BACKBTN_X 1173 +#define BACKBTN_Y 615 +#define BACKBTN_W 86 +#define BACKBTN_H 86 + +#define CAPTUREBTN_X 1162 +#define CAPTUREBTN_Y 68 + +/*NOTE:below is for toolbar mode item*/ +#define TOOLBAR_MODE_ITEM_BG_X 33 +#define TOOLBAR_MODE_ITEM_BG_Y 58 +#define TOOLBAR_MODE_ITEM_BG_W 71 +#define TOOLBAR_MODE_ITEM_BG_H 119 + +#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 +#define CAMCORDER_ICON_X 38 +#define CAMCORDER_ICON_Y 170 +#define CAMCORDER_ICON_W 56 +#define CAMCORDER_ICON_H 48 + +#define TOOLBAR_MODE_ITEM_W TOOLBAR_W +#define TOOLBAR_MODE_ITEM_H TOOLBAR_RIGHT_ITEM_H + +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; +} + +#define TOOLBAR_BACKGROUND_IMAGE(part_name, x, y, w, h, img) \ + part { \ + name: part_name; \ + type: IMAGE; \ + 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; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (y)/(bg_h) (1 - (x+TOOLBAR_ITEM_W)/(bg_w));} \ + rel2 { relative: (y+TOOLBAR_ITEM_H)/(bg_h) (1 - (x)/(bg_w));} \ + 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_ICON_WITH_BG(icon_name, x, y, w, h, bg_w, bg_h, img_normal, img_press) \ + part { name: icon_name; \ + type: IMAGE; \ + mouse_events: 1; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (y)/(bg_h) (1 - (x+w)/(bg_w));} \ + rel2 { relative: (y+h)/(bg_h) (1 - (x)/(bg_w));} \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_normal; } \ + } \ + description { \ + state: "press" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_press; } \ + } \ + 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; \ + description { \ + state: "default" 0.0; \ + aspect: 1.0 1.0; \ + align: 0.5 0.5; \ + rel1 { relative: (y)/(bg_h) (1 - (x+w)/(bg_w));} \ + rel2 { relative: (y+h)/(bg_h) (1 - (x)/(bg_w));} \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + } \ + description { \ + state: "dim" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + } \ + } + +#define TOOLBAR_ITEM_ICON_WITH_DIM(icon_name, x, y, w, h, bg_w, bg_h, img_normal, img_press, img_dim) \ + part { name: icon_name; \ + type: IMAGE; \ + mouse_events: 1; \ + description { \ + state: "default" 0.0; \ + rel1 { relative: (y)/(bg_h) (1 - (x+w)/(bg_w));} \ + rel2 { relative: (y+h)/(bg_h) (1 - (x)/(bg_w));} \ + visible: 0; \ + } \ + description { \ + state: "normal" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_normal; } \ + } \ + description { \ + state: "press" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_press; } \ + } \ + description { \ + state: "dim" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + image { normal: img_dim; } \ + } \ + } + +#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; \ + script {\ + new st[31];\ + new Float:vl;\ + get_state(PART:icon_name, st, 30, vl);\ + if (strcmp(st, "dim") != 0) { \ + emit( press_signal, "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, "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, "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, move_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) { \ + set_state(PART:icon_name, "press", 0.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) { \ + set_state(PART:icon_name, "normal", 0.0);\ + } \ + }\ + }\ + program { \ + name: "mouse_move_"icon_name; \ + signal: "mouse,move"; \ + source: icon_name; \ + script {\ + new st[31];\ + new Float:vl;\ + get_state(PART:icon_name, st, 30, vl);\ + if (strcmp(st, "dim") != 0) \ + emit( move_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( release_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",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_ICON(name, x, y, w, h, img_normal, img_press) \ + TOOLBAR_ITEM_ICON_WITH_BG(name, x, y, w, h, MAIN_W, MAIN_H, img_normal, img_press) + +#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) + +#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 100644 index 0000000..25fb440 --- /dev/null +++ b/edc/cam_utils.edc @@ -0,0 +1,227 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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=system_content font_size=34 align=center valign=top color=#ffffff wrap=word"; + tag: "br" " \n"; + } +} + +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; + 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; } + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + image{ normal: FOCUS_GUIDE_FOCUSED_IMAGE; } + } + description { + state: "failed" 0.0; + inherit: "default" 0.0; + visible: 1; + image{ normal: FOCUS_GUIDE_FAILED_IMAGE; } + } + } + } + + 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 180 +#define PX_POPUP_BOX_Y 84 +#define PX_POPUP_BOX_W 440 +#define PX_POPUP_BOX_H 242 + +#define PX_POPUP_TEXT_Y 40 + +#define PX_POPUP_BAR_X 40 +#define PX_POPUP_BAR_Y 182 +#define PX_POPUP_BAR_W 350 +#define PX_POPUP_BAR_H 14 + + group { name: "progress_popup"; + parts { + part { + name: "progress_popup_bg"; + type: IMAGE; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { relative: PX_POPUP_BOX_X/MAIN_W_AUTO PX_POPUP_BOX_Y/MAIN_H_AUTO; } + rel2 { relative: (PX_POPUP_BOX_X+PX_POPUP_BOX_W)/MAIN_W_AUTO (PX_POPUP_BOX_Y+PX_POPUP_BOX_H)/MAIN_H_AUTO; } + image{ normal: SHOTTING_MODE_POPUP_BG_IMAGE; } + } + } + part { + name: "progress_popup_text"; + type: TEXTBLOCK; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { relative: 0.0 PX_POPUP_TEXT_Y/PX_POPUP_BOX_H; to: progress_popup_bg; } + rel2 { relative: 1.0 1.0; to: progress_popup_bg; } + color: FONT_COLOR; + text { + style: "textblock_style"; + min: 0 1; + } + } + } + //to swallow progressbar + part { + name: "progress_popup_bar"; + type: SWALLOW; + 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; } + } + } + } + } + +#define TIMER_ICON_W 188 +#define TIMER_ICON_H 158 + group{ name: "timer_icon_landscape"; + + parts{ + part { + name: "icon"; + type: IMAGE; + 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; + 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; + } + } + } + } + } +} + diff --git a/edc/cam_zoom_layout.edc b/edc/cam_zoom_layout.edc new file mode 100644 index 0000000..a7f2560 --- /dev/null +++ b/edc/cam_zoom_layout.edc @@ -0,0 +1,131 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 (1280 - 250) +#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; + image: ZOOM_BG_VER_IMAGE COMP; +} + +collections { + group { + name: "main"; + + parts { + part { + name: "bg_image"; + type: IMAGE; + description { + state: "default" 0.0; + rel1 { relative: ZOOM_BG_X/MAIN_W ZOOM_BG_Y/MAIN_H;} + rel2 { relative: (ZOOM_BG_X+ZOOM_BG_W)/MAIN_W (ZOOM_BG_Y+ZOOM_BG_H)/MAIN_H;} + 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 100644 index 0000000..0499c99 --- /dev/null +++ b/edc/cam_zoom_layout_inverse.edc @@ -0,0 +1,133 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 (1280 - 250) +#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; + image: ZOOM_BG_VER_IMAGE COMP; +} + +collections { + group { + name: "main"; + + parts { + part { + name: "bg_image"; + type: IMAGE; + description { + state: "landscape_inverse" 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; } + rel2 { relative: (1 - ZOOM_BG_X/MAIN_W) (1 - ZOOM_BG_Y/MAIN_H); offset: -1 -1; } + 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 100644 index 0000000..2c68582 --- /dev/null +++ b/edc/cam_zoom_layout_vertical.edc @@ -0,0 +1,133 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 (1280 - 250) +#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; + image: ZOOM_BG_VER_IMAGE COMP; +} + +collections { + group { + name: "main"; + + parts { + part { + name: "bg_image"; + type: IMAGE; + description { + state: "portrait" 0.0; + rel1 { relative: (1 - (ZOOM_BG_Y+ZOOM_BG_H)/MAIN_H) ZOOM_BG_X/MAIN_W ; } + rel2 { relative: (1 - ZOOM_BG_Y/MAIN_H) (ZOOM_BG_X+ZOOM_BG_W)/MAIN_W;} + 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 100644 index 0000000..e258c20 --- /dev/null +++ b/edc/cam_zoom_layout_vertical_inverse.edc @@ -0,0 +1,133 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 (1280 - 250) +#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; + image: ZOOM_BG_VER_IMAGE COMP; +} + +collections { + group { + name: "main"; + + parts { + part { + name: "bg_image"; + type: IMAGE; + description { + state: "portrait_inverse" 0.0; + rel1 { relative: ZOOM_BG_Y/MAIN_H (1 - (ZOOM_BG_X+ZOOM_BG_W)/MAIN_W); offset: 0 0; } + rel2 { relative: (ZOOM_BG_Y+ZOOM_BG_H)/MAIN_H (1 - ZOOM_BG_X/MAIN_W); offset: -1 -1; } + 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_ctxpopup_camera.edc b/edc/style_ctxpopup_camera.edc new file mode 100644 index 0000000..9c6acee --- /dev/null +++ b/edc/style_ctxpopup_camera.edc @@ -0,0 +1,132 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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. + */ + + + +collections { + + group { name: "camera_ev"; + + parts { + part { + name: "elm.swallow.title"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 1 58; + max: 999999 36; + fixed: 0 1; + align: 0.5 0; + text { + font: "SLP:style=Helveca"; + size: 30; + align: 0.5 0.5; + min: 1 1; + text: "Shooting mode"; + } + } + } + part { + name: "title_line"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + min: 1 1; + max: 999999 1; + rel1 {to:"elm.swallow.title"; relative: 0 1;} + align: 0.5 0; + fixed: 0 1; + } + } + part { + name: "left_top_padding"; + mouse_events: 0; + scale: 1; + description { + min: 8 8; + max: 8 8; + rel1 {to:"title_line"; relative: 0 1;} + align: 0 0; + visible: 0; + } + } + part { + name: "elm.swallow.slider"; + type: SWALLOW; + scale: 1; + description { + color:0 0 0 255; + rel1 { to: "left_top_padding"; relative: 1 1;} + rel2 { to: "right_bottom_padding"; relative: 0 0;} + } + } + part { + name: "right_bottom_padding"; + mouse_events: 0; + scale: 1; + description { + min: 8 8; + max: 8 8; + align: 1 1; + visible: 0; + } + } + } + } + + + group { name: "camera_guide_screen"; + + parts { + part { + name: "left_top_padding"; + mouse_events: 0; + scale: 1; + description { + min: 5 5; + max: 5 5; + align: 0 0; + visible: 0; + } + } + part { + name: "elm.swallow.txt"; + type: SWALLOW; + scale: 1; + mouse_events: 0; + description { + rel1 { to: "left_top_padding"; relative: 1 1;} + rel2 { to: "right_bottom_padding"; relative: 0 0;} + } + } + part { + name: "right_bottom_padding"; + mouse_events: 0; + scale: 1; + description { + min: 5 5; + max: 5 5; + align: 1 1; + visible: 0; + } + } + } + } +} + diff --git a/edc/style_ctxpopup_camera_with_radio.edc b/edc/style_ctxpopup_camera_with_radio.edc new file mode 100644 index 0000000..c3f8ba9 --- /dev/null +++ b/edc/style_ctxpopup_camera_with_radio.edc @@ -0,0 +1,2257 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 { +group { + name:"camera/layout"; + parts { + part { + name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 1 60; + max: 999999 60; + fixed: 0 1; + align: 0.5 0; + text { + font: FONT_NAME; + size: 30; + align: 0.036 0.5; + min: 1 1; + text: "Shooting mode"; + } + } + } + part { + name: "elm.swallow.box"; + type: SWALLOW; + description { + rel1 { to: "elm.text"; relative: 0 1; } + rel2 { offset: -1 -5;} + } + } + } +} + +group { + name:"camera/layout/setting"; + parts { + part { + name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 1 60; + max: 999999 60; + fixed: 0 1; + align: 0.5 0; + text { + font: FONT_NAME; + size: 30; + align: 0.033 0.5; + min: 1 1; + text: "Shooting mode"; + } + } + } + part { + name: "elm.swallow.box"; + type: SWALLOW; + description { + rel1 { to: "elm.text"; relative: 0 1; } + rel2 { offset: -1 -5;} + } + } + } +} + + +#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;} \ + } \ + } \ + +//Item Layout +group { + name: "camera/item"; + script { + public disabled_v; + } + parts { + part { + name: "bg"; + scale: 1; + mouse_events: 0; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + color: 0 0 0 0; + min: 160 103; + max: 550 103; + } + } + part { + name: "seprator"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + min: 1 1; + max: 999999 1; + fixed: 0 1; + color: 52 55 55 255; + align: 0.5 0; + rel1 { offset: 4 0; } + rel2 { offset: -5 -1; } + } + } + part { + name: "event_blocker"; + mouse_events: 1; + description { + state: "default" 0.0; + } + } + part { + name: "check_left_padding"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 15 50; + max: 15 50; + align: 0 0; + fixed: 1 1; + visible: 0; + } + } + part { + name: "elm.swallow.radio"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: 32 32; + max: 32 32; + fixed: 1 1; + align: 0 0.5; + rel1 { to:"check_left_padding"; relative: 1 0; } + } + } + part { + name: "icon_left_padding"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 1 50; + max: 1 50; + align: 0 0; + fixed: 1 1; + visible: 0; + rel1 { to_x: "elm.swallow.radio"; relative: 1 0; } + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: 64 64; + max: 64 64; + align: 0 0.5; + aspect: 1.0 1.0; + rel1 { to:"icon_left_padding"; relative: 1 0; } + } + } + part { + name: "icon_right_padding"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 8 50; + max: 8 50; + align: 0 0.5; + fixed: 1 1; + visible: 0; + rel1 { to:"elm.swallow.icon"; relative: 1 0; } + } + } + part { + name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 200 20; + max: 200 50; + fixed: 0 1; + align: 0.5 0.5; + rel1 {relative: 1.0 0.0; to_x: "icon_right_padding";} + rel2 {relative: 1.0 1.0; } + color: 255 255 255 255; + text { + font: FONT_NAME; + size: 30; + align: 0.0 0.5; + min: 0 0; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + color: 255 255 0 255; + } + } + part { + name: "elm.title_text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 1 20; + max: 999999 50; + fixed: 0 1; + //align: 0.5 0.5; + rel1 {relative: 1.0 0.0; to_x: "check_left_padding";} + rel2 {relative: 1.0 1.0; } + color: 255 255 255 255; + text { + font: FONT_NAME; + size: 30; + align: 0.0 0.5; + min: 1 1; + } + } + } + part { + name: "over1"; + mouse_events: 1; + repeat_events: 1; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "over2"; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + color: 255 255 255 0; + } + description { + state: "clicked" 0.0; + color: 255 255 255 255; + } + } + } + programs { + program { + name: "item_unclick3"; + signal: "mouse,up,1"; + source: "over1"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { + name: "disable"; + signal: "elm,state,disabled"; + source: "elm"; + after: "disable_text"; + } + program { + name: "disable_text"; + script { + set_state(PART:"elm.text", "disabled", 0.0); + set_int( disabled_v, 1 ); + } + } + program { + name: "enable"; + signal: "elm,state,enabled"; + source: "elm"; + after: "enable_text"; + } + program { + name: "enable_text"; + script { + set_state(PART:"elm.text", "enabled", 0.0); + set_int( disabled_v, 0 ); + } + } + program { + name: "button_click"; + signal: "mouse,down,1"; + source: "over2"; + script { + if(!get_int( disabled_v)) { + set_state(PART:"elm.text", "clicked", 0.0); + emit("elm.action.mouse.down", ""); + } + } + } + program { + name: "button_clicked"; + signal: "mouse,clicked,1"; + source: "over2"; + script { + if(!get_int( disabled_v)) { + set_state(PART:"elm.text", "default", 0.0); + emit("elm.action.mouse.clicked", ""); + } + } + } + + } + program { + name: "button_unclick"; + signal: "mouse,up,1"; + source: "over2"; + script { + if(!get_int(disabled_v)) { + set_state(PART:"elm.text", "default", 0.0); + } + } + } +} + +//setting Item Layout +group { + name: "camera/item/setting"; + script { + public disabled_v; + } + parts { + part { + name: "bg"; + scale: 1; + mouse_events: 0; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + color: 0 0 0 0; + min: 400 103; + max: 400 103; + } + } + part { + name: "seprator"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + min: 1 1; + max: 999999 1; + fixed: 0 1; + color: 52 55 55 255; + align: 0.5 0; + rel1 { offset: 4 0; } + rel2 { offset: -5 -1; } + } + } + part { + name: "event_blocker"; + mouse_events: 1; + description { + state: "default" 0.0; + } + } + part { + name: "check_left_padding"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 15 50; + max: 15 50; + align: 0 0; + fixed: 1 1; + visible: 0; + } + } + part { + name: "elm.swallow.radio"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: 32 32; + max: 32 32; + fixed: 1 1; + align: 0 0.5; + rel1 { to:"check_left_padding"; relative: 1 0; } + } + } + part { + name: "icon_left_padding"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 1 50; + max: 1 50; + align: 0 0; + fixed: 1 1; + visible: 0; + rel1 { to_x: "elm.swallow.radio"; relative: 1 0; } + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: 64 64; + max: 64 64; + align: 0 0.5; + aspect: 1.0 1.0; + rel1 { to:"icon_left_padding"; relative: 1 0; } + } + } + part { + name: "icon_right_padding"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 8 50; + max: 8 50; + align: 0 0.5; + fixed: 1 1; + visible: 0; + rel1 { to:"elm.swallow.icon"; relative: 1 0; } + } + } + part { + name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 200 20; + max: 200 50; + fixed: 0 1; + align: 0.5 0.5; + rel1 {relative: 1.0 0.0; to_x: "icon_right_padding";} + rel2 {relative: 1.0 1.0; } + color: 255 255 255 255; + text { + font:FONT_NAME; + size: 30; + align: 0.0 0.5; + min: 0 0; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + color: 255 255 0 255; + } + } + part { + name: "elm.title_text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 1 60; + max: 999999 60; + fixed: 0 1; + //align: 0.5 0.5; + rel1 {relative: 1.0 0.0; to_x: "check_left_padding";} + rel2 {relative: 1.0 1.0; } + color: 255 255 255 255; + text { + font: FONT_NAME; + size: 30; + align: 0.0 0.5; + min: 1 1; + } + } + } + part { + name: "over1"; + mouse_events: 1; + repeat_events: 1; + ignore_flags: ON_HOLD; + description { + state: "default" 0.0; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "over2"; + mouse_events: 1; + repeat_events: 1; + description { + state: "default" 0.0; + color: 255 255 255 0; + } + description { + state: "clicked" 0.0; + color: 255 255 255 255; + } + } + } + programs { + program { + name: "item_unclick3"; + signal: "mouse,up,1"; + source: "over1"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { + name: "disable"; + signal: "elm,state,disabled"; + source: "elm"; + after: "disable_text"; + } + program { + name: "disable_text"; + script { + set_state(PART:"elm.text", "disabled", 0.0); + set_int( disabled_v, 1 ); + } + } + program { + name: "enable"; + signal: "elm,state,enabled"; + source: "elm"; + after: "enable_text"; + } + program { + name: "enable_text"; + script { + set_state(PART:"elm.text", "enabled", 0.0); + set_int( disabled_v, 0 ); + } + } + program { + name: "button_click"; + signal: "mouse,down,1"; + source: "over2"; + script { + if(!get_int( disabled_v)) { + set_state(PART:"elm.text", "clicked", 0.0); + emit("elm.action.mouse.down", ""); + } + } + } + program { + name: "button_clicked"; + signal: "mouse,clicked,1"; + source: "over2"; + script { + if(!get_int( disabled_v)) { + set_state(PART:"elm.text", "default", 0.0); + emit("elm.action.mouse.clicked", ""); + } + } + } + } + program { + name: "button_unclick"; + signal: "mouse,up,1"; + source: "over2"; + script { + if(!get_int(disabled_v)) { + set_state(PART:"elm.text", "default", 0.0); + } + } + } +} + +//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_SIZE 41 +#define CTXPOPUP_FRAME_CORNER_SIZE 4 4 +#define CTXPOPUP_BORDER_CORNER_SIZE 9 9 + + +/////////////////////////////////////////////////////////////////////////////// +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: 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_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"; + 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_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + max: CTXPOPUP_CAMERA_ARROW_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + 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_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + max: CTXPOPUP_CAMERA_ARROW_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + fixed: 1 1; + align: 0.0 0.5; + image { + normal: CTXPOPUP_LEFT_ARROW_IMAGE; + } + // color : 255 255 255 178; + } + description { + state: "right" 0.0; + min: CTXPOPUP_CAMERA_ARROW_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + max: CTXPOPUP_CAMERA_ARROW_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + fixed: 1 1; + align: 1.0 0.5; + image { + normal: CTXPOPUP_RIGHTT_ARROW_IMAGE; + } + // color : 255 255 255 178; + + } + description { + state: "top" 0.0; + min: CTXPOPUP_CAMERA_ARROW_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + max: CTXPOPUP_CAMERA_ARROW_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + fixed: 1 1; + align: 0.5 0.0; + image { + normal: CTXPOPUP_TOP_ARROW_IMAGE; + } + // color : 255 255 255 178; + + } + description { + state: "bottom" 0.0; + // rel1 { relative: 0.0 -0.3; } + // rel2 { relative: 1.0 0.7;} + min: CTXPOPUP_CAMERA_ARROW_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + max: CTXPOPUP_CAMERA_ARROW_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + fixed: 1 1; + align: 0.5 1.0; + image { + normal: CTXPOPUP_BOTTOM_ARROW_IMAGE; + } + // color : 255 255 255 178; + } + } + } + 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; + min: CTXPOPUP_CAMERA_ARROW_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + max: CTXPOPUP_CAMERA_ARROW_SIZE CTXPOPUP_CAMERA_ARROW_SIZE; + 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; + 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 100644 index 0000000..c08c6cf --- /dev/null +++ b/edc/style_genlist_macro.edc @@ -0,0 +1,847 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define GENLIST_PART_BASE( param_item_height ) \ + part { name: "base"; \ + type: RECT; \ + repeat_events: 0; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: 0 param_item_height; \ + color: GENLIST_PART_BG_COLOR_INC; \ + } \ + } + +#define GENLIST_PART_BG \ + part { name: "bg"; \ + type: RECT; \ + clip_to: "disclip"; \ + mouse_events: 0; \ + description { state: "default" 0.0; \ + color: GENLIST_PART_BG_COLOR_INC; \ + } \ + description { state: "hide" 0.0; \ + inherit: "default" 0.0; \ + rel1 { relative: 0.025 0.0; } \ + rel2 { relative: 1.025 1.0; } \ + } \ + description { state: "hide" 0.1; \ + inherit: "default" 0.0; \ + rel1 { relative: 0.13 0.0; } \ + rel2 { relative: 1.13 1.0; } \ + } \ + description { state: "hide" 0.2; \ + inherit: "default" 0.0; \ + rel1 { relative: 0.5 0.0; } \ + rel2 { relative: 1.5 1.0; } \ + } \ + description { state: "hide" 0.3; \ + inherit: "default" 0.0; \ + rel1 { relative: 1.0 0.0; } \ + rel2 { relative: 2.0 1.0; } \ + } \ + } + +#define GENLIST_PART_BG_IMAGE \ + part { name: "bg_image"; \ + type: RECT; \ + clip_to: "disclip"; \ + mouse_events: 0; \ + description { state: "default" 0.0; \ + color: GENLIST_PART_LIST_BG_COLOR_INC; \ + } \ + description { state: "selected" 0.0; \ + inherit: "default" 0.0; \ + color: GENLIST_PART_LIST_PRESS_COLOR_INC; \ + } \ + } + +#define GENLIST_PART_BOTTOM_LINE \ + part { name: "bottom_line"; \ + type: RECT; \ + mouse_events: 0; \ + description { state: "default" 0.0; \ + min: 0 1; \ + fixed: 0 1; \ + visible: 1; \ + color: GENLIST_PART_LIST_LINE_COLOR_INC; \ + rel1 { \ + relative: 0.0 1.0; \ + offset: 0 -1; \ + } \ + } \ + } + +#define GENLIST_PART_BOTTOM_EFFECT_LINE \ + part { name: "bottom_line"; \ + type: RECT; \ + mouse_events: 0; \ + description { state: "default" 0.0; \ + min: 0 1; \ + fixed: 0 1; \ + visible: 1; \ + color: GENLIST_PART_LIST_LINE_COLOR_INC; \ + rel1 { \ + relative: 0.0 1.0; \ + offset: 0 -1; \ + } \ + } \ + GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \ + GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \ + } + +#define GENLIST_PART_PADDING_TOP( param_padding_size ) \ + part { name: "elm.padding.top"; \ + type: RECT; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: 0 param_padding_size; \ + fixed: 0 1; \ + visible: 0; \ + rel2.relative: 1.0 0.0; \ + align: 0.0 0.0; \ + } \ + } + +#define GENLIST_PART_PADDING_TEXT_TOP( param_padding_size ) \ + part { name: "elm.padding.text.top"; \ + type: RECT; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: 0 param_padding_size; \ + fixed: 0 1; \ + visible: 0; \ + rel2.relative: 1.0 0.0; \ + align: 0.0 0.0; \ + } \ + } + +#define GENLIST_PART_PADDING_BOTTOM( param_padding_size ) \ + part { name: "elm.padding.bottom"; \ + type: RECT; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: 0 param_padding_size; \ + fixed: 0 1; \ + visible: 0; \ + rel1.relative: 0.0 1.0; \ + align: 0.0 1.0; \ + } \ + } + +#define GENLIST_PART_PADDING_LEFT( param_padding_size ) \ + part { name: "elm.padding.left"; \ + type: RECT; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: param_padding_size 0; \ + fixed: 1 0; \ + visible: 0; \ + rel2.relative: 0.0 1.0; \ + align: 0.0 0.0; \ + } \ + } + +#define GENLIST_PART_PADDING_RIGHT( param_padding_size ) \ + part { name: "elm.padding.right"; \ + type: RECT; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: param_padding_size 0; \ + fixed: 1 0; \ + visible: 0; \ + rel1.relative: 1.0 0.0; \ + align: 1.0 0.0; \ + } \ + } + +#define GENLIST_PART_DIALOGUE_BASE( param_item_height ) \ + part { name: "base"; \ + type: RECT; \ + clip_to: "disclip"; \ + repeat_events: 1; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: 0 param_item_height; \ + color: LAYOUT_GROUP_LIST_BG_COLOR_INC; \ + } \ + } + +#define GENLIST_PART_DIALOGUE_ITEM \ + part { name: "elm.rect.dialogue"; \ + type: RECT; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: GENLIST_PADDING_12_INC 0; \ + fixed: 1 0; \ + color: GENLIST_DIALOGUE_GROUP_LEFT_BG_COLOR_INC; \ + rel2.relative: 0.0 1.0; \ + align: 0.0 0.0; \ + } \ + } + +#define GENLIST_PART_DIALOGUE_EXPANDABLE_ITEM \ + part { name: "elm.rect.dialogue"; \ + type: RECT; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: GENLIST_PADDING_12_INC 0; \ + fixed: 1 0; \ + color: GENLIST_DIALOGUE_GROUP_LEFT_BG_COLOR_INC; \ + rel2.relative: 0.0 1.0; \ + align: 0.0 0.0; \ + } \ + GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \ + GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \ + } + +#define GENLIST_PART_SWALLOW_END( param_padding_size ) \ + part { name: "elm.padding.left.swallow.end";\ + clip_to: "disclip"; \ + type: RECT;\ + scale: 1;\ + description { state: "default" 0.0;\ + min: param_padding_size 0;\ + fixed: 1 0;\ + visible: 0; \ + rel1.to_x: "elm.swallow.end";\ + rel2 {\ + relative: 0.0 1.0;\ + to_x: "elm.swallow.end";\ + }\ + align: 1.0 0.5;\ + }\ + }\ + part { name: "elm.swallow.end";\ + clip_to: "disclip"; \ + type: SWALLOW;\ + scale: 1;\ + description { state: "default" 0.0;\ + fixed: 1 0;\ + align: 1.0 0.5;\ + rel1.to_x: "elm.padding.right";\ + rel2 {\ + relative: 0.0 1.0;\ + to_x: "elm.padding.right";\ + }\ + }\ + } + +#define GENLIST_PART_DISCLIP \ + part { name: "disclip"; \ + type: RECT; \ + description { state: "default" 0.0; \ + } \ + description { state: "disabled" 0.0; \ + inherit: "default" 0.0; \ + color: GENLIST_PART_DISCLIP_COLOR_INC; \ + } \ + } + +#define GENLIST_EXPANDABLE_PART_PERSPECTIVE_POINT() \ + part { name: "point"; \ + type: RECT; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + color: 0 0 0 0; \ + rel1 { relative: 0.0 0.0; } \ + rel2 { relative: 1.0 0.0; } \ + } \ + } + +#define GENLIST_PART_MAP_START( param_x, param_y, param_z ) \ + description { state: "map_transition" 0.0; \ + inherit: "default" 0.0; \ + color: 50 50 50 100; \ + map { \ + perspective: "point"; \ + on: 1; \ + smooth: 1; \ + perspective_on: 1; \ + backface_cull: 1; \ + rotation { \ + center: "point"; \ + x: param_x; \ + y: param_y; \ + z: param_z; \ + } \ + } \ + } \ + description { \ + state: "hide" 0.0; \ + inherit: "default" 0.0; \ + visible: 0; \ + } + +#define GENLIST_PART_MAP_FINISH( param_x, param_y, param_z ) \ + description { \ + state: "map_rotate" 0.0; \ + inherit: "default" 0.0; \ + map { \ + perspective: "point"; \ + on: 1; \ + smooth: 1; \ + perspective_on: 1; \ + backface_cull: 1; \ + rotation { \ + center: "point"; \ + x: param_x; \ + y: param_y; \ + z: param_z; \ + } \ + } \ + } \ + +#define GENLIST_PART_MAP_BASE( param_item_height ) \ + part { name: "base"; \ + type: RECT; \ + repeat_events: 1; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: 0 param_item_height; \ + color: GENLIST_PART_BG_COLOR_INC; \ + } \ + GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \ + GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \ + } + +#define GENLIST_EXPANDABLE_PART_BASE( GE_HEIGHT , GE_COLOR ) \ + part { name: "base"; \ + type: RECT; \ + repeat_events: 1; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: 0 GE_HEIGHT; \ + color: GE_COLOR; \ + } \ + description { state: "selected" 0.0; \ + inherit: "default" 0.0; \ + color: GENLIST_PART_LIST_PRESS_COLOR_INC; \ + } \ + GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \ + GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \ + } + +#define GENLIST_PROGRAM_MAP_ROTATE_EXPAND_START() \ + name: "rotaion_transition"; \ + signal: "flip_item"; \ + action: STATE_SET "map_transition" 0.0; \ + after: "rotation"; + +#define GENLIST_PROGRAM_MAP_ROTATE_EXPAND_FINISH( second ) \ + name: "rotation"; \ + action: STATE_SET "map_rotate" 0.0; \ + transition: LINEAR second; \ + after: "rotation_end"; + +#define GENLIST_PROGRAM_MAP_EXPAND_END() \ + name: "rotation_end"; \ + action: STATE_SET "default" 0.0; + +#define GENLIST_PROGRAM_MAP_ROTATE_CONTRACT_START() \ + name: "rotation_transition2"; \ + signal: "elm,state,contract_flip"; \ + action: STATE_SET "map_rotate" 0.0; \ + after: "rotation2"; + +#define GENLIST_PROGRAM_MAP_ROTATE_CONTRACT_FINISH( second ) \ + name: "rotation2"; \ + action: STATE_SET "map_transition" 0.0; \ + transition: LINEAR second; \ + after: "rotation3"; + +#define GENLIST_PROGRAM_MAP_CONTRACT_END() \ + name: "rotation3"; \ + action: STATE_SET "hide" 0.0; + +#define GENLIST_PART_EXPANDABLE2_NOSHADOW_BASE( param_item_height ) \ + part { name: "base"; \ + type: RECT; \ + repeat_events: 1; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: 0 param_item_height; \ + color: GENLIST_PART_EXPANDABLE_2ND_DEPTH_BG_COLOR_INC; \ + } \ + GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \ + GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \ + } + +#define GENLIST_PART_EXPANDABLE_SWALLOW_PADDING \ + part { name: "elm.swallow.pad"; \ + type: SWALLOW; \ + description { state: "default" 0.0; \ + fixed: 1 0; \ + align: 0.0 0.5; \ + rel1 { \ + relative: 1.0 0.0;\ + to_x: "elm.padding.left"; \ + } \ + rel2.to_x: "elm.padding.left"; \ + } \ + GENLIST_PART_MAP_START(-90.0, 0.0, 0.0) \ + GENLIST_PART_MAP_FINISH(0.0, 0.0, 0.0) \ + } \ + +#define GENLIST_PART_PADDING_LEFT_SLIDE( param_padding_size ) \ + part { name: "elm.padding.left"; \ + type: RECT; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: param_padding_size 0; \ + fixed: 1 0; \ + visible: 0; \ + rel1 { relative: 0.0 0.0; to: "bg"; } \ + rel2 { relative: 0.0 1.0; to: "bg"; } \ + align: 0.0 0.0; \ + } \ + } + +/* only for demo */ +#define GENLIST_PART_BUTTON( param_name, param_text_name, param_text, param_left, param_right, param_top, param_bottom ) \ + part { name: param_name; \ + mouse_events: 1; \ + description { state: "default" 0.0; \ + visible: 1; \ + rel1 { relative: param_left param_top; offset: 0 0; } \ + rel2 { relative: param_right param_bottom; offset: -1 -1; } \ + image { \ + normal: "btn_normal.png"; \ + border: 10 10 10 10; \ + border_scale: 1; \ + } \ + image.middle: SOLID; \ + fill.smooth: 0; \ + } \ + description { state: "selected" 0.0; \ + inherit: "default" 0.0; \ + image { \ + normal: "btn_selected.png"; \ + } \ + } \ + } \ + part { name: param_text_name; \ + type: TEXT; \ + mouse_events: 0; \ + scale: 1; \ + description { \ + align: 0.0 0.0; \ + state: "default" 0.0; \ + color: 0 0 0 255; \ + rel1 { relative: 0.0 0.0; to: param_name; } \ + rel2 { relative: 1.0 1.0; to: param_name; } \ + text { \ + text: param_text; \ + font: "SLP:style=Roman"; \ + size: 24; \ + min: 1 1; \ + align: 0.5 0.5; \ + } \ + } \ + } + +/* only for demo */ +#define GENLIST_PROGRAM_BUTTON( param_name_focused, param_name_normal, param_part_name ) \ + program { name: param_name_focused; \ + source: param_part_name; \ + signal: "mouse,down,1"; \ + action: STATE_SET "selected" 0.0; \ + target: param_part_name; \ + } \ + program { name: param_name_normal; \ + source: param_part_name; \ + signal: "mouse,up,1"; \ + action: STATE_SET "default" 0.0; \ + target: param_part_name; \ + } + +#define GENLIST_PROGRAM_SLIDE_WITH_AFTER( param_name, param_state, param_next ) \ + program { name: param_name; \ + action: STATE_SET "hide" param_state; \ + target: "bg"; \ + transition: LINEAR 0.3; \ + after: param_next; \ + } + +#define GENLIST_PROGRAM_SLIDE( param_name, param_state_name, param_state_value ) \ + program { name: param_name; \ + action: STATE_SET param_state_name param_state_value; \ + target: "bg"; \ + transition: LINEAR 0.3; \ + } + +#define DESC_FLIP_IMAGE( param_state_value, param_image_file_name ) \ + description { state: "flipping" param_state_value; \ + inherit: "default" 0.0; \ + image { normal: param_image_file_name; } \ + } + +#define DESC_TEXT_HIDE( param_state_value ) \ + description { state: "hide" param_state_value; \ + inherit: "default" 0.0; \ + color: 0 0 0 (255*(1-param_state_value/0.20)); \ + } + +#define GENLIST_EDIT_PART_BASE( param_item_height ) \ + part { name: "base"; \ + type: RECT; \ + repeat_events: 0; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: 0 param_item_height; \ + color: 0 0 0 0; \ + } \ + } + +#define GENLIST_PART_FLIP \ + part { name: "elm.flip.content"; \ + clip_to: "disclip"; \ + type: SWALLOW; \ + mouse_events: 1; \ + scale: 1; \ + description { state: "default" 0.0; \ + visible: 0; \ + fixed: 1 1; \ + rel1 { \ + relative: 1.0 0.5; \ + to_x: "elm.padding.left"; \ + } \ + rel2 { \ + relative: 0.0 0.5; \ + to_x: "elm.padding.right"; \ + } \ + } \ + description { state: "flip_enabled" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + } \ + } + +#define GENLIST_DESCRIPTION_INVISIBLE_SELECTED \ + description { state: "selected" 1.0; \ + inherit: "default" 0.0; \ + visible: 0; \ + } + +#define GENLIST_DESCRIPTION_FLIP_ENABLED \ + description { state: "flip_enabled" 0.0; \ + inherit: "default" 0.0; \ + visible: 0; \ + } + +#define GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_1TEXT \ + script { \ + new st[31]; \ + new Float:vl; \ + get_state(PART:"elm.text", st, 30, vl); \ + set_state(PART:"bg_image", "selected", 0.0); \ + if (!strcmp(st, "flip_enabled")) \ + set_state(PART:"elm.text", "selected", 1.0); \ + else \ + set_state(PART:"elm.text", "selected", 0.0); \ + } + +#define GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_2TEXT \ + script { \ + new st[31]; \ + new Float:vl; \ + get_state(PART:"elm.text.1", st, 30, vl); \ + set_state(PART:"bg_image", "selected", 0.0); \ + if (!strcmp(st, "flip_enabled")) { \ + set_state(PART:"elm.text.1", "selected", 1.0); \ + set_state(PART:"elm.text.2", "selected", 1.0); \ + } \ + else { \ + set_state(PART:"elm.text.1", "selected", 0.0); \ + set_state(PART:"elm.text.2", "selected", 0.0); \ + } \ + } + +#define GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_3TEXT \ + script { \ + new st[31]; \ + new Float:vl; \ + get_state(PART:"elm.text.1", st, 30, vl); \ + set_state(PART:"bg_image", "selected", 0.0); \ + if (!strcmp(st, "flip_enabled")) { \ + set_state(PART:"elm.text.1", "selected", 1.0); \ + set_state(PART:"elm.text.2", "selected", 1.0); \ + set_state(PART:"elm.text.3", "selected", 1.0); \ + } \ + else { \ + set_state(PART:"elm.text.1", "selected", 0.0); \ + set_state(PART:"elm.text.2", "selected", 0.0); \ + set_state(PART:"elm.text.3", "selected", 0.0); \ + } \ + } + +#define GENLIST_PROGRAM_FLIP_1TEXT \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text"; \ + target: "elm.flip.content"; \ + } + +#define GENLIST_PROGRAM_FLIP_1TEXT_1ICON \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text"; \ + target: "elm.icon"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text"; \ + target: "elm.icon"; \ + target: "elm.flip.content"; \ + } + +#define GENLIST_PROGRAM_FLIP_1TEXT_2ICON \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.flip.content"; \ + } + +#define GENLIST_PROGRAM_FLIP_1TEXT_3ICON \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.icon.3"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.icon.3"; \ + target: "elm.flip.content"; \ + } + +#define GENLIST_PROGRAM_FLIP_2TEXT \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.flip.content"; \ + } + +#define GENLIST_PROGRAM_FLIP_2TEXT_1ICON \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.icon"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.icon"; \ + target: "elm.flip.content"; \ + } + +#define GENLIST_PROGRAM_FLIP_2TEXT_2ICON \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.flip.content"; \ + } + +#define GENLIST_PROGRAM_FLIP_2TEXT_3ICON \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.icon.3"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.icon.3"; \ + target: "elm.flip.content"; \ + } + +#define GENLIST_PROGRAM_FLIP_3TEXT \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.text.3"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.text.3"; \ + target: "elm.flip.content"; \ + } + +#define GENLIST_PROGRAM_FLIP_3TEXT_1ICON \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.text.3"; \ + target: "elm.icon"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.text.3"; \ + target: "elm.icon"; \ + target: "elm.flip.content"; \ + } + +#define GENLIST_PROGRAM_FLIP_3TEXT_2ICON \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.text.3"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.text.3"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.flip.content"; \ + } + +#define GENLIST_PROGRAM_FLIP_3TEXT_3ICON \ + program { name: "flip_enabled"; \ + signal: "elm,state,flip,enabled"; \ + source: "elm"; \ + action: STATE_SET "flip_enabled" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.text.3"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.icon.3"; \ + target: "elm.flip.content"; \ + } \ + program { name: "flip_disabled"; \ + signal: "elm,state,flip,disabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "elm.text.1"; \ + target: "elm.text.2"; \ + target: "elm.text.3"; \ + target: "elm.icon.1"; \ + target: "elm.icon.2"; \ + target: "elm.icon.3"; \ + target: "elm.flip.content"; \ + } + diff --git a/edc/style_genlist_normal.edc b/edc/style_genlist_normal.edc new file mode 100644 index 0000000..7505bd8 --- /dev/null +++ b/edc/style_genlist_normal.edc @@ -0,0 +1,634 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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. + */ + + 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_103_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: TEXT; + 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 { + font: "SLP:style=Helveca"; + size: GENLIST_FONT_40_INC; + min: 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 + } + } + // 4.1.2 + group { name: "elm/genlist/item/camera/dialogue/1text.1icon/default"; + alias: "elm/genlist/item_odd/camera/dialogue/1text.1icon/default"; + alias: "elm/genlist/item_compress/camera/dialogue/1text.1icon/default"; + alias: "elm/genlist/item_compress_odd/camera/dialogue/1text.1icon/default"; + alias: "elm/layout/dialogue/1text.1icon"; + 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_113_INC ) + GENLIST_PART_BG_IMAGE + GENLIST_PART_BOTTOM_LINE + GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_32_INC ) + GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_16_INC ) + GENLIST_PART_DIALOGUE_ITEM + part { name: "elm.icon"; + clip_to: "disclip"; + type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + rel1.to_x: "elm.padding.right"; + rel2 { + relative: 0.0 1.0; + to_x: "elm.padding.right"; + } + align: 1.0 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_16_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: TEXT; + 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.0; + color: GENLIST_PART_FONT_LIST_MAIN_TEXT_UNREAD_COLOR_INC; + text { + font: "SLP:style=Roman"; + size: GENLIST_FONT_44_INC; + min: 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_INVISIBLE_SELECTED + 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; + GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_1TEXT + } + 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: "00_check_off.png" COMP; + image: "00_check_on.png" 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: "00_check_off.png"; + border: CHECK_ONOFF_CHECK_IMAGE_BORDER_INC; + border_scale: 1; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + image.normal: "00_check_on.png"; + } + description { state: "pressed" 0.0; + inherit: "default" 0.0; + image.normal: "00_check_off.png"; + } + description { state: "visible_pressed" 0.0; + inherit: "default" 0.0; + image.normal: "00_check_on.png"; + } + } + 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: "check_label_textblock_style"; + min: 0 0; + } + 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_slider_camera.edc b/edc/style_slider_camera.edc new file mode 100644 index 0000000..697f290 --- /dev/null +++ b/edc/style_slider_camera.edc @@ -0,0 +1,839 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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: 1 0; } + rel2 { to: "bg"; offset: -2 -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; + 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 0; + max: 20 0; + fixed: 1 1; + rel1 { relative: 0.5 0.0; to_y: "bg"; } + rel2 { relative: 0.5 1.0; to_y: "bg"; } + 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; + } + } + } + + 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: "go_disabled"; + 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: "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"; + script { + public value_hide = 0; + public set_value_show() { + set_int(value_hide, 0); + } + public set_value_hide() { + set_int(value_hide, 1); + } + public thumb_down() { + if (get_int(value_hide) == 1) { + set_state(PART:"elm.indicator", "default", 0.0); + } else { + set_state(PART:"elm.indicator", "visible", 0.0); + } + } + public thumb_up() { + set_state(PART:"elm.indicator", "default", 0.0); + } + } + + 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; + border: 5 5 5 10; + } + fill.smooth: 0; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + image { + normal: SLIDER_HANDLER_IMAGE; + border: 5 5 5 10; + } + } + } + part { + name: "elm.indicator"; + type: TEXT; + mouse_events: 0; + effect: SOFT_SHADOW; + scale: 1; + description { state: "default" 0.0; + visible: 0; + fixed: 1 1; + align: 0.5 1.0; + rel1 { to: "button0"; relative: 0.0 -0.25; offset: 0 0; } + rel2 { to_x: "button0"; relative: 1.0 -0.25; offset: -1 0; } + color: 224 224 224 255; + color3: 0 0 0 64; + text { + font: "Sans,Edje-Vera"; + size: 10; + min: 0 0; + align: 0.5 0.5; + } + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + text.min: 1 1; + rel1.offset: 0 -1; + rel2.offset: -1 -1; + } + } + } + + programs { + program { + name: "set_val_show"; + signal: "elm,state,val,show"; + source: "elm"; + script { + set_value_show(); + } + } + program { + name: "set_val_hide"; + signal: "elm,state,val,hide"; + source: "elm"; + script { + set_value_hide(); + } + } + program { + name: "val_show"; + signal: "mouse,down,*"; + source: "button_events"; + script { + thumb_down(); + } + } + program { + name: "val_hide"; + signal: "mouse,up,*"; + source: "button_events"; + script { + thumb_up(); + } + } + program { + name: "go_disabled"; + signal: "elm,state,disabled"; + source: "elm"; + action: STATE_SET "disabled" 0.0; + target: "button0"; + } + program { + name: "go_enabled"; + signal: "elm,state,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "button0"; + } + } + } + +/*hor edc*/ +///////////////////////////////////////////////////////////////// +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; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + part { name: "button0"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + min: SLIDER_INDICATOR_WIDTH_INC SLIDER_INDICATOR_HEIGHT_INC; + max: 90 SLIDER_INDICATOR_HEIGHT_INC; + rel1 { + to: "elm.indicator"; + } + rel2 { + to: "elm.indicator"; + } + image { + normal: SLIDER_HANDLER_IMAGE; + } + fill.smooth: 0; + } + } + part { name: "elm.indicator"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 1; + color: SLIDER_INDICATOR_TEXT_COLOR_INC; + fixed: 1 1; + min: 60 60; + text { + font: "SLP:style=Medium"; + size: SLIDER_INDICATOR_TEXT_SIZE_INC; + min: 1 1; + align: 0.5 0.5; + text_class: "slp_medium"; + } + } + description { state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + } + programs { + program { name: "set_val_show"; + signal: "elm,state,val,show"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.indicator"; + } + program { name: "set_val_hide"; + signal: "elm,state,val,hide"; + source: "elm"; + action: STATE_SET "hide" 0.0; + target: "elm.indicator"; + } + program { name: "slider_disable"; + signal: "elm,state,disabled"; + source: "elm"; + action: STATE_SET "disabled" 0.0; + target: "button0"; + target: "button_events"; + } + program { name: "slider_enable"; + signal: "elm,state,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "button0"; + target: "button_events"; + } + } + } + +///////////////////////////////////////////////////////////// + group { name: "elm/slider/horizontal/camera"; + script { + public invert_on = 0; + public set_invert_on() { + set_state(PART:"level", "inverted", 0.0); + set_state(PART:"level2", "inverted", 0.0); + set_int(invert_on, 1); + } + public set_invert_off() { + set_state(PART:"level", "default", 0.0); + set_state(PART:"level2", "default", 0.0); + set_int(invert_on, 0); + } + public thumb_down() { + if(get_int(invert_on) == 0) + set_state(PART:"level", "pressed", 0.0); + else if(get_int(invert_on) == 1) + set_state(PART:"level2", "pressed", 0.0); + } + public thumb_up() { + if(get_int(invert_on) == 0) + set_state(PART:"level", "default", 0.0); + else if(get_int(invert_on) == 1) + set_state(PART:"level2", "inverted", 0.0); + } + } + parts { + part { name: "base"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 0 20; + max: 99999 20; + rel1 { to: "bg"; offset: 1 0; } + rel2 { to: "bg"; offset: -2 -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; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 58 20; + max: 99999 20; + align: 1.0 0.5; + rel1 { + to_x: "bar_left_padding"; + relative: 1.0 0.0; + } + rel2 { + to_x: "bar_right_padding"; + relative: 0.0 1.0; + } + } + } + part { + name: "bar_left_padding"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + min: 4 0; + fixed: 1 1; + rel1 { + relative: 1.0 0.5; + to_x: "elm.text"; + } + rel2 { + relative: 1.0 0.5; + to_x: "elm.text"; + } + align: 0.0 0.5; + color: 0 0 0 0; + } + } + part { + name: "bar_right_padding"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + min: 0 0; + fixed: 1 1; + rel1 { + relative: 0.0 0.5; + to_x: "elm.units"; + } + rel2 { + relative: 0.0 0.5; + to_x: "elm.units"; + } + align: 1.0 0.5; + } + } + + part { name: "level"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + rel1.to: "base"; + rel2 { + to_y: "base"; + to_x: "elm.dragable.slider"; + relative: 0.5 1.0; + } + image.normal: SLIDER_BAR_VER_IMAGE; + fill.smooth: 0; + } + description { state: "inverted" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { state: "pressed" 0.0; + inherit: "default" 0.0; + image.normal: SLIDER_BAR_VER_IMAGE; + fill.smooth: 0; + } + } + part { name: "level2"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + visible: 0; + rel1 { + to_y: "base"; + to_x: "elm.dragable.slider"; + relative: 0.5 0.0; + } + rel2.to: "base"; + image.normal: SLIDER_BAR_VER_IMAGE; + fill.smooth: 0; + } + description { state: "inverted" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "pressed" 0.0; + inherit: "default" 0.0; + visible: 1; + image.normal: SLIDER_BAR_VER_IMAGE; + fill.smooth: 0; + } + } + 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.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + fixed: 1 1; + align: 0.0 0.5; + rel1.to_x: "elm.swallow.icon"; + rel1.relative: 1.0 0.0; + rel2.to_x: "elm.swallow.icon"; + color: SLIDER_UNITS_TEXT_COLOR_INC; + text { + font: "SLP:style=Medium"; + size: SLIDER_UNITS_TEXT_SIZE_INC; + min: 0 0; + align: 0.0 0.5; + text_class: "slp_medium"; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + text.min: 1 1; + } + } + 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: "units"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + rel1 { + to_x: "elm.units"; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.units"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + fixed: 1 1; + align: 1.0 0.5; + rel1.to_x: "elm.swallow.end"; + rel2.relative: 0.0 1.0; + rel2.to_x: "elm.swallow.end"; + color: SLIDER_UNITS_TEXT_COLOR_INC; + text { + font: "SLP:style=Bold"; + size: SLIDER_UNITS_TEXT_SIZE_INC; + min: 0 0; + align: 0.0 0.5; + text_class: "slp_bold"; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + fixed: 1 1; + visible: 1; + text.min: 1 1; + } + } + part { name: "elm.dragable.slider"; + type: GROUP; + source: "elm/slider/horizontal/indicator/camera"; + mouse_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; + mouse_events: 1; + repeat_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 1 1; + color: SLIDER_DISABLER_PART_COLOR_INC; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + 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.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: "units_show"; + signal: "elm,state,units,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.units"; + target: "units"; + } + program { name: "units_hide"; + signal: "elm,state,units,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.units"; + target: "units"; + } + + program { name: "invert_on"; + signal: "elm,state,inverted,on"; + source: "elm"; + script { + set_invert_on(); + } + } + program { name: "invert_off"; + signal: "elm,state,inverted,off"; + source: "elm"; + script { + set_invert_off(); + } + } + program { name: "val_show"; + signal: "mouse,down,*"; + source: "elm.dragable.slider"; + script { + thumb_down(); + } + } + program { name: "val_hide"; + signal: "mouse,up,*"; + source: "elm.dragable.slider"; + script { + thumb_up(); + } + } + program { name: "slider_disable"; + signal: "elm,state,disabled"; + source: "elm"; + action: STATE_SET "disabled" 0.0; + target: "disabler"; + } + program { name: "slider_enable"; + signal: "elm,state,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "disabler"; + } + } + } +/////////////////////////////////////////// +} + +//end file + diff --git a/edc/style_tizen_hd_inc.edc b/edc/style_tizen_hd_inc.edc new file mode 100644 index 0000000..dcef987 --- /dev/null +++ b/edc/style_tizen_hd_inc.edc @@ -0,0 +1,1150 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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_89_INC 89 +#define GENLIST_HEIGHT_93_INC 93 +#define GENLIST_HEIGHT_97_INC 97 +#define GENLIST_HEIGHT_103_INC 103 +#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_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 diff --git a/images/00_check_off.png b/images/00_check_off.png new file mode 100644 index 0000000000000000000000000000000000000000..49a55524c3350a492eeb0f24ec914b6bc5d0758d GIT binary patch literal 3235 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 I7UB}~KWaPyP5=M^ literal 0 HcmV?d00001 diff --git a/images/00_check_on.png b/images/00_check_on.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1f4c83bcb66349c6812f4f0d8ea9ab5c8e0bb7 GIT binary patch literal 3539 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 N002ovPDHLkV1l-Pm>vKC literal 0 HcmV?d00001 diff --git a/images/Touch AF_rect/camera_focus_fail.png b/images/Touch AF_rect/camera_focus_fail.png new file mode 100644 index 0000000000000000000000000000000000000000..7e2c9a3c813f272569347341381c5dab777f9cb2 GIT binary patch literal 439 zcmeAS@N?(olHy`uVBq!ia0vp^vw%2@gAGW!DSr z1<%~X^wgl##FWaylc_cg42+SUE{-7;x8B@6op;DV!1Z9}lmGvpKHK;~tV%~}_R2|{ zxTT-HP`a(rY3SA$XZT~~85zNgRqxF6t!20EEi&HrY?tZW-L8k-)t#6ZDw?#gIXP#1 zxEJ;_)jan9`H9AB@4VTXF(?0G&+Y#w&Rmyt^N~&cd2*`j;iC))+Q$Mlh-H5K257Bxs|6H_V+Po~-c6?J&JIEGZ*dUN9-Z-WDetK*CPFWz5Wy*f|nTy}#2r}(Z_ zLDJrrOc$_~3+qX|6H_V+Po~-c6;1GTaSW-r_2!l%SAzi$%K^7v|Mi!%$0r;JIP}K0oo}_- zgL7w06$LL=O-T3DtiILwZ(VH09CuL}ivlJ-84K|TtHahWJH7c>=AGzmYk2GAE?da6 z7d$w?X#pe}g$o|&{FI$tcX-XQ(22|cSU-|w=bO{O%nsDZ2qM5nK!^t{K(2BTiv&Z( XWbTrU;f^bTZe#Ft^>bP0l+XkKlS)%_ literal 0 HcmV?d00001 diff --git a/images/Touch AF_rect/camera_focus_fail_3.png b/images/Touch AF_rect/camera_focus_fail_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d417840ef4f5628cd2f2f5ab4ea3bdce2995b19d GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^en4!-!3HEVZ?E47q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c74>?$IEGZ*dUMN=ufc$a#j)qd|LL+?SvgZg62lfPk&Jaz zQZnYhYAx8n%+5FGKqD&Y_W&f~_aIH=`{c9Vquzdc-f+}(_dHdRv~4Ae#DEeIX)w9f zx$fhEe^2u?bk04x_x1P8NEwTQ2M0KT|6H_V+Po~-c6}5P}IEGZ*dUM^8t3g4;HE{lx|GNJRIE8AJ&d;@e@!^0^ zDDPWy!3Jh_zBvaPQAxiCAQ8U@_g?%u-L6tuv`6RMqgl%~U)xn^Cic9D0ZGT_6YneU wAAh8?uD%Q;qh0{gxjeY8!FH$JJ>3Hgn$8@hj0J_?f$m}OboFyt=akR{0N_ehT>t<8 literal 0 HcmV?d00001 diff --git a/images/Touch AF_rect/camera_focus_notready.png b/images/Touch AF_rect/camera_focus_notready.png new file mode 100644 index 0000000000000000000000000000000000000000..ba69ea5e5be6af104da1f991ec0c709afed1e166 GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0vp^vw%2@gAGW!DSr z1<%~X^wgl##FWaylc_cg42;p9E{-7;x8B@6&DUfg;BfKUm;d!UkMSlZzfiuSIdAi{ z2?t7fM4bIJuWkwRbJ_4^&wiQwFb(&6U+*0#Hap?ex7GFeU6;fD>Q2lH6-`>$oSZWX z)_$qE;d}l0Ov~lA=GDF?k9@a$7C*S~cKr~`(xmxe&yrVYm!~Zf z%wM$CM(k5*PvsGfXA!Hj*=Bb_-J%H6+MK=kf5`m1>ig3|6H_V+Po~-c6?J;LIEGZ*dUMl}uR%e8JsCP@7Cp95ZwD}k8a|N_ElNh7TwJ3d@>e|%GuENc93F-7AQIA07wK%%9U^$FtpC&DtRd`n+kLkgQu&X%Q~loCIGG- BPUrvt literal 0 HcmV?d00001 diff --git a/images/Touch AF_rect/camera_focus_notready_2.png b/images/Touch AF_rect/camera_focus_notready_2.png new file mode 100644 index 0000000000000000000000000000000000000000..95f8b0b7e9200a6b54565d24a896cb924cb756f0 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^en4!-!3HEVZ?E47q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6;1MVaSW-r_2!l%UxNY<%Ykb@{_BhHXJB)hb#phnT6a)V zSZIkynq2G&;Z0Mv-)<^|6H_V+Po~-c74><#IEGZ*dUMN>&%r^!B~bNU{nKY0Rcb9Ke|IiD>#Zvh z6gvCYTaE*b%CPK1x_4V{?sPtJwQq?IP^RDk3!lu6`SuLI)3OTJmv9*{JemdKI;Vst00eebT>t<8 literal 0 HcmV?d00001 diff --git a/images/Touch AF_rect/camera_focus_notready_4.png b/images/Touch AF_rect/camera_focus_notready_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a602bd83bd8511ee487ea8fd23e0c72ccf40bdf2 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^en4!-!3HEVZ?E47q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6?J>MIEGZ*dUM;5tHD6P)iJ#2zjpqrFJ3oPS}OOp9%dIc zHTrzFVdQ I&MBb@0G6ax*8l(j literal 0 HcmV?d00001 diff --git a/images/Touch AF_rect/camera_focus_ready_1.png b/images/Touch AF_rect/camera_focus_ready_1.png new file mode 100644 index 0000000000000000000000000000000000000000..913dfe2b81c42d13d4587092e5ffa3a78ff490cb GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^en4!-!3HEVZ?E47q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c70vc^aSW-r_2#-EpM!%y+eO7kC0gvEmUGiw6ffRNY5ls- zOL@}t{RXivDK-&lWfvW4SFCtg6R~~gtM+AunOx@{9cW}`_j_=l@%In@5AyX%y6@h0 z@1B#soxfClI!KCd4wSt5*5cac4|^9GU4B%zcSo35Lg9l0oH7;#C?pFXNCZgkP`kw{ a!SL~uPzJ}-3s-^8WbkzLb6Mw<&;$VBc4B$} literal 0 HcmV?d00001 diff --git a/images/Touch AF_rect/camera_focus_ready_2.png b/images/Touch AF_rect/camera_focus_ready_2.png new file mode 100644 index 0000000000000000000000000000000000000000..551521dfdb2aef69bcd43f7ba31d5c31dd654a86 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^en4!-!3HEVZ?E47q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c70vNcNTK#2?zc-rM{x`~3JGYjLPsXB=nf)Boj`{CcvtA$F+-Y2> znYBIU`V_l=4hfI;$Q)>7Rxfw}A$Q%D;Qylj|LjAvpK9lf`Q`vc*^x;|6H_V+Po~-c6)pC3aSW-r_2$+=E(Zq@hd||@R@(AePhaQANvA5?coybq zc5k%wT`cM460$3|6H_V+Po~-c70vZ@aSW-r_2#A_pM!&dL!kDf5-s*n%eiSCUYRGo-t4=d z;qx%nX@b(C;5tqji-HFSFh~|YkT}aa7iUxH372Mn%qV+&U~fzGcFXEAsp&hctLIe9 zRhO?$Z)9c%Duj~S*8(nXJ@Qrc&as<2@~b{Yo;+4*(ZH+@G`=x=`K*7d*>=buc+14Y Zu>4jg%kt~NtAP$>@O1TaS?83{1OT|5Uk(5O literal 0 HcmV?d00001 diff --git a/images/Touch AF_rect/camera_ready.png b/images/Touch AF_rect/camera_ready.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8e7f0b6ec678dde222ec157b5d4ac935f7a75c GIT binary patch literal 446 zcmeAS@N?(olHy`uVBq!ia0vp^vw%2@gAGW!DSr z1<%~X^wgl##FWaylc_cg42%h$E{-7;x8B?}2X9N;1&0g{Ua$c`N)aRt zx0rymf(cN!!sPT-!H0~mz6`z-zvgz$k7t=Na}1q4jn$;|*aW1|jC|ac^zeDmQNz1Q zSK6<9N>G#f>$}Bxd+VM@VvFsru36dH*3AfZ7ue(nd%gazjH~w9cV0|n|8u1;OXk;vd$@?2>^5xr?UV6 literal 0 HcmV?d00001 diff --git a/images/Touch AF_rect/touch_af_focus_rect_01.9.png b/images/Touch AF_rect/touch_af_focus_rect_01.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ffed3cd5fea31babc87c807b71a5cffa6a86c7b7 GIT binary patch literal 2852 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 AU;qFB literal 0 HcmV?d00001 diff --git a/images/Touch AF_rect/touch_af_focus_rect_03.9.png b/images/Touch AF_rect/touch_af_focus_rect_03.9.png new file mode 100644 index 0000000000000000000000000000000000000000..30fe515a1f0f0c5d9696c2d31458cb1fe52bfd11 GIT binary patch literal 2857 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 Hu0mjf$R|w+ literal 0 HcmV?d00001 diff --git a/images/camara_icon_back.png b/images/camara_icon_back.png new file mode 100644 index 0000000000000000000000000000000000000000..2a655a2c94a2d708de93ef157bcc3993fd1ff1a4 GIT binary patch literal 4048 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 literal 0 HcmV?d00001 diff --git a/images/camera_handle.png b/images/camera_handle.png new file mode 100644 index 0000000000000000000000000000000000000000..f35088e2c3a80cfc8b305cad12ec1e05780ecbe4 GIT binary patch literal 8521 zcmV-PA-3L$P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000(rNkl)*vg8=yn zU>E`t!|;#e$X4tCK|cHye*{Q^APZmwa9~M*^WjZ)9MN(h+1f~n>rg{-xXqBmS>Do1 zEjJ%ky}Ucz6icu3yK<=A9`SBZuar<@v((^6b;mB;eZTfC<7^^ki|2swJ=7rRz|5z$EnJ?>+2h5 zudQDH?v+ayf3~=|_~z)?$h9cc{crX&^u3}y>!4YbyPWq=4m5CjoLQCO=*QLT=_ z;lbh2k-51Y2lnmT^O=Q%3#V6BSDrb0X7Rc6XWx43`qk^WvA%)SWH8o3R2J_&2221L zX_lcDNQ{n-VrqN}`{ws--@mZ;BX=CW^NE=q+ZP(mfr&tf&>Dk8rRc^f*eJjluw`gt zV6+B%z%q~sq=b+H5CSAas)bRr9@UzIgVUIrp4xRFJMh7U{rk?GJ$2?EPM=(S?#$xi zh3lJZSY5q_G)oZ$5(N6cVb~arf#G57-@h-q`|i6xc<9jK&rMIyd|+^RXwFy@v|25Z zCNZ+41Eo?Jqd;sx5C8<24XkB=-5Qc02$BFS7#2(dLWBr{8lw6DqDE5&VK6#9yZyeA zk@3IYwRi6)=Z^3A#)%WhUr5t5zH)U13ltJ@@?n z!hr*y8K0coFQjZLr9`*WM%?Wn>9(P>6wDeV06~Bh0fdn5dHItWfU&S(7&fq0!!pBK zfFK~lHtLN*)EiA|4i1I2W@Bdiu3e8c2M6~}PtW|@$jIn7fBwqLm(DLQqt$A?H-MP| ztqmIWI`+)ZnXP69Lv5bh};b-n|R^4<0zYZ|}Y*w{PF^yE2f?t@b9moet6@ zL6#*jRznDZD2hNNAO%56FHAxLBp~SKY$FDQFkopBScaAs#xj^)uo|O~#tha5HqFo& z7(gwGn$z2+KmCCRJ}@ykIr+6yCr-Zd?0^1>WhsB5EK_LI8N(wZICSXn`|i2--mj02 zjy()uxD&S#x7$d&U07?uFc1U;QbGy|^5BF3hzKNHFy}QN>_p1}W)LKp1&A0#fMf^Q zS_91n)*7fZfzC2$txz8v#9(u%xpVuj$0o)nCPEQ>9>6c&4X}8-`sx@a3=a=u_x$|c z`MrC;Ix;%;31iIg=H>=k8|&zH+t5}6#E?=V3<4LrL=FpiF`+VZnf>KIr>v>|9-`t8 zK?ETsLKz?o0+1jWHi+X6S{v)w*tmf-OB>CBp@-)8?)#g6`ulI(`AY$Ax7%p7T4=Z1 zNYfOPlT+BUXYaN<4;}j4)YRl-42w8vqtn?$n#3?#dn{Ch1v9|pp3I^I%S;8(d@(8i z835<)1S|k1cE3;VC)Lm+B3NsYB{904EyQsf+GH3T8+qu!frEek?SKE*?YAA$hYufy zkOHl(7PdCGFg-mJEgU%b>9O&#KMulRw9{#!wY7n`+W{=Q+L<%S1dAd{d-Bxd?<*aJ zYV}4J{DS$#u|6Vf9u34`SXg6W;;t)51Pl%i56sQY{o(M?@Tq_K$G`jAKl$vR#_tOF zV;}t(qA0@h@&z0}ejLqaOoKoKignLT^=Jke-24l{GT+i9cI-a?Y5PC)@Mkz)fn3wdt35Oy(G z+JfE?E@BiU{6*yQmdGyxm8|E9U0DRfK$~|Hn7~dDpuF zw#>+s!f*ceSTG{@&RL31yX8dG7)(q}KCo|L;ZuE?bu-|xi3yBPP2u^UJh!_R)t>-p zS}Tnt?jp-lKnMsaAcQD|$mVSN)`AI6YuK@F9rMNl+AxguCXyL!UG6i;M+^B<#9(W^ zis#DiLdbl-7k$^S^ zaqR4`HYN}<*fTgd_*g&7J%E!W#WPQTYf?(_NiZ5prHGR*lu}^ZmxFm&bAQ}$8Kx-J zmW#C@&yXuS3=6hSb***Zvy-`k-4d&R2#N9|2oNL+3mhjg(liBICIUY7>@(k*eOthH z-Sd7LXg2R6@V%C;%#=c!y1p|v3guhaQhCXTWd&T%pOt?v?k566fZ_5`TLY~PjA2-V zg5e&-o@pvdf(sdD>pVF#RF)xADJ)wEL5D_%haaf2-0!qxqh5a$pq*N4O41Z*mKAQu zvMUzca;Cg6k$<*jSCY6a<_xC;#^z52azEmi-B$+!yyzxL z>Y|b{9fr|k)$&^fOkeo?=SG8C_>f_iS(=i{G8kk0BIh-=sDzcgs=)OIfpbx^@O8B; zLn8m(JYcL}6rV6ui5w6CY{6{3pt-4u6Sb<+JJ7~hD3u{gQ)pvQi^328)mNXI$X~Q- zJZRVMojbKMJ5!`clN373z{V7{vd0fw>kTh@Yi6}p`tTQmJj)ES3>KB=7#|JB0TSMS z7m>tOL&hL3O^910>Ir$a20BwnWeRe+Ju@{mxfj4S0Hz994h;<-Ow)8kDFvl6D5X(M zHM#6|2yUg_!U`uoI5#vn;kSO$ckW~13S>^rFfFaZd{Q0`B%wB`)DYs6ikx|JvY!Pc`SKp@U-fsb1Y z*nGmo{!i`}vlb>(U{)X@0wHJ*fEs`}sEAk18ao|#V<`ks3jzotK!}1o7S0|D z?|Ta?&qX@BJY_0dM4xxW@KI8}r$yCRczr4gcV5@nkAb*sOuXsfN+*>kJ~_E}B}yAG zgS0X;9x(L)PBS%%Oj8(21j04n@a~71AuIstYHltS>{)UEtPAtJPEtPHMVShfw=R2s zs#YQ&&Us%+u5S7CvYdBIc|=&3MwZJK(xX>OAjle+g(Xob!M14NQLt1EQ{MzquixZyS__}9J-?UdW1iEtFd_N97G!N{L(60a zTR>$BahyPD6ZstO1>Ej*bQlUmCV({zmheS14`Ja;3HS7?RcmR%AU4GiuxKiXz(T=(IAzp5b0C)#xe39n76CtYf++5Uf1{cp^2CQKiqmii$ahxg-SX2SaPP>&h8g*7- z1l=%@K|WUHLNIa*iJtwPiuuS{qiT!j`M0(*;_3O7VwhKir0<;aTF%9Mhq@{UVkYpcEGF;b7U?6lh(#B8-T z(AK!s^P!TjcIk3T+gMo1N||Bqy)2hrIA`5f7%ckdN(*^Y!|yXJ|ID6u;j)QfYoXaV zTWk!calCP>nHI0DtzDa)oi&-(NV5!4R6`(zAFnX1Adt=Z5tUj}6&lZgw~$2Dy3LS1 zW1F(9RjorIw9MswTy-ke zrIgl4(hT*wMlB2-IPZr=p_mrrhjE4JsHihn#0u13#!BN-9o-^-@v4Qa{=6sLZQ-YT z0F$e~Ntz*33fdU6va)hHSJ|LC6T5in;+0gTolu7pX&OK)1#2U>8(6p z<>ku&Gyq#=Sg)+CZd_YkU2N2&T}hfEj#Jd52tgnrCBRk`C4(wcL|g0^u`>#J=Ry`H zAIwo{?g6KNx#$U7$x~5=YYv#L@imru*@vHh`Bv0g1EVdHBtsG>&?>{~>b18nU%s-| z57+=u0Fuj>uP)8b%_=E%kYp*PSq2DaLSP-ULikNFKVzwmSj*Bu-eVS=ZBNbSzP%^z?Vu`^AP?WNT3El+ z$;dK=Byp{6tJS@+xOjFEK-Uv$syVCxbT41Ia&>9x+#C1ad-pb_luVKoVJ&o%O5YnZ zGgydX!;3vrAaeCtpyvnzRY6kkd6E9*$w|%o25_|#^2WkXK+2(?>%^2cNRkwpA4^@h zaN+pHi zOf%gH0)d;*S4&t=(e+_k?W+6)zcdu&N78KO`(j26oSt!ojU_y6F}SJ z{UAnyd=JDgliQGwm zI7tzwsk3Xo4>jzR(HQG4?FZ_n9ITuCzIudu_}6^65sJ zW#}devef17$&)8foIiizydT_ccwF`-Yw2m<0&pF`+R>xOPR`6s&+Ol~_duFufr#A} zX&vkpIO`V>Qd|7p_b(N+w;yfnv+0>Z)_&ktu~ZPLZS;EHf{i zTUvbewb$PSu;u}8=J|W8GalO0e;vS;Znrz}(n~)-HaR&tKD}+*j8X=vR3HHaLPAK{ zlau)ZaCN3^`#L15cGA5$%&(Lsjp$#<)<<6w*wC8Q5yKZoKr;&yTj-?W+K; zc))F+t~c*IJoS|)*~|AjfU5wmUcP+g;*ldieWl%QZ!j~I*2ppqr8JCEFvhriG7L5h zs|~C%eqipy+L-dP{_6kUX!opQg5h<-7&naYd29ViKBF`;rJ%HiWs7bcZyh=E!pqCc z7ccmCzwB|O)iKMhPVs2JDk}g+0gRkFb-EcvQS|uleEh*692n4sA%ve!vhj|oGP7oX zGN-cnRvu9jH=W{PYx{>FPS6VRqjJpS^Ol)m4BVwn`uy|Hzw*YhH`!4l`sEA&hiZamjEmSSUGz1*wS~u_k))7?z1tFQ+$7y5xUp_tbz|+u>i53?gQIV}@#ZBjQp*6&dv<$r_Z`n^eeJ7H z<%+%OS$+$^1pwDio;-c|+fP69@`>Xo7KMPR)oZBN8>rRm2x=ij5IAQ=ehvR)6f3GgT3zGZ^^T}nH!Cp4&7Bt z#ZzB-63mPs2vDol@Z^`DlAhgd0QLen0AM$O$$^1^p$|Ry8#^ES=x-ew8y_1C!_WLrdl994REiFhCHx6SYDH5K{Uhh=w=UH@ZLi(SIHP=?gzw zZnfH5p4syN&Hy;;+3nnl-P<`_YJF&5tGuHHU^<Y2qc6E^ASJC-L87^e_lF!HaMl02ecSV+@5Hc>0$=*lmkB`5^b~+yp6#8U`5^$c!-o!yJ^GPH zcHV#g{kz7;#~VQqkdST!#MVM(3R#xHSPjdj*zFT=VOtAp2>oZm`*m#$HaFJeS6_Mc z;!pnj$c3XvkFEJoZF>?fRMKs=!Yu#FfC1#7g$F$jV7m|PT>z$i`Kkj5=H_Obci(l_ z*xmQsGj;gTo!f>-h8t0>77~a!ANAhUJ-FT)05YxA=H^y>^2Ev2*Is}9+R>v&Z(O{1 zsq4#2;!Dkn2YKG-?3%Za?+Es`0SiI+;uoLHK}P^aJkTAU=^4KegZ}3M0Gghjj^^ig z5A2zrAD*9|ADNw-9hev&ZwwALLm33pXl>f1_6wDuyX)r0Ze$d8x`R4rt?Pca2`D$ zC{}=WJ*YKr7q57rYkm>bJLT+q0XP>~=|K&7cDMO!(t{rIDG>Rs${f7t1D|hH^<>!b?z${};fw0$%grng9m;A`JTPn_k#*wy7^ibFewHZU248gG_%NpzkGM z+~R0-;F*jnSI%xVuk(D($HZ9$T;?x*yMlB(U;jG*#^6@{WHT?x00000NkvXXu0mjf D56B-G literal 0 HcmV?d00001 diff --git a/images/camera_help_image.png b/images/camera_help_image.png new file mode 100644 index 0000000000000000000000000000000000000000..a8749d7eba8fb96d11800153f32313a81292a87e GIT binary patch literal 23382 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 literal 0 HcmV?d00001 diff --git a/images/camera_menu_bg.png b/images/camera_menu_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc1362de961dcf87dc06c193f8bff66808b1469 GIT binary patch literal 3415 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 literal 0 HcmV?d00001 diff --git a/images/camera_menu_bg_press.png b/images/camera_menu_bg_press.png new file mode 100644 index 0000000000000000000000000000000000000000..cf07a41ef64c48ee1799e4f5debbb8ceccb9dffa GIT binary patch literal 3388 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 literal 0 HcmV?d00001 diff --git a/images/camera_menu_tab_hold.png b/images/camera_menu_tab_hold.png new file mode 100644 index 0000000000000000000000000000000000000000..de0c3ddc7751ac701c2bde1816fb148a38af41f9 GIT binary patch literal 1692 zcmb7F3rrM87+$3HiEXV`v4U()&_?BU_l|olp5$)tPEWc(59H2R3CrDboUjjf_j(7` zDkvl-)&?6Njf%BC1419RXj6*>tCU7DYHh8GLP#*4il7k_MCt4aXc}YENp|L+neY4l zfBt_ayD=ke(ZuoZkB1;=qJ6Q&0mhHzZ|rE$ciz9~0>gC4>XI_Kd?`Q)G-UE{c{FTi zC@<}xDNpgL7J2~$Mb`SVT#}3Y5O;Hol9DmXAj1PT1T9Dj@|3%fmf$?v>tl_I`@fu2 zz&?*r;na{Q$rE&eZ*hr0XO^U8xl0P&29F|TA-o`n0|ADXC^*Ozu_7KcD#E%ru;pb$ z0f!+{p;7TXC>NOl6P!T98YP8~ zcoRJNxWi%_@&#r_MS&#oID!NM0cAj~q`x%;*>=vWK@Ar9dokeH081#BVMVPH9hMCMJg0QKqI)fD~5$a)qmx;ia(j#+i zTC*0@f@W4>m=!ZSl|G3u4|DCTC{e7NmYvF6-wUqhwOpJKXiDOQERHK0 zzD*egoWzL*91jzjNwCw$dbofn7aAyogIZ|8_X+K>2^<55bB_C7;a#g$VQQ@j#VlHt z6~i#I-fAPXT1^tzuqElOiXpD&f2Rupks$INd+E*%FM*3JnOh(=y&4Q8%;Dvpr zo81OMqsr|TQ&#Zm-8NHd)<@B2dXvo+RCFaAU1~Z$|8d`&=4s}`_ck>aOzQ5RYA%KC z8PS#Xl^+a@YRy@`BqP3}bo$2iWjn7u#J#!r3GWZ950L|LL0u-rXmi#1k;b8o}(35;V`DjY~=1MN~WzYHC$;rC)9UXbLdtx0|^Y`VruS#pq ziz%rq16PQ_>vg$Zr#Gc{_pmK-`jdYM`b#Z0n_KUW^FBRMnw}IFBAb8L{8X`G?-g?3 zf+1&ia?=EIm*KnA15=|qqprm^)V;0yW&#l!%^t`*c;~{^iqg0c;gmXdm26mc+nw<2 zrc2G=Z)+%XF5j~H+rD*?Z|Ngq_)+?H*=m1-ZyfjBS~s~dVorE%U1S8YkE8S^7oq-1la9gy`DXe`59^tzGki zTQ_@;)9p)dH8Cfac+W1Yxmqct$5mOUHB>td+2apoKHcB9=uTkb^{$zNQp1m5-)OGO zsH(oy+FyRg)pYu|#ZAt>^=N(XpZCV)=S)qXIrh|p3{APtEX#1)LwS&7UJ-XpSNCaKJsvWj&k|3HD~)*4jjDA)X&-8 z9Gb$GKX9x$+znDy+n|4EW;;`Tmwfc@HnyRrup{B(!F_Afn1O^wXvHZkxBkZYI{ANL Mx29R@%(-R%0ueQN+5i9m literal 0 HcmV?d00001 diff --git a/images/camera_mode_shutter_icon.png b/images/camera_mode_shutter_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..10b2004f16e1e01ba9e0447e4e7536019225b240 GIT binary patch literal 2249 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 JPDHLkV1nKcxkLZ} literal 0 HcmV?d00001 diff --git a/images/camera_mode_shutter_press.png b/images/camera_mode_shutter_press.png new file mode 100644 index 0000000000000000000000000000000000000000..8c963e6e602b039c2e1a4c9a947b377787350fad GIT binary patch literal 21089 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 KMNUMnLSTZtSgD-= literal 0 HcmV?d00001 diff --git a/images/camera_mode_thumbnail_bg.png b/images/camera_mode_thumbnail_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..823b3ea2d6b006da293054e6183b982291676704 GIT binary patch literal 2450 zcmb7Gc~BEs8jnT}8H|W9i-=APGYSYvcLL;CBZeeMfFKeS97POCLt02W7ZAXOD6$}k zuI@y@lc78S5jit}AW;TSE_GN$jSdtjpy-Yxo}k-t#PJWy+Idy|z1Q!3zu$Mh>fR9& zymFS6qZI~&nZ@(xgral2>9I6NOmNQ^p3sDv;qF%k{oc~W646bcE& z$%@O+G7JWL3J!}=QsbkcSXjm+JUP=sz{6rD zA>4}(@a1es0{f>ZAwf!Tm?$MqL>Ci$mgARc7$|`hQVa1KX}nCu&@c(_c^T;1v`r%5 z->azOn1nx^ir|Of*@zOtdl3N-5#SBry+I;K@uX6z?szf)0wjP;0?8gAl|dmh0094C z5KwDMaSS7r8WL&goFfG%%F0pTn?Q^W0TpwTmS@FzAQG|kIbdg zx#$*~GDYwy5Vb`VqgZdim&Wy^`*K+nG6-@3I@z1U1pzi0@S*^I9QG8JCsV0~G7)4l zYQn;QVp(6rGT2H;s791w2ogWlO(7CQji@Au9M2Yb;lp8>7)er@3XL+OfpQ=voCt~i zl!z4nKIaVhbJo3B-e`y%3dm)dqNZ`F9IhV)r1^5_UM!GC_<$Av<#dryPe`U7`=sZl zw$Mg4EkE8M^yT9ngk)&Rl;{n+WOv5}gE33xaaduRTaONP1TGDCxDZPg4b;`Uq=lU4 zO7`pvC2=Z?lGb#))yo$d^|{->GE=Ocu&5qBZWoYxrq+L~xI6D(nK>S}pvlIZeP2bh zD!CKo_se+g1%)H@*Sng6Z7K5vC!Zz%I<#ebA@%{a>vC%6{Sv)&X?N>ti~zIAM$6iz zPRc4PE6}C76(R=VY@=}DvFgx-x<#{NgvZ7e6L_94l%C_Np)h&=<);bnoui7XU69R=H>8m9} zwDzs`n_;;0$>^wKd1>jZqO!8l9hcnqG-<9rEe~2;lcv$oj`)9@cI)0fA6ujA*PU61 zol9PID!$>{`#)@`@vVv|r#Rt!dOgQLo0s`Qht!&yntSc&$hi;ZdNy<@_IKP!Ic*pW z{hOnc(?m%{#pBezhUVtU-hqLET%ArgzJZt@t@n17`;Y96$eTVkHui)=*h2(&Ke=)? zGc%KP@#4kwIXy=$N9x0^_m5cIP*}J)=@yqKZp05=GfuIH6-`C&YzbYv)@vYrtdM@oKy`z#dXjSl7QM4j1?qSjP zI&|J#w9lU2ukw zF;v+EDPY+3c5m;A?457su&xIzSn)%RB2n!pQ$EMR;ch9@+!pS}-W*zHcObB*t~WHY z=$G3I`H|8^mbiOAK5&Y_42{&Xh4Tk}@wtcXUMU=W-d(Ahfvud#SnAoexoYRJ4ZjIu z=FhxfJW-H#);jlGO@BpBWBGt#%WU&WDh^w2VQD=bury%)4~fTMQO&hrS5 z!p!;GW(8}kzBepQUX*NK+4Rpyi`pwL3wLLU;dT3(s(NPz zHuUS0Pvho3sr?W1o$ZdMw!>!{`_^0Iv`|1hoaIg_Y}YH3se0BiZ0Ap{?yW%DzC5%z z!70Ilil~b?-GSfCrXRViL=a@1Qb0tGC! z@_5K-cE;rEnw`>!Im>T&QqYbQ6{oooJP4_Cfi)}Y@BVndqai?MHOt!i8P(Hs0{?eG z=`XoPqw$;BI9%F+f&vXM>Y`4knDfHkVPm?$JwtkaT^Hwfb|3n2e$h5KI9OYW*<8EiwOd4QD_O`D0b>?*$g!$(wV;=cFNKUBieZpry^QIOF)&S~DGu>4qs0 z$D9f`-0hB(=|QvEfyp>kY@Usi`7{SD>qXc*O8^5lvMx0Ab+(%Rl6c%;PKEELZT|yt CN8ob+ literal 0 HcmV?d00001 diff --git a/images/camera_mode_thumbnail_bg_press.png b/images/camera_mode_thumbnail_bg_press.png new file mode 100644 index 0000000000000000000000000000000000000000..2ac7bcddcf310cef909cb8ddefad0848954ff3bb GIT binary patch literal 2368 zcmb7G2~-nj9uE&ivEm}-iXs~VjmnWs5+Mf!Ofm_?G#DbMcn!$_QIbg}0RmM~xgP4G zmKDm;S{GE7!wd1E$V!nyQ;JF}VgacFks{m00*ZL-#EP}=weH*Ry_xU({`3F+{`Y&6 zCk+j@S+HaQ4u`W5g@7__PclFAt+4lj_^1wS!|Mgn`gKUWJ{3Y?99MzF!32>CN`PfB zq)5}Y!vQ#)WvwziS|2U>kS#}4WXP;THmEch8ixxAGH4+AHds%HgA?j5Q72<0R}ckpn~-f!JtY~>(~Yk@f9x{JDbH6 zBH@*aejA7Qt5eYuDS?lmFu|7$_{af2fZ#_ZQ|YT142Cy>22cSCK%-D;K2!#qPGbWA z;q@Y7)=)(}TLubW+rn-fVxnHJVN)onsj1{tIvGI|C{z}UW#*vKd@v0kU7A`C8GO__ z_gMxI*2z(&Mz2KF1T!NPha~GcM9kA)Lr`gC%7jF{?hUzG_c~cv+9(D{L!puZ3i?XN z9N#QTB6&ALrFx^S)63xBoc}|9U3i)XrpRC&l8nl+D#p9NW$N9A%!;pLU`rr$8;n&^ z2qo#@S05x2_FBw&r5Z{C5qYu-R_jF|hnSqKRInK!LjbavOg@dz697~ym&fJvg){+! zCBQ^{`YgfQK+G0dfnoi4OyMdfz!PxkG%8g9@c6zgK7-2=GO0`^i^`hCiqtwiq?W^G zqh_q~H!Sy^ST-MpAw7bIBS_M0H%Su_J)%oQGz9)SUqX~ptw2(B=0ao4SfC(`DpO#E z5JgmkS2<@Z|H!&8*AEL3q*Dc4bJR=$0~849R3;B(`EsdD;%ltp|4tVL^MqpVvA23| zR)jUO`S@mnu*;hngw%r>Rcc-7Ur&ww=tJ^! zBRZ%KwH8V}$0MKa-BYxB<&$|?yrYAZkz@72A5}I^KH@DRuAjIA9&_E4F5*gJXO180 zPOORP>-cxd@Q#EZ(h?Z$@eW~6b`C(P%N0&jb)DbPb@-n1D(e6jo?))76=5N>GA`5G zXz+S$zaAlc>6)H14G!m@)!1zJcrW!__Gqj_>ptr<(u=ybUnuQy5NeW9v|EpyHH1M^ z8Kz1@h^1QTx4cTyJdpndbB5Gxh?xjlY!~K8O&JTxJl)^y62s2(vg`KN-|7!rAA}!n z+k3og&^hls2&W@S34)Wr@|}h-luBrSqVB(TU^7@AV{2jfHz2{#@12(6G6- zw)Qy~+8J_vzrU%Xn48t;4Gf!11$A|GoozoOe>V=9Mn^}3H#Al2GEaQ46aTM1`4D>P zF}?U3`{~=Kq9P-&RDQp;sbI>D&e`DMbFyYU}2t z`M*SHjsE`rO;U)@=i|}mA(a;`-}|V?$FBeA^4#298&X?4u;~+P=tcIjWy_w6md2gA zO(^XYX0dARSA7|Rtms<0CI@25Z`IqXpo3YbU8@Bh@m-2*ZSEw|NImZ8)U<70>EV6Q zKW;yWEgPfm__)C*a8B`mN_szR^r^|_MrKsI7Df#x$F5v3w+%4z?OJOFZn7Iqu|^>F z37hcKqDy&zb8#1z&s z&UdF6chmOwc2!+3$ji&S;PIGrgSIK-WkuJBJ!fml)Q0r>AHE` zM!sYQ1_my+k_=pZ@ZiDy@$vD&iHV8aaYNZu_|5+QezZ2ypL9ZESLAIhQ{R{*!yo&e zVziwEwU>iD8NZ(rTFZCFp-0`Zv9TYZX;-s+8(@6$Q1B=25^cqeX1P{7u9FRI2k&tr zA_}Af;+uDCBS$Y_J->P1wR>H{a_zTs>Z4PXW!_OalV1Bf&jAj>#Mb=9w@zyAFL@Bq zO)Iwl)cSHa2&g|WPxMe|^;nv@!y(^Wuwr`m%(6SZWz`+cwr8vEx5U^yS#1(4 zbukW)DjnTA8f7g_K}Px6-eg$Rcr{ZJx@67Fi@W7xZj}kywf(&GO#eBfd;YR8Dkm?( keRYnxLo{orqjp)~9IBU;=k)bjnEz=+f>7`zZ_A$l0xQI|(*OVf literal 0 HcmV?d00001 diff --git a/images/camera_normal_left.png b/images/camera_normal_left.png new file mode 100644 index 0000000000000000000000000000000000000000..3a56573dde412f68d69883ae3590519807496cd7 GIT binary patch literal 2210 zcmdT@&rcIU6do)PKuGW;7)^%dO7~aUmff%d?Y2_m5>lE_Z)|s`bS=BH?hbar#1On_ zO#B--8>8`PJQxy9^kzKzHxS|E$%C_{EgY;#_vT#Q%;bIFyzjklp0BUnnHak<1^}2S zu4*M3j{vyxZDg44uKSNa(=bi)6|#YAq-ppFtXQ~;V9_zQQ3)B=-ovkG5r71=%N0`5 z?V$X-$2FTxwwYqFzs(7< zEJqxon4}rWV9zB+m~?~L4uggQ)3-fhV;4q@MiuW8m7$fMOK`j{tsAu4L>tD1hQ|pk zA4%#Y>iWM^9jBWekP^D6_pii3dCx;!2?co9H|gMNv(ZzYlJk*4uwTY_r_;stIwm-% zV-MywB)Dn27H$TuY+YB1Za@szL`6+yD4w-#OOXo;vba!4r_&it5b{DctI2sOlUiBG z7NndccCZ>YcOB%C4%WKBW_n^HBRC#?Swp`42w4RmJFq2Kv3u7t-;=M6wR+bg^~7?t z7%m#?r7?G|sCS}m*R=G|wLNmF*L`Yg#{Ss=U}&nSt(3zbC*KD~0UQU%GruZN^Y2cs zJh(da{>9nv*RO7Q_iKgb+nFJ5dNNU6=Hc*Qzv0ut*7EqsaEvfDIsRs`1@UQFKg(qe~} zF3uvj2yQO5I4fcu#YMqM5L{e}BF=*Na$oIG3XVd{AL7} zHWw<+X4A>L)Z7hnHc_yE50FhJek+KTq(F6b6}(Q58H(&eP_sbwf~s1Jqy{5EiZq*X zScxSij^>1HE|;4jd6r`tmS;FV!{ro#S6G(pKNR*Bxob*UH~YTuu0S;q3KfRwbUJiL zpkY*JxO_gJYVdppBQo(ufb1j_#M1)>9mG!Lg~)>enJU_=u#E~7jSiMp6HzX8j#PG|W35FMj3I12tm{kXCb0;UXN*p3{0i)+)zT%GPH z1@?1LEIVofe2b>tib3~-Whu9D@LpiIbm+8w5TKG?pxSNERdRaH(DSma@tSI|99L9} znr8AwE^pu?O&ACqCt_c;i@BjIbMID?f%-q4M_VPqvM0|%r| zQ?7T!)lTIqS_EtaqY8wrK{qWnAcAoNhNQM6k}F=|!cLrCG*-rm>LBvgfon$4C%ZLQ zyc4`@oG1#ajJ@l8nzbsbvMflFA*&{9WKF8ib^p0s4330Jd+b=x4UTXlr_134;mvRc zL4dC;!V~uTTI-M?Mun1ItR$bme=J@i*zr+r-#mQ!=gXa``;Yf_t(U(aN$rQ9e%bZf z+ljq{)Ml#NQ(YUo{$iwSwXx-{UG4$)4t9EgscIiEa5LZ7#_E+Xr+P&6$K$g!GqmoCh2anp=;?TSzR!-Y!_V*Lepfr8+Mb4$*j9A z2yOM^r8jT-2mGv8Jy?&@i(Wj4;15vfMd;N@+^s!G(R;(deB^na_ha5SZxo?Z@ihPsOP!q*&w<~mI zfkX`v6$*t!Lz1!#k&TxEYWK21e14!{;Mj@0ka{HG5=DD~bZC)hp8gKO5363IN#kAd zAnqrNrA_SFp@;-1MkywVZ@{vw{TaT$i;ig(|8f4W`f+V3#9|f4q!T&p78lR&F}1&; z1lW&3v+Ssa*)5jsc8t>(mZe>1&U=B~Hi*;laX>3Zk?(XoS5pkdGzzM!OM1zK2u+u! zb-gT^O2K4Dx;zlrOJueLmvLd<$jgQDgdw9GLMButwX7qgLR2y(sKWub62#OF9Gnh)Ip@sky-sE97Lk+d*uz z+k-e@R~E4jJHCGZA^^irE5>xK_vOc@*Czl6GKfy?ym~Tx?){f7<)?e$mcQ*@`8IJI z+?XF>sbMV$K*ZOY>{L0K9kEO#lD@ literal 0 HcmV?d00001 diff --git a/images/camera_normal_right.png b/images/camera_normal_right.png new file mode 100644 index 0000000000000000000000000000000000000000..96156c61039ae774ddca1dac04cb2021f18af818 GIT binary patch literal 2203 zcmeHHzi-n(6uvekv{fs$Ftjk8ToxqaUm=NX)wHRd&`5PurIDJgb?j?nwe}hNO5C!P zF2KUXAHcwj*Z~y;3`h)!u>%8Q1BsQ9bDE?K1j!a7x4gU4`@VbMd!PMawR&@M{PH*e zV6w8T)o6SS!0^Y>G~Lbkciz!(iIf^-4R4XQ;UiGAa1+6bV{D@uGOYbu@6kK}DQMRl zq@l0KCU#gO%3(vtqi6u;7edc4cMyS1v~9Zz^W*t318qxT)^j?qdn#(#%LhJMJE+#p zgB??{n1vf~K9nhegNOk`XV(qnP+>Z}GTlel90NNkWJh66i)!erP{lriIhN0ue4dAS zffcgX3x&cpDDnc&@ggUP8KEF&MVaSecQN!e-`bLETDkicJt<6!5Krc~cDv2Cvn=+v zIYE-7h(i=JG$Rx2yTk}HZZOwl&`@CdwnuF2!idpm;yt1;w9-=vj@PGkgKnE>!?@7! zIDzFONxei}|9h(A^s@s}Lud8=kvORDdx)!{0Pp!G9o*Jj^pq#7J~9aQ>lp9$y13fH z1P3kbL3J$$*KOCr?Vyvb>vF{nh~b*3qA3i;v$k!?MJcyb$mUD=d_fb0l29y`RW&b& zB~i#qk|^}B8aDSFVL+Vk09s9(`FuzI_{6Wgk1RBUrWv*P;&O>te0JwP*ve z94&^6#`@csdsoyu(Y9||dg$98xzy`EHT9FP=bHeWo33cZdU*2vQ*jzV@aEawg%4j^ z)mI}gE{wf=c;(xPlRDPNc$gkZH5X%tiP7}i!_CF`;r`I;!`Z2cxFK~kB*59J_#uI| zZZqO*i+YkkTelhUwM9KiKLSbSM>Qs!UviDf=GW1f$fAiQ#`WfznUhIuF8==v2mgis d&1d*o8lC_fE8|yZe%`wX=&F>e+S8@YqhB+NF+l(T literal 0 HcmV?d00001 diff --git a/images/camera_option_popup_anker.png b/images/camera_option_popup_anker.png new file mode 100644 index 0000000000000000000000000000000000000000..72660922b2ae4403a864bc35d63d801e6b3cac63 GIT binary patch literal 3117 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 VU*=UmN1%_kz|_#npbFs>@h{)rkS72D literal 0 HcmV?d00001 diff --git a/images/camera_option_popup_bg_2depth.png b/images/camera_option_popup_bg_2depth.png new file mode 100644 index 0000000000000000000000000000000000000000..1012ffe2650056e26e288f40f9292efd68a90dc5 GIT binary patch literal 3130 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 z00012NklN literal 0 HcmV?d00001 diff --git a/images/camera_option_popup_shadow_01.png b/images/camera_option_popup_shadow_01.png new file mode 100644 index 0000000000000000000000000000000000000000..a1783a45f461c20f7b46b34613bbb619f402a0d4 GIT binary patch literal 10603 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 FV1iadR=)rM literal 0 HcmV?d00001 diff --git a/images/camera_option_popup_shadow_02.png b/images/camera_option_popup_shadow_02.png new file mode 100644 index 0000000000000000000000000000000000000000..6442457592d730de76eb70f36d9db2ca3ea5586a GIT binary patch literal 9836 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 literal 0 HcmV?d00001 diff --git a/images/camera_popup_ex_bar.png b/images/camera_popup_ex_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c5d4dbc06f28ed4c96ee02c44b6de1e5ac96be GIT binary patch literal 3130 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 U0|C1b$N&HU07*qoM6N<$f}(B8bpQYW literal 0 HcmV?d00001 diff --git a/images/camera_popup_ex_line.png b/images/camera_popup_ex_line.png new file mode 100644 index 0000000000000000000000000000000000000000..278ca1712a86a9b07a2e592890f83311114f94a6 GIT binary patch literal 1086 zcmb7DJ#W)M7`7Btp^6SHNHCquzyPt&&WB^Gp|a054XR6(Mry`h>`P)L_8I%qxE(++ zAXV@$5Mz;;8DK@?7cet)f*A>^oYN%jP*uW`eII_G=XpPmcebCbt=?M|1YxbUX}9_6 z@^|It3je-1I6dXdUFLMzF72}^PKjU!v`0WI!UNJKI5>R%jjRho=_KrQS=ZY#d>To( zu#xg8;b=iv-^df}j|c-jG6>_Q`1|u05rjcg+^c!eOAr}`n@1_xJ=*U0MLBnG>$VPZ;CTsgYS!LSp+i^HfoCJPIbK@a3HFUQ&a1%pj8KMfNW(ijwsxJM_fDRNKGLx_@gI2f{QNgikOWbw4gIZk9nf^s^u zDdJn8Jnwo$6fLbY)+QIuU&)_!4ih4`Nk%8B&#TzKe@W_kp~7$;gW=(HM0gclJkH4M zhvym3xbtC*$2RpR5s6vLZiW(;a?=Dhq5{o8a?xX#dTw#W8@bpnCx{=GGe}}yvXoEQ)1UDjKAjI*w%N&l z^!}cmy)2a?;pF>=w|};7z2C3yyQO~ddGkvEUxkOaZydin{`9Jt=$5l>f3)^r{{txA BQ(XW6 literal 0 HcmV?d00001 diff --git a/images/camera_popup_zoom.png b/images/camera_popup_zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..03ebf299015155c5b404b16d3a6cba6339eba7da GIT binary patch literal 1846 zcmcgrPiPcZ7=I>GV{FhOi1v^SP70owqg!KOF#%71ph&Nv)PRaNI zzTfZr^ZUMUCnvrb8vJ+=05DWMf=cY12B2?v-~)C;;@~grI7E#Kog%ZeX@wZ%9WsNt zqGwfc30uzmmv`_O0R0!;a)nmRW2#L&!HRu^mKQKI0Au5=z_RO@ax=K<`Z<2(+6|s_ zog9B6WkNI1am_ul5aOwYiL$*=x3dmE{uwvcQW=4Vsl~OtIX_ZcIlj%SvU_Y6d9Lk3 z>p6Zcsfszt=_JHlN`MI)rXiP>1SvV1$z(p|WGF!q%AzDEq>P%BRS3Dx$FpdmGpm+R zp%aU}a(s=_Ko!Mivne!_0tu_4l+9*i4p~kxk3=-@Q>&Hmqr+VWgd;n21L_i=iy5sM z(x5q>Wx7^^7nIy;jYjL_e$;6eYn#}z0#Op67`A=l`no97+#2C|>)sJ9;kU`ZlRqlY z2UslOh%`c*sW^LhL#V9-#g3gCRMQIUn5kH><|5qwVVdf3mb~j*bBNdt5Bs!;a(tuV zI%)=G43t$AUDh=NN>X0S>v};pGFgL}^kkP{Bap=s9EKg0k&#D68p$XvNe0a3jbvVv z6+NxUN;(U>*rFd%%eQeHG{(Abv8gSwsvcsClCVt3Tz8r#YlM=hMgmTsN^vJ#-yzK? z7Md}$LJlUmeLd@nNAyuR)EH6f$w0Q_imTS zG7;k$+c0xo6C33Cy1qf|vA%=YXOe|%!+uy97TDsB6j8q1`uoYB_jaFy`;2=R9-LoV z{-bbt|Er^^$2%V$;BQ}r&sQfd+#Nevubv_&|N8CPui(t$*}c~4_ah(uTdCw;zgYh9 zlSe~r)BC{Z01N=I18@NB1YZNNZ+k{C-PaqUO?mV>%Qkrrs@;@iyMsM!WtSYl9oy5S zOSDPnUJ1U5{D0Ny^p)%W{bzT7Uwpavy8qIy{CBs0{%5K0LvZuy!TaM-krQZ@dIAIL|P8@z;q)l zF$O>e7}n6>9neM)^G57!4(0R?(S%Oa2yLPj$HQoXXlt){hFJiJ>;nU~o1~szxkiz; zm83Ssbw>9Tkhj+j`=DpIGiwePOu?esSCefO5feB78DzyNx`9|pQdM3N@55`FBC95- zkfh#=%IV#t0)0TnqfEqPS{bsHjk2*8p66GQ9K$j+!_h1kVR zB_xH52?84v>e#d!Aj365=rqLIAF#@-SW)qTfuNs-uvqV=?mR>=$U~1*dgA0J+qGah z2n&swaiA*j?H#~M`OqP&IT!7Zc$YLm;dxnUZPBD^)V!u7+S7}wsRvtW=_*uWPrfL7fpiiAU zABbmudLr$++0gMDv+8>DrSJA0YE&1!e!hA6Jkp;(9*jT!#d>sVYwzUfH;*^2_;2;Z z_b>d>spF?ciG@R#^%L#QxqIc|uCLE_(Ql3CV~Hc>do5F^m+orXf2(-^@VL9>kE6$~ zkH-JJ*sx?|&)n)y;xoLSo!_%%Z2RELMXx$~)=!T7MT@-`e${_OgMZ)sA6`qYjQoCg n>faZWTOVC6?A-jOclR9P;rbQd-ahc)pHN&{>r~Il+xET#Sj?fO literal 0 HcmV?d00001 diff --git a/images/camera_radio_btn_off.png b/images/camera_radio_btn_off.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac28c89edc0f3057626cbb938be97002dc8a217 GIT binary patch literal 2458 zcmaJ@dpwi-A79B_j)anXW{#2{_H2x^*$SJk}KHI~FU2KzyIzpvf;wN=n3Pn;; zhdPpTlB3XtUoN>z6p|$7lFP}NO6T{-uix`}J@dcWVF>+AD+PVRNF-zcvs4}m~7 zI_x1*Br9q4m4!;a;if|gl0`#kM-{qpgM^VZJ_xa4a05Y@1Dh5MQa~CbD*O?MgFvKU zEO)AqN_NK5xolI~D#ldA=1JHP2yVBCN27;=LRcUe%;MnTlhrkF7>j|2d!oqznMVMb ztUZVLpxYrAclx1FI)(w?y$gmDVI=}=P)LJ`*kK$2R)mLt*2PNptJerP>@!3diidx3 zib~!KBXId33~dUS&;bhoW`Q(CnweW#S{lPp01`j|C!3ZPqy=&#gm}2b(=Q>gdEaC?g0E?kBn%;<@eoK;U^S#QAesFCp=|ayv_MD! z|MB;K3Jct$cp!oT3b+w`x}fU@?ZovG|ZF5 zVQ?b_pV4G8)`24s(l~U`fry7o_@*ot18YVy$Dja$Ioiw?g+$sRZOi~OJ2YTthqA=j z+7W+R;}W^_2sX$Ou5lUvaM9o8t~LUjC$UTf`K*H=gT&{uVV?uWvcB&N>brVhxs31o zV)k7wLgEZ!wXFYD=CvzH@2qaWHLc|Et?faMq}Tb9rXJaDnFfJCl^lpR?xLP|IsQ!V z{n`!U8w+i(N4B$CEy%5=*Op$z3v{H@3mSQiyyT;e_tmDzO5I5>3HzXKM8oKu8_`p> zgH9U9^x~2;DcTqN_cDAt(d3-%f zszz+}^VR;ozV<7F-T7|HR|4DtBX!ked6M*{xP7%(0zRqL!t4sp?fS?>oc&v&=bYM>b{s#>R^q}G^)3)+R-BM}50(;Z;4b-3!+JxVH^U}vb4f7~ zqXS06<@cz@+2c_a4=L^Av#LIdH$_J?k#gZ`vGqOM6plQNN~~0N-FKwI>-lAh12WV3 zC-Fk=hg1s0+8^1PzEZRK28(Ks?7@MMz@bONW z-m#b$D!zWx!{r*kdX>JN$JxFSs^$c^&de>qgDQ#|Ij(xC>z@rZkFMl?%GwRY+L|m% z`x5lAa3|Vs^9SSsEDyZhLv9&7HNPO01dT69_SQ<&k2R}Bt6OW7^d@9dZ$%qu%DuBE zT(FPN$Lm!V2WR$cO6A`0k|TB68WtL;HKryIT%i}!9}+0m1=ho)t#v2V>Ixv5XU(VJ zVgFHmuZ^=_P#6lU^0B}jnfV|JJX~s@nod8Aet$mau;>=0WUo}NRIW1TKICz<(rC*m ztoyWjiUogBt18SRW?D2N%Q9jazw~j}R>=Q-LwHu%=xC5k(y_Sxa`X7SC*1_Gz~<~< zTV~~rN|CyhxPq>nro!`%&Ft2aLaTc!6G1g&<$(duj3x;RYDv-p+}2q!FqLFtzrLvT zc>3~=_DP*0^AQCDr@>=KEKr8qx|pf~-IkzCe8-&);kcY8>R=OA%^(woE)8n8oUAsRvD+coh672<4(!%S4Tx$>@^_3dQkR&g{#%RR4&n zK=17CY(`*H3)LTUUjf8Aro^{<<8CcLB2$)`&Sp35nqdwE=B5T=14xlIF;tTA6 zj_2`LD*ZxIN)9Zgq+E2Ui-H;Q=CITbeYASI3Ny*C4Z1Gd*Z=Nq$Bp%ribe0Xm`}B5 zD#uwFn$87ttsO?Y=54rLWx*aHz)nX6C?PtwW&Fu3s8v#H>=ua1vJ{=L{b7`JX>8|{ zdIM>JxIUr>o6>rmYHx3UG8iCblvwk4nD|4Ug&pehn?gM9v}F%!BtHx+?adq*o{lNr zsk|ZjR4@>CxcW#N|7g}#jJb=a%2lsnW%&uKmfuXDyvUGNSPV_rMY1|-QG4OFacK)u})kxM=1K9?)2;&np9*I&n>~dUU{P)@a7!fP?B)5W3!7} zyLKkZwR0)TfN_jl1^SN{zXYgtW+ue#Gkh^T<_C(aLS?pfD^8=lKxp8ZGMTt|fpEQ} zoS{cf+B;p@=8AWQS{Srrh;zTv>9!B*+PFno=mC$0O{sl{cpn=cVSSR6bA( zvD1qcs18{)6)4v5!s>_T8d1sBc)Sxc`M^j;vee^qCIS`j{Yo!=j;dcenX?;EdM}n4 zDby^z;`8%L!GRe1$^N@gLr?Fwn;dx1NwjPTW;6R{n;##W`7Wd&-FHGP{ihB|-(+Xn zrddq>a^1w}G!Gt6DAwK8a?>qmA*M_aVbF2jq1b2R_|52PS7y6-W`<;Pwt2CHteIK^ zJ=4`ZS|u$WdgK{0{oom(^HAi}cC#|WaXS&BBCg7Xq@XOVitT-mH81>`RxI6;eyjIk zy+P{I(+hn)6H9&ZB{C3faW~e;wc&LhM#m;Nj5(N{YnD+p_BP<(Cc1s=(pH4xUZ}Ga zZ1cEZ@h@9j(nU@g_N)|(r?=vd3~!0W&8yh|>;4`-V;kh)(q>kj&Q>j{?jL)GU^2+^ z22@d2(Y2Kl#IL$v=4^ZZ=W+XW`d-$l^Ixw3$*$w-ZhSetVfAmx!On$PW*ZRqHzeW{ A%>V!Z literal 0 HcmV?d00001 diff --git a/images/camera_radio_btn_on.png b/images/camera_radio_btn_on.png new file mode 100644 index 0000000000000000000000000000000000000000..8d86bc96ee8a1c2bfd5aff464dac9f86cb1dec86 GIT binary patch literal 3208 zcmaJ^c{r47A0FF~ts0J`Fb0v#o^9ex*~xZnNm+&&W-yDHu`kDxND?6=Swe(_RH!Uv zZ6Rr7m#vMav1Lhpqf?#lkFW2&uJ?VG>%Q;b^8B9b`n_jttW3m&WrP6$fS8%7p)Geb z-gP z(gNd2CBtxA7+5fw#$^Kly4YYE&eNB`1bYy?NfbQ@yRiuZCgJrU$22SvmNWwbkz^W5 zC)kBr*?Wfidg|aI*gwI#!5FRpnZU$>gUNmr1}0b!@?96hoo{W!A>i*2rmr64AE%rw zZNLUpIsvQ!LqI(dnh3Ba5{5({)Y8&Y2cr;31RQ~aBT-PK76y&NAQ0dm4}@!tj`zaY z8XEtw#a-z^h)gC81BV9%1;K*QFe=>}j?~f7+0sCvpj-r$5kg_&f}s?K;!g!b0>hI| zqA^KS3V2Hq=Rpl%>Or`k{u2V3_Dhz+_>m@V!r;L;8XO5jY=!g_XleQXp=9zeG=phN z_}Ab6Da^1Bp%LJ=1O_#L?#VqkFU2iWG>ieAfMZhW_Ef6h&n(&ysZ1(^NTq=d>@>i~ zNEAFZi18h5X^AnTFqk-sC&A2655nccNF+Q4ZJ>2fL*oca1FerjB8`wo^o@}EI!Kh3 zj*+$@TI=9Xt|8SkfJ~q;e{%8va?!u#ZWRKV#)o z@ciNpHYBi!Gq=vFMK`U@=CC)sp7jzBCS3WdwL5?xBQ2XGZY+2;_Ib-&cP0Xp_3bR4 zRoJKUVBs7^&Kn%h8Xb>OUs?Ey{kk$Uzil@5Z`ZL;8)4h`GW9uTor2(TL7kD3O9Gv2 zg9p58y8T__%b;4GlpX^PVEW;mZg}i%-`$#?vylM=hE%fbZ)nX?-FRKL&)c*Q=0_mFOB#dnmzs{syO%*TuOKJ%T3#hLT(eL zW~!6#jc7Zg9OAQ{czFaN9<|(jnKE~fEdN?nthv{`dX;w8-y^V4% zKv+5QfcZlGtni0VGF?{`HETZGIZnzUcfN>u>S-Bl}e~L!2TX6JAmU;_F-BmmHs2D^$cVJoEY%>zp(6TguQxtrW!`#I%Gp zdTBj5m!JAh{#wYwolFtKPF71iJ*D@N6$(N8E7Zkv;7Zty!MPRC$vi+=NM&C4XQ9ZV zG*0R>rI~$kF&8*Urs*oY1TeGKEPE^0lz8h-E z9*_||D-VVyDgw?G7ONCdrg6jy(sbp;$B8{L_&e(Q@ho>g%c=5`S10FD*C?E2pDx~I>_l3JT}f(OeN z$j)|%iIf6PO0!sXbab?Nqc`$mjE=?~b17^^sYE58_riKkafxO?4LMKtmXo=VU z<%P2cBI2;glaH!_Y8uop2djjomu?*^2I8EyTfAKHih4Rre3#+7SrcAm`zG0c{|XBW zDrj*3Xq$a6$ocIyVV3`zMXk6SqG&F>fi)CV=jINxjcuQrIc)zyc=58RfbqNKJZl<$ zrFC}6a@H&3awskiSTo{^t#+DEOw}D>Wl+aIh)8EuJzhnPY-6HeR?i_zt3>acc1>ZF zxRaQdqupn^H!|H!Z8uwQx`L8aJL+93!UQHJ^6!hxKV3%KEQ?2q3K~!5>L%rqT0)k! zO(HkjB(t0PB5_A8sxDx|z2ojJ)QQ%)?D+I{HGQ(tCei==i3gh>yslB;EuY2@SHrm% zYFE#$LqiIx(~hQ^vMRP_Cqk|0he6A4v$;%42;}WD|dyiv;*E+j@_jue&Q+) zx1a|aBw}F*kdGOs%r!m2I%gfMfqkfLueNi$(&W)8mz>XpGpAL$XF#iN4p~5BfXCJL zJr_qyY=YG>)AH@)ghenEzQkKHAa=)1A?x*osqK#75~t3v#x*2tCO2zEwtkah?R+{$ zYU1d9*1!uXXj1n&fgiJ1TDyCFY@3&8Z}ZxWc5n5ny|Wjl`+37N>cYLvHL{2oJ0hMK!j6v3i=9N{ zN5`zLJgx>L{2>s{bEbxZm!7n5VLZt16cPO}dlD8HkuVi;Ja5FmHgY(YqzqURBFSZR zcrJV#&g(#HO5Zi^==T^!U^=^A$KK)T{9w**@@=l*!>3*w*sPH(sJoYX=4_nS{qKtTHpy+izu6)w2Jz6H7%uyNazQ gW0qp^P0Af0J9z(?NifT4>)*i4$jb1BzI)7n00mEsa{vGU literal 0 HcmV?d00001 diff --git a/images/camera_shoot_share_popup.png b/images/camera_shoot_share_popup.png new file mode 100644 index 0000000000000000000000000000000000000000..f060a37c23137679166c12ebce6f3003c05dfddf GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^tUw&d!3HFy3UXM0lw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6Jlq5w}9$B>F!Z?0bCJmA2=91xs8?cGIFs|UH7E5-PK6_zxy zwEQ@b?|4azVUtk4zR!-elYh&^`u$G1GIMu4w^CDku965>tJ6dNsQ=3AR{j-CVEB|F V|MSw$vP_`a44$rjF6*2UngE;cJevRj literal 0 HcmV?d00001 diff --git a/images/camera_shortcut_line_h_01.png b/images/camera_shortcut_line_h_01.png new file mode 100644 index 0000000000000000000000000000000000000000..1d88543b6135e6a52b127d29e5d84cc99724f8f8 GIT binary patch literal 3912 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 literal 0 HcmV?d00001 diff --git a/images/camera_shrtcut_text_bg.png b/images/camera_shrtcut_text_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..eadd8451aa993e01b608ef0907b1b35e5da33b94 GIT binary patch literal 1595 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 BhS2~3 literal 0 HcmV?d00001 diff --git a/images/indicator/camera_indicator_battery_01.png b/images/indicator/camera_indicator_battery_01.png new file mode 100644 index 0000000000000000000000000000000000000000..aaec3f6dc2ff770222c140474381f466d7b16901 GIT binary patch literal 3234 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 US0Zt?U;qFB07*qoM6N<$g4q@V#{d8T literal 0 HcmV?d00001 diff --git a/images/indicator/camera_indicator_battery_02.png b/images/indicator/camera_indicator_battery_02.png new file mode 100644 index 0000000000000000000000000000000000000000..014ca7228caec621931b65fa7f3353a6cfc29015 GIT binary patch literal 3300 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 W4$_IVo-{510000l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|80Zdp{t>zk(q^~rJIqnftj0| zi=zchuSMv>2~2MaLa!lCy`Y4UTL84#CABECEH%ZgC_h&L>|v`+oNlpj#c3W? zZwgMgSh(TTs}FRHJ}6p|q8TOxOgkVZJkbI<@MNEw2Tbclz(oDp>(p)r1}0Tc7srr_ zTW=x_y$?Hx_-zqb$YylJSMkE6rQP1sycXIYyeogfaIzoY+{LT!&fQg7SimJ#@=Bz& zBcaXj(#D9DqEU~l-?E+y$h|DHSLEG6cfIoWm%iVvey>+K^{~Mdv&d~rc*PwZ1O!-E z823%`HjbQ@s>#t*@qJOV>$3c=ql>0I(@A>8XyBH-@UU?UkDJwLcSou369u?}t9+kH zI_Vs8d_3()iNyi0ZNd_l+0TcrOt09(k+HF?{%GYL8;8@SO;c@D9#r!kInul#Lx1Lu zM=D}Kd!W{VDG6Z>5w1hbGu02=^7i3OnA%jc=E~B@#?@X8Z>{T-n*FrozYh1m-~CvTlXTm}SN&CZ=vS6wYl2pmOz~v;U|YkkxJauj zi0#ZN-dSlbkAK$0wR0zlmu{YQR$GwnMa_c1zKoN2qF zcs(k~dfMhkjiIj5zs;=PubpJ{Od?_O+?Bf%_8)-wfSLVqxvN7EJ5x+ac==@Vq O5$fsc=d#Wzp$Pz4@Dqpt literal 0 HcmV?d00001 diff --git a/images/indicator/camera_indicator_battery_full.png b/images/indicator/camera_indicator_battery_full.png new file mode 100644 index 0000000000000000000000000000000000000000..92c35840fa00335c967cd485e9c3add7a5656e6c GIT binary patch literal 3265 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 literal 0 HcmV?d00001 diff --git a/images/pinch_zoom_focus_rect_01.9.png b/images/pinch_zoom_focus_rect_01.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ffed3cd5fea31babc87c807b71a5cffa6a86c7b7 GIT binary patch literal 2852 zcmV+<3)}RGP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0000_Nkle)6lK4F3IG8A{{sLoqzx;JIhOhW0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000FQNkltlJ>!50`er6)!1Ejj}MH=hP1Noh1nT? z-?yEeJu~x}?|kQX&dwQSj6qa;S%N^o3RsbV6|e$UBwz)sfE5W?0V`ld0#?8VR*`a7 zoSmJ$r^gpNIy#g%R-!<_it3fIx2vb8=VF+_oIihloiAXoUAtBkUrH1NCklWqwc3gH z_I7J@baX>J9`8MQ^5nPE)6@9|V3YL=?4JNLGc#2mf!4Yc_y`yt85ubTO!fEo7w!hV z&d$zoM#1>_xC8V9!@y18D6m>Gw%Y40o81N;A{%PQrqY=w zfKSVafYPjWfbGD3t#z#24i)e|@HMb8)KQR1XO;r{fz6d%S;m;Lav)v0bg32i5aabU&3+j{%3Y)+-iTX=-Y!DH4fn2a+XGG7RhvCD>Ft)8ZZ6+A5oR z2Y6wjD#5nx^~GXw^tLETc&=R;M#p{(?5aUKO~9MLlk(Lxn=Yv2B~u*+5FE7_iHA-P2x`V1n-0 zsOQ$lYt^7qsu_4qYd!SuGOcwBa9|-PmsASJYITBr1Di@`qQFk?fSYUF{G-4Tt@RS` z^B$mIDP`Z`B<}h)u5JyBJ?K>l?G;ohI|BtamCiiu9c(A{mjyJb zg~lEiRtxZo>$+=$U0B-~WY$~1U@}MrG!KIXH1NKi&PWCoz2f^zI zIKX?{8Ws$Sx`DCD$;n@Ut9^ZarqLX0dq4+)`vL@3d6mmSue(emg3SP{2%hc--UXI4 z6xh!`Ke5;tbJ#1`gZPl0<&9??otT(tYZ$POm&ZEtP}umgib z%RRSt5pXG`+Kn+EoIQKC!*{TbOR zIL^MymoGo#8`wxB@|H2?Rl=tp%d!sm*+J+k7K?Lpb8}9m4did$B%950{rYusx#}L` zE))t_mc^n)i-<;}RQf)#mX?;kjWM0RfxU9&_fuE@xVkc%y|J;EJ z!7AV{ytxP=QWQw|76rg*;Cmn+GO!UK2fXbU*q@*_vu6BMXlKoYRRUJP25ju1+(KI3 zupw{QkSGwaqWWd5QtHCJ49Xa@UK}e?AWKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000FgNkl7ip7{`Cl%+7X;Wogw4#42b@sb~-sf@lisM*v$Y%7=ikvNj}^ zAW#(#5^p9NFB*3*M$N|9yWouznN{P#gVE7oNWAC;IoZNWY?s~F17osaE8G3(?kvy$ z*6GZaN>cD5i+jF_xkY!odyK@B)PkO1Yo3Sb=Tl+qJQGl+?x!j?AKEFg{ zdMAs>PrxVY*it{#vRW+5I%HYaI+5u+TM=0V>`Z#8r3$tL#nTB3=mv&?`8U}8ao|MK zONA8djkO4P1L!DWUk6wZtV((*TQm0m^@v}yhD)p(mW#-{{xO$IImRU;z+vE5;F}m5 zvrX;TcslVQ@MZ}SP@J`nKN{Pe^iq)$59BOzTZeUG0ca||`v=m5R zSzosUuL8ZmYG9X3=8k4|>?UAmx#uY&_X7u#UTV=yJAMB9SW74r+5j9XijwWXwx$Fd zPbb>^i(6JFbK3)X>K7VA_Ks8#oOQi{)1Sdz5PHwpLcBArg%D3L?XZz zm&_@@N-#lpY}j|}1J!C!L|TF8lU{1*-)%`R)duXD$;m~P!trW-!F2;0Pbb2_X8(d) ztK9s3z~Q8qTHyb^0~iny`vza~W?+v?rZvcpT~=dr#Cx8>inBG#8#Gj`abjfrC(XnfRky@U(T%8uX)2|Xb%cxQ|2MTOF zow(b-*q%A+BU)spxyPB+20ZJMSr#P64*H!*L$6sd#%uy!2n5)8I??Mxy`2V^h;#tE zUDxez*a3n+5O9E3xH>Hu6!ih4uIv5`jK^Xz(`b&heV|)`TLJ`D{K_Tn50_~~ux|rP z2%c^OUIrF46xh8V@1Jjs8TJeIATF}A{P~PyXU?4IXc(}LEGV27UBwlErv z4pzH2t+yP<*>(Q>`N!%8HWUi&H^w|i^XXyBvi8(-fY4hg6ecGpC!KN|$X&TYHk;+* z#fwZ$RknybpU-1i7W3xKBODG>?(d1UwYB|ijOnQx*b5i_I6403_~LB#(yDUXC=?9m zemP4d5}{D2>|GIK4B>E?NF;(~mEUzlqtV~``ua{Xv}t2SonZw_<%faS{J}vp$pByA znzydmILoE-l|;c3;4<)6lYtEbU3H5B;1rMna!m#{1WW;mdV&1`sLES2bych;Pmc5j zx>`;^s1$6lg1S7pP4bJrHR>bOu^I&mRyC_3t;pG%8I&<*g*sNFK%+pVj#aPV!Z literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_effect_negative_nor.png b/images/short cut/camera_mode_effect_negative_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..3783d5ab3c7378c314895c5a7742be004cb74327 GIT binary patch literal 3981 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 aHz2?TYOplg3`!yN9ia2TP@@)Z8~#7BZDR!h literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_effect_negative_press.png b/images/short cut/camera_mode_effect_negative_press.png new file mode 100644 index 0000000000000000000000000000000000000000..1d3df43f6cd8e9f1a7bc90374d3d94513a2d329a GIT binary patch literal 4009 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 SB>D9K0PJm@aFsT`G5-ZqY@{*( literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_effect_none_press.png b/images/short cut/camera_mode_effect_none_press.png new file mode 100644 index 0000000000000000000000000000000000000000..a87d130727a6fa8405d98625fea407a26ad3b0ec GIT binary patch literal 4424 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 literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_effect_sepia_press.png b/images/short cut/camera_mode_effect_sepia_press.png new file mode 100644 index 0000000000000000000000000000000000000000..1638d6c21671c531ac07a812dff216d234c88ca2 GIT binary patch literal 4130 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 literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_guidelines_off_press.png b/images/short cut/camera_mode_guidelines_off_press.png new file mode 100644 index 0000000000000000000000000000000000000000..4125cb1fd6a7f7cce0c3f7205ede5c96f01dfd30 GIT binary patch literal 2527 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 ZC9LX)`t*ib7GCqqt|`5)BC8&?1T literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_guidelines_on_nor.png b/images/short cut/camera_mode_guidelines_on_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..f11d1c18242e2d24a11df96419b3fe4afede19d2 GIT binary patch literal 1451 zcmb7EeM}o=96p)gg4^UD$m(2j-ZYv4y|1>kC*|wfbImAXp`~VXa9m&Dgx=M=D{YDB zhR$SJvMt%d;s=l=%EVDZ77QDx12x%}pe_<|Y%Ez~3_)0MQ(;4=zSmLUkA=j`-Mt_8 zd!Fa__1>ZKvKKd}Kbejo$Y$3rhX;;6{n?lX-(DZT2nU1a^lKGzofhF0fD{MhT7bHO zd_C|0J`j8TGRQ}e4RNv3ule1jj35V%yl!KR215{yAo+#S5HByBuX@1)ydlkt+}u0=1Avk~Zb#<>jChK@vDY;Utwy<}ozI5Cpn>VNgv8 z)G;0hx2y$McC10uLJW>aA`xSRHp)spPTFiXor9usp+&A5lQce>E2%q@3=W_QiWt&F zSweM2zE%!vb_{y@AcSDZBi1))>I%7}E+-474Uh66oHP=+lCaU^OQPKF^%23~inXeF zz^d~P=JmZ0HnE1?O_oFrHagj&V`#1gcXHPLw{ ztJOl0q?5E-2skaVTAUQc7MqDA)+MPLF9|>w)v@9#mR=XjunOQcS*euerersjH^`c- zHpn5AtuUiiq7;xLs$OWw3+t;UO~)=BZ8dcNLZ51Szx&wVu_7d^cYo^RzLB=n?3&TG%>J6ubbr6_-FWq5O@r58 z-Y_<;W>5G~=j5MVhi2mcwo6&>?R$&<;M?}$8`35EiCbd>p!e+8?I3o(+Uq_3&u=*? zGdB;L&Xf+m-C+=NejO@!C!_QF#h;9hJqPS-m5!KNm#(^(p6ZMfhNZEeZ*P6>_~q`| z-CdM#uFfyw(|?W6XrIu9KYTxXZ}hWgOS_t9tABj=bms7ur+bG+7ADiP4B1~U zjGSaU4Z<6}vqK$|Jx9ZL6fd$G%ixjb*`dCo;g4@H@twCOss{Fy?dwY)fdST}=J@+l zvgYn{!MnS;SGM`Q;hwuC8`+M@GnRqOspng(<`y%l*Y*#5`ojG;CkhriFGx$ii*?zd l^Qo)!iBu(+?$BK+n~>Q2z3txkxoi6G)8#C4^p(`K{RfVL4>1QlT}Y&Kdm55i zQ?0-}RQ1`{e}IDo@yM4(v4l#>h^X0SL=9{rzUg2zK@1-D9aXDAL{7tsVI`@JrDcjV z^dvPIRT#xd!>Tbn=fc9=Xi=N1X@X82ewiHfMND8qq>{c_w>;5LQf*!l&x386BHJdY zmZUbFDk(WKZM%?+Mwqb1#27LLB7o!L@%RAAGJv5OmIiDX#6^x38HVg!6jpQf88I)( z9WA^{QdNW;k*1r?W~9kQY_~!KK@b8CmJMTzus3TV)el=1hX&0)+jXBhK@aRC{%{#Z#Oo@PM&L7tCc0V zzxdJJ+i!e5CHItC*0+~BUQ88kpZUFS`JL7AgYXk$|N0kZ?P~ATQmno_`^{USU3&t( g|M>j#<+0N}#KPms{oMHz$AX_#HZv-HHB_Ge7t7kUj{pDw literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_refresh_nor.png b/images/short cut/camera_mode_refresh_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..1a60fe123c880f17045c133bc12f3ba6f992ea72 GIT binary patch literal 3597 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 LqCKG)=NJD!o^C4c literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_refresh_press.png b/images/short cut/camera_mode_refresh_press.png new file mode 100644 index 0000000000000000000000000000000000000000..266f819540e8af3f629f55a3539ba99f9b43a7fb GIT binary patch literal 4713 zcmV-v5|-_WP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000M+Nkl!z(z)gZM+bgINO)rN^S;j;Et}1vjQj>N|mdP2mlgcAeKs0raO5&b1im77wxNQU_Zl`zFOh>^60P zmn7IOk|R(0aNeBtN^uP{rQe>e-2<$pbzOoDFVz-oI~>n2&^N}(kIzo{{hE0JuALX) z#_tDRye-|pT1Oq*v;qs2K!|Wh65t}Z$9mGd_r@qk-%S%gp0PdJvehB(ToIyW`4t31 z6%MbVQ-ox_rMk&dg0(C(1MSIjY1=zg1)}fo|6>vw( z9c-s5E;TONunc>+c}0Q00#PE_A%{NuZeSS@I{*74?bST?+_esF?KkM!&&nBWn*e*U zML2^S1zskSjk@dxmM&AGcgMY6krb^u=4ILxsgyJ%xe zd4yY$Y%Y^2COz#E!MRM!HGFt|Q-C)bXPAZOFx~YjHUd=qkpotU1KKksAuM+J>%eooeSbvxtk@D)RHch#WqzKmB{YCD^_X z(rmmhKFOBfijD=TR;z38a;kqG*Dt(m(l+PD=F4>jMw8vvy;NyR! zEl0n`z7EO;+cD{{e@^JYgO+<$R`-hxtvnRTrr7tp5n%EZH*;>5KXGias;n8L+%z+A z)^gkb&dn|lu!)m}U!BH9v9beu(;Zr=Pce0{tG_eCbkpq1FE7w}os;cj-DzR-_k2LN z7-M>9a?NdMvfLI7%_5Suieq~*>cb>~9gb%#L$0bhO+J9_1va?K>>3x%W%41!QH*&! zNv!tH0~h3-4v^z$nH*_<%gHg_8i7Q4vCRVVbTjK-bo>dVU{Y{Wm_P zV`a{M!}f%;|B~-!4d^f)`#es1$-<)Iq2 zWv-xl2R4$85kLN=gPG7yWY@-;;r1UHMeMlyX_o3qHZ!45ZG(y%6fQRS6T+DGkEU@bJQifG9iH zf8oH7wfSVZF=4p|+?`J+N&ywTt~S)QW}vHxVzg196{7@6ZUSK}R|?UxJZP%P4U?;$ zv5-H@k&H^ggM>Shbni_%*rQ5VZrFo3H|M`Qi?CdZf$Eo!HOG!AwyjDyh!S#IiLpef zv*4(d^}b=TzmC&t8v|~8DWH1q3i7X-Q7=_lQ^AYxThE9Vb`ib6VT`HqfeS3N0a#)a z7kA;LPRwv$j%#xLU-GGI+ksXpYbx0Bw|W;VT)dDy+-bMu)5z7MoH;$tQ+J$l=ySc6 zGq+Fzm3lI9{rSvg+o}Z5JrsA8QhKYE(g%P_4mO|h7(VR4n<*Y>JR!|`d;T5;8j)4P zB*n*C`P`gZmIt|iLp8VG8}j_Fy7wk|{h490#3?M?l2jin_x}|bONV}mxlF0PDZm38 zt7%ytDp;yyr{Q>pLwl0!e{J-FHDf8@N0!w#m&`wcFqRE%nqa*-Eo`}r+m;2n`K}<> z%nK9@(~k9|`C>4`$&be9-kY*mfVUgy5H4w&S*&|C1CLO|JW>$~120p=i2tPoHm5oh z;JPUsX9#1?|E*F0osMA5S|BX>b^&=ofwoZr@Dq%2Qz;dTo`Y2?uLMDXRZ?ITSOr!| rfmL7?SS1BkfmKpq6<7sU3Hbj2v78Vnzw=@^00000NkvXXu0mjfz@zS| literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_reset_nor.png b/images/short cut/camera_mode_reset_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf04c766941a64604d957a36d93929759e347af GIT binary patch literal 4501 zcmb7I2UHVF+YUt#q=*6vC^t8tQd0YcCJ`ZfB2QWmghR0~`}e_h1I#86mf5Ev-N zSD!?t7zZ;**kB7=La-M>g9y^m2A&K=u?c)gOgu2q$D8Jd3e*Dq!HZ%)?{-5#z&}Ko zURt0(jlyB9fckU>35Wngl?hNaC{PUshQU?U)zy`NDo_{{0#$*)RFq-rD7Xp=3I+ak zfY{m?L=Th=+VC%3?3NaY%w+naAdrB70B`^tOlNpPU>X`4yBsPi%4`W`zaSbDAE-?8 zlljGfCixK<6kjHVP6O^T;@#=~Of3-G(m!4B@wK6Nl9_&glhgeE3KlzTkU+dI1O|pe z7=Os@`u7Wk!TdYI$LDWpKc)@ozsCPhem~nFUlPQIl;E1RY8AYiU03#LD-f+c600>IrpoJoyfb7f6pLxL3xyQ7eG_G(k@@b9)SqOTOU0Bz(JC8k zkxhwxa<)8Pq~n0K(kV^~kkd>p$4yaiaLz0P$?eYRfk^9;^}cv}bkgMu>~;{{WA5g| zk4I-e!>->9S`A%&Hy=LzPLsAg(nXw>2f6 zuv9x1b7w-u%qhK+qwh&aM@P}x+S-W^0ju9!>>M1P>Ij>bBvo5F<*>p|zV!xpG`S|#XT^i066P{kXmbLxy(r>SuLRMdY9jO`Ux}`pF zUFRoGxn?Q9>5x*V<KDRwRt^jf>*rhM{$4t&0_yI#v*LtRjOG|iI)}DnB%VTA4lDd;;w@aGCHVp-= zA^=%hA>zY00!Qdp5r@65%W%E_7gE^959{~!{vqQ#W5#Q$efBOcrLQtI?@DWjuGO;| zj`y`1o_@+-_#)aURZvRp9!KH5Z9AOzYC00XZy39yrY1b*AuHz^70gU zp>@;abDQ%m4o26d?W(G(tT`NbaOZEOrLB3+j%X?i;bxh4xjO&0B(UE?)?pPz(cWzQ$xWGCj7s{@8HifRM z)SRKOw5oKV6M4AB2qHt}q*$Klm(jy~yV; zUi4!R$Z)O;^e4%IA&|G$lJ~AkB24r1^NT3`1(a4w8)w|k35yKflx@A%?U0H@XU@;I zHw!w@R>1Yg70o|4ys8+JrWoGi{o|v)%A(nqU3K-Q)1OrGGM7GR27H_0!R&u#|6bR~ zJ2<#LT{GbRZH|O!?#V;van{yt0hR}S&C)ps3-Y2)XPoWJBc2+m_UU&hzrSIzx7D1^ zIyMZDO_CQhx`WLTx%mb)e%CVVz6u8ybYPs?p>>R$A{-c~EV-siboJMC|u@aC>>tuNJch&OO8O?6?p zc!dP0*>aK31=cdrUl-G`k!WMhx`=?ag^%G?#SiH%+xANetn3q+YYD_CV;P3y`eib9 z)_s^0SfrrZdWtQF$H3mf=hweA%rm+78B^P$_M|^@l*@c6(Cl^qlGSj?OQ92CE!K$} z(Ak`WYZ+wbCKpQTgf}uIWkJ13qSjn2bEa8(v5@r1La80$w=%QYJaQi2$2(9AF6H9G z-H#7R?3erK3NzcE*MGLJH()MwHqY@R>;xA8bX`sWr6QZ|8u)P!f-zx?@S8I4Ds5C_ zP#?#LI1Ps_K0EQb{ldQcqn99S(e#He8&yQs%pKIbBx6iN1>KZ;rPG0jSR&hymaX!1 zxaYOcqb)7X!kM~|tniH@1qFrTw~rzPTo?F8-TAzQN`iod9C>AByR3+xbqO8Hg^)(Z zej4{II8um&3+oG{aNCPFY`LSW4c36uiYa^~jR@$EDPNDW$Qkh!>` z`$UzP@9~|}SSE20Ad79s`*r^|NFtG_KW2KDPfJ`|{`TH^wGG@c)-yitt~{MV78vCo z{DA{#-n1635yU*?$c0gs;8@W%CpTjh}hrrrHmd!p`mO?+6Yq}@prQ~ED z&nXyJeZRoox5hUvhdvWpX5j_I_bD!d_a7a*wT6^*J?2;#`(}LLx*WfucE>P4$m!IT zq1gALE*a;*3tj2*+wH-$v~3Kfn0)mj>|kgtOex;#>a7Ah!RzVkcbA{PU`9>HNZvPp zX0=)<=>?c@KH(!>6l*dy`ouCs9 zxY27l%#z{})=V`K^GW$M4hr?t&E^m?`LsH!V#7%a`{`!DFofaIbFuVN!;%RR=2drkAZXq}L|s#2p1BCdDjYXWCPu!DPL z&vtfvUFIf73To!6IbF=-#PNSS7oOiY$xIR*U4YHSJrFtI(J&&;-{CW=1%7_+7#|`z_ z=>948&abh!xOkWkSRlDE(0n-tv^I8LSasT9ak{{R_dEvOK=Tkko77J!*_*W>_}d+! zdtzY*G$UxyrSeRln&;0=tNg#%H|>bZ6O6>IH2mBwd5{&l3FAq?v4hQs;^H@H!l}v0 zr7Ea_%bxP86WD2A-yR)&DMma{$Tw$?MJZCyLasl{F+MBHwPoAAT#+gc_juXk z?|7HoacF(6C^t7(3&tg`sI1&Yi1Zydi$;#A2zHsq3FwGzEi5Mu`1)pnOP&UanifWn6&cEF?UM>&-CcPHz_!u@LwFK5h_prnT?@ z=*U7`TvWHj5uOAN|IdjU15M%E8~c8X*!qq{8)UB{CR82pXC_RCMW%Ia;0%K=Fc3 zns~%1oqKCv>eSJ8UgKoFBZpU{rW4Zd)8gcdOSuwUnP2$hXJ-r-b!B;-ErC8B7kgr? z3c{egCguaNxjlXPW{R(FYi;_~`9H?I>fpxhdzZ!cpfvu~ieAaZMFOz`XzhfyWK1G@ zy>>JbikADvY+ebbT>#_shdGM5^^yydMhk)04s>i8J?ETpo}Hbg@10&LhsfoKTj7d0 zM&vlK*Yf6gYb$+Mx(fqgn)VOQgju|P%wM;B-R)pJjw@EpNk+vp1x<6kR^CAAB&R)l zNt|r4x3coZR4zqKsy!Y5;>2AhUh6&aK&;?W7x3JpE1F~wt*wu_g)%xQQ z$b5p*#m&i;2l7o9*_&P7H=H$1$6O1hCMK9!IuYUOc{i{kvNj#G*H7P+IzO10o~~H0 zikyXnwT!y&?2kV7C??KzWqwpg8xDt4-rRFE>CrE1IU?{Dw*aUtE9)`ecG}k?xRM(X z%l&2waQDv6l~e3&#&mXe8Xpk)hW`DcZEcZU`%m5gSxob>x*h*IPV&`C_57C2u#JK8 z$g1z)zT+ds*Pn1L#7V#t;w_BjoeHOgdfJFo)ykrYO+?@Q*bJ4BALtqW*)PgEVbt~3 z;S7ml>7A>rn~epn2`MQlNXA5Gw1|wM>|WugT;T2sSHYMcL*dD@;WdqoTPvxq;X$`% zDl@Bxl)t*n5-#Yw-j;Uru@Fqz7a`KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000YnNkliG0+whBP&&THdTCE3=qc%`}C*(=3}t zT0JJUX^rF1Ls@B~>10_d+KgEZ#i)bkF&{{YXlj5V0zLr2%Ns7-dpYyR+2{q%eZsvL zob#>4(slMZ`|R&`_Wt&_zy0kiDT;zF-7i5p0v)UlRu>(t4ps-Niw;%?tAo`=2djhC z!Rlfs!QMV7Ns{^>+2=u={y=QOr6-&!WAHR2;c;_Q^N@jS1WBX zE1bwTQ+TMEf`ewti!D^1wgNC>q^9HW%QcbhLEG+biyCpGN(svdKL`x@Pn(2q$EMloSZq=%3fAuDAV zrFFfb$4&rbAXM|g{C$ng7+VaaAuF#6C;d0T{4Q&AQH+7a*P@v+J=z1nEr1cDl-Zp< zw!6Vbi`id$=CxWBrjIG4@K6OX8Cj_jU?YJYK)ATm4EzM-0(n3wP$|j=0GEn)Tm_5; zBHCNgD}qUSe+c6yN4lv_32;3|$<$L#!7``r%$G~gQh2BZSa=Sq`f=(oN?QfkFMv#B z#q2>KdUxr5xOAy%~g!JcRe?g74b_&|Aa3yC8Nu{38R zD~Ud_>_(}-nC+*X>&3Su^kdH2p>CRnDHx^no@5F_fg_r}YMZ<|rG&ld)xiD8%5gVd zF%g(5e9vgRWod~Bwqye7Kn7sz0C+Gk2e=)8QRBl|lrfBmNLO$RfNL>IEjd);}XF7B}l$>_t0b#HdMa=jzGIE+7%83m(yzVUMIhRm6d3RU)O3; zc`)zWC)zKl9e zpVd8C!`}1;igV3fXxpq#ffm)~?qJoQD={~=I(fE_&@EtK?{HXh4!OvL7IQxMw=pdw5`LI+b* zj?KE6{O=v_T&TKvy^YfquyOPrnWS+ojh}MNzS7Zqu$GpAy#{M*>sT$nh0^2ozS7Zq zuxCnQdkt8n^(qa|!-l0L-&Z<%ZzC&D4`is5k&-g=G-=Cgh>H&+ysyNlap8pZ2_kV$ zOc(a3yo_c9_jO=L^HF2Cj&=0X8h8)3`iy(`6&z6W1`h95?ODRCXupGX=!^}ia9V!0 zwAKHnpyHHsKdoPX?Yir$ZGH#XRImNc!NZ&fg-m6V|G}2zo^@J&(|tRUm1}@|fd_y$ zfMiMwoBR&8tVkQ+(74Dh>F5)%+1s4&0t^^*$+_jJtQ`ye$gQ9813$~BEN&p+N5nuqoS{M_)Jx~l~V-)=&?}BPdSc< zbwp&0=E~)Vod>%Zwen1AO*VG_`>;kyA0h|*+~ISoZl!?$TSE4>1{e2C)wq_&mrMO; z4$@beXl^>FQE~@ChEOMFpaFF|$?sqrIlTLXi+i*p@jFOcQRA0hTUBml?E({OGKf2E zJ1?qkje!6QM>6-i05lH!Bx7|lJBrPkN6Is0SS`Lga?@&q#m|@0P+N(bMrtpy4n~tI z#kppVWbW$~cx?_t||SGxnRYg}8y!Ec-R;I(p}flW<5gS??0Sf{axnS`U1!rB@%Q!kFYsktWAQ^xyt800|SVaCl?^EVa zM`Jj4sbsO{tiHH zmYEr2i}}m%PdZ#FIRd(P)@i1VEM#wboBOv>?8w?nf&+VRr^#{?r;pX)EV<83>7Lvz zqx2_2!X9C5{?8aZEY!uLkD#6&JTFG+SE#vH;peW!To#P+fqo1h-G@uB3LzrWAZ%bO zC3!8JINHqCb#0>g=1d zy@{o>-B|{{3#`U|&tF#ZMBeOkzyS||&Oui0?*KJaOjPeVg$l5Ab}2dAn}i2Z+8s!` zFY(wYg#cdxu_P@Y%+wj~r05(My|nY;3Zpa-brbL!V3^%UXhzLHC<3-1D_S5Xi{Tva zdWKkGBITKKv3$K3Xy^0xj57#EDIWL)LvRQwTQBDq6Wu*xc>s73&(b%wWDIKdi+kxo z2Y1wybo&WxRtxZ`)=23ohdaP1B>)SEiVk97Ml8ce_wk_GeBd+GOzliJpSe!V_*3!Z zFmi5IBd^?jf?89naKpaPx~=DcRpGu2JVtn5iNB>?#^_1j91boML;gq9Y?ihi)hkg` zhvLMa=R2vJR#lNQvm8saBJAqhj&AK~U=670>o*e;CNcA!7=Hcy#ROWc7KM-Im9y@x zww2;8vAnhQ4zMcRNYv~?bpkOy(2u0$ml73i2nf_#la0SVd{Ug>1^8aLVotLTd)_Z> z$VwgX1Z}ZUc|$#kR~N8pRh8eNZdz4E;?)IqP*Z`YL>qk~zW+@a)eV~kJbmuksPW-E z{>DHLP7Zn}*<0&aIk%GBthSi31$Y}-NwsSqzUZ<3`>`FPG!Zpr{=9!X;)XEpe|7*j z-51quCZg74W9R2Jq^+nXf1mx2OqhV#$jbK}+SSX!p0~Sy03L34-4LvvARK*LU#>Uy z9!Iuv<`g|6U39QISY33mI#?a7E;?8ptPWNe9js5~e**w6b)_RBA>T6q0000?H~R6eQ&;*xp&T--|w7zmOGQl3S4If zv4(&^ATvK-8XFk7x(mDjxQB2Bv%s)IP3NhDJUM44KUfRw51 zzcA25Dxp%MP)p=8sE$z(A&*sizyMGGSb|i+mPAFXRbR6qEVS2&wd|wo1(w{ptMQ@~b$B3K5zuQpsbLLLiG``@fj_XG1#0&ubtv1OUF_$fW(zTqcRvID$bem1?wkM zsRc5jNM}@smHde%{Uer4Rf+^^xsoH7Z~IbBtZ2Dfu8Ni`pwwU&XsARMDUVm_5)Ci| z3#Eyak~mQ$Ln)U+KgFCZ`5Wsr9F^eW>`cG|=IK~0)(6YLxMFZv7XsishJlBD#zy|% z;X(tRpmjC&mzw(`0t#6-{nQ@1RskNq_Mk`xq)Z8PSk0?3CJ1Ca;YXuz5_%`{Hw9RR zT565U{M#xU5Fyum*D#3x-4{oNy$gp)GA)D`WyM&jULoE|%6?>M_p85#c+YZ;=QkHl zcUNfJu?`>+x;VSo+e++<)C3#X9d9d(^d@>QW*y{t zTD8g(IoUzE_tt7#uT0C~Yf-4c%cVPJC+i^)2n*J;Vq>%Ck$Pqz-V-rdUHmpwW*cBz_IJL1+` zb>{tHymuQZrbv%}s=d>mn>Nm`SBj#&oSjuKA8QZ3@@UL#a7=@k?eNQbbJ4#`aZM4f zVF@C%>;<7l<H@DzJRo-!OvZdjG_h;&N@L z1f!U)-ql{*;{^qiX9j{ff$SY0d|9J=O#`GCCI+u=Tv{y)%v?}mG6k*8 zT86xPMxs>Wy6kRDOiWnJjhiD&lZH#I5EPGqm1W&~;QQS0_%(=)mk=DVEUa!7#frgT z_@vu$^6WS3&4Qb&{4F2Q?$n~xYxz`d6*s2e+kxtK+~>{aHPPSJDB8w(v32~p-+!mt zuQT6IJ5fL=vdU|7%w&2Uv$Ktzefj9)CUn0#*U&1@o@o$Z2%edlNq>5$aFuXnwV@Ti z=ppz}XlzW(b1y`ThMLZe7TX~bO?Dw#LQ;C8GQv`ppu*tXh5W;2E@gh-m{bqQwnU$Q zcwEmE*=Z;(W;}Kf^vh`O+g0s;cUAvg5;ISvBb%Wo>lPnVN%J;Fa`3xfq_A1TEn>`7x(3$Z0zio zRd2pJPK^xkMn_*(fd+k(Kb8o0!%?W);`ZOe$7bq|`{%!yn3(69mg`R$**d$rz7r=U z<)xYt3lrT7f;?EGif8X?%gP)VaUI}E$FhY_J$SE!wD-18G%h%y(WEnjY?+psQbmpO zM_(|CWkIK&5N5n4Jmy_!{=RKo_FI%#?6dnP?ysfV#l@aUZ@}33!X(uaevG7he$02T zXYpA_Gl}_1GH2b;c=vb^sPh<^cG&MD40*(1|2CK?`D$ymYnq)C^z9e$D`s0B+J{Z?JI-W4E?^B+4|(Ib`1XLB@~@7`qd+ZX$-j?L&> zrkCd0mNv38tcJIW8-1|&qBotMuJIWu&GwsJe>}dju5NbjO6>EvUz8Q=3w$c=afgQ^ zC^jiBB@MA7ttN<}gaa1Wzo(euDJKN)d3AkPBX{oX*RmIy>uP_mp;Og{fpa2%y}=E& z5uN(X>wW23hrRkXw~8OBt??8a{N4W`v4*^!q7umDo>_~n@S$&a4%Y^qx-kqHF%N_p zxd$W~@%P@xw(~GKm2vk-5gS{b&XTsC3HkQ}#wGz885FB1gwui8mG{m zHiT^$xBT1vz6!mWo4L*@Zt;`gI@!RLj@KFK*P=XeI~N%fZ_aUsn^TRCJiVPiy=~x% zi*{IX+;RV=jG)TVkNV#-o_2P2+CYL*bI@DfdL+I!Ji9fuYYaSI+N?P>0%HwCRct|Zge-dx>)V-}JYgA}fQCCc% z&_kp{*v%qfe^_W7Qf?0A5xO1>4i3`#@}h4Cv)QjVQmHLOxb@rlqTyH;|yp)3-Z1rfEACRb5eD2CcUq48M|0Xc5<~x%{i|1=f+%t1oQZ z()EM7)X{WtYqsk>y%4?oxsX!F1C3A2HTdhy+yy1aw%@3n9_`36n+mdD(QVQ#sx{c2 zYV~nF{dzOO#pOM)K{kEQX@5TRfxT(dK<*l|X=N)U2erxi)U8s+MLm6|n;jM>XwNMM zQ91X^TTY9nJ}zk++N@{XaRB&?l6W#(gmFi+@^Lun!EDcmrQx8C)(b694ZvF6Z@C{m KkXG#zzUP1Xz!!l4 literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_setting_press.png b/images/short cut/camera_mode_setting_press.png new file mode 100644 index 0000000000000000000000000000000000000000..e97d4f16fc9cf1db15e425b11fae0ee0ff7d8b20 GIT binary patch literal 4350 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 literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_timer_10_nor.png b/images/short cut/camera_mode_timer_10_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..7049da32a270e6b1d1291188d4cb6cdade1318cc GIT binary patch literal 4772 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
  • o! z3D^=rW1|K30bmV~43q)4>%bijJPpiJ;6_{8f%kyLKz%&HM#FgpLq&O{H|cwmKhjhZ z&$Aylc@SeKW^%*COfJ1PqlccOfl^>0@Cx7`IL>Rxu)A5Xb`3w7Fj!~E?z0ZfD$G_M zRe0>Lx#V1s!pCo&;pl;meqX_`5y?z{DVN(H8cO=0q+XO@3eY+boYzgjGAwB+y!!ct zTz_j;1aRj7vm@~GE}#KuQQEEoEWqWOBZlN8G4;5UE_GdTqwUYN_&XLCuhXp!5h*nWRv$FWwSe{iEIR$;Ib z`aO0Qu=Uqj%rCxB2kuM2!bD#nbisWCm=HI(@;ok776{k(0@n-NgjFav0&KLhTTdfO z0pKZM8@>*S7pBxxzS*VI|3)SLjs8MGl*@Z?#zs~4Qs=$Q|^oQNy0RK=r@QCe05k75;)dNd1x zfP|~%ak6t)7#^uxg+j&tTX<6($+d-98YbZitU`4nnSwb%PyuED|5U;yZOsk%Vd)d6 z_|@f?7fWZ=Q?kOT#Glv4WPK^a zT|(oDPCi@SqM1k%rQwNT3Ph<85LF#KZDUCv^mWjq*c~l&iy!zSqV#D@Q%+W4IYWmR z^1+EQ8mqH;ScS!jUllGgsslWk^OBN$9@@aupc#^_)V=DJG0Xqf+R#9qV zV(MOITm>f%dxMUY#!q8KDVb!;`KtD#2eu+g9tMhZ`nH5Yh49>Nj5Rigq@>Vs&K5s* z+dc-Cbj`O3IE}nr-V#r+>THm&BLGyy0Zx`i{P`)+7{S=Xz+|8nQMwMfoXHCmU= z9;~A&gY4YUwvKiQsEPyFYmn;)!h!V;R+Mspxxh@q>kmY!1y~BagH`BP&baS3cK3Sq z&Bz)GqSO`#u#@^Zt^nANT$PihY3}57;x0t#g4lrFvtGSbotBXt2dEbzNl&R-tIB&z zp64k!j=TtOKq;b>Wjt7MtrxFH(g2$iBcM5ortL)#exy2jdJJDN$)fWY@U*zI9HjWYWb$r&GUEEo&Eoo_g$Gb^L_|TCOHFq_*zp$W22rc_7AWGRrngTeu{Qz#qFUZX9js}vF(v-Wp zI_h8#h;7(^u&df{x@&OA9C{XY=IY4)cI2|ACxcoyW4EoN{^+Q%lF?-4Z~V_Vu${i| z*!7uPUJ2KM{u*Hk2kPGBOrKmEa4`B0EEkB&>1YTE}I#@>ivGE$UxEC2~3SbwX zue9rU-CGmVx;k6bVB1}1lt?37HsfgORJD5CV~hq{$^LDPocvxZ>{?&|mKxwA)xV_V z$P0-*?u%7zLQ<{X!d){V)6$r4tc{g71i#?@S4Z;umErN-ElOzeUevIPQiW!cr=j|H zeK22Y$74xr*6nXeRfF|~z{>IpP)q42dIi2+Huoz<#_4UKPB9ZND!GQSQICOr9VaOJ zqE&M-6TCYhZ-qanzP5imk?RlQ09KyZYUDRopnP*1k6c@=6X%A@SS8P}MS*MwB;W|p zq5M9VN|g#WtkSZPdB8V_(i%i*Epi$$)I0?IP_o<(RK^di40jpuXTXo$=4bvr^}H~p zminXpc^P?3l$>2HWg8oG-r~st9zxD1t8MOvRV|#XI)+>|6GyNz+>emox03Uyd)B*| zcG+=Wn^{lIcd@VW5+y&dmBqhp?8Q8VO3im3-hIZV#Nxystb8$F1NVkZs$_+e=>^ry zEj+=7RcCOvM4tNl^dF&SFQ{hHw82byY$!v|OJUTN=>+_;hT7_U{O6rB>{;(tM!v5&*oY;XUonbI ztilxFVc?30`d@u>I@J|k+|B@SH=$4L13muWjMC9)r6RZi=1ZyHN!J1%AF~J%p{~rKC{!I!w^Bi3O0000#gUOkFoGE2HPLSF zHv$Q0^FU(@RG=pc>MW?H3cBVGBNJfIBqYcm~;=uZ)nCtUD9 zMj?z$K$rpoXN*WEoDT^uNVfDpL%`t8++E#B#J|b0#J`+Hb{p6qi3iI_L%@VT zWzNR;3uR>V?+6U$Z)qaQ4E?{x|5tvZMF1WRHbWC}J_HmwiY`L`Q1$PM&IJD&1I!3X z@I;fNsDtz(qW^qgWCXiOHr^eJ^wPqid@yJ%Nlyzd=;Pz=3{%jCDnn)ElVV(cq?gEo70iVsWf6TdGUF3;;*8Dqz$TxrIAR0>!8G)Q(!y)dQ z001*cPfOjxe{3a-!O+5*x1&_H(|k(MO1;>O&CA(9J{Re3;Q6`JX~<(xUVU<@{?U-G zkLGf91IEi2{W9M2=z9H2w?vl0yY&b!hOr?fbs+;&&b}9hmMQ5uAo|JEuv%36a$_?j zSw(T*z&NH(&TkF+b~|f5c-pV0ap!P8-GR!;3ml?A#fxBiC303!TXCEfz?ZRlq@k1M zbcfKx8$kd0G;8_9LBj}nyqhpbLI0aW-=1r(wBw& z*fBkR_4H}WtrRLHCN!nK#dK4M(8R<Jxfc-RJA|2<9)A8{!6$=XsN=AKEe{Hfs zbfVtJpf=>Fx^HCU4{IPZPUDboxXFud#57L_3Pyzg7@3|9d)FKROk5uyA3qJJ#@?gg z)jyDymhPgYq@<$U-Px%O9GPqkvMwwx=E6?YUaqXF!f>eUZwN6dUcK5y>oZb@Y+pCM z|8<6P>3Wv2H9se(a2XIVEL~k(Qes@|yUJ^%%R5z~!!I!a@JzD?MeFBMzkUr!r+7&0 zZYmM&o0)NJP|wd%)zH$4f{?zOz*l^rODV6~zYcmPo*RgrnwpwU;Deg&5sMbgP~QHB zGw*Kiiv4Dv%)!|+SEe{--Y?v~T-(sFU+aDCwBSi7dq!p^SJm*MAw~0E$EHfM+DYxq z+?-HQHqV63<36hrJ04Z%KT?=BH#cu)zE?2PFfuY~C%$<3avYMX;;6L#1)<_q&OF?w z4lIhr@^RVQ+qXydtX7{Kz~4DSSi21eg!&gTk~1PR6%*MlS*jsF0EV}4J&&Ps`1S;z z(1DhW4Bp%~Z{FI5;H4Cm()rDJa`-6cU$gu{(ciP zo&%uN%3iCyQ$N~~FE*XWr!D?&f6Z4WemldI@rOx!1u=kcp#?ow=^g=Cxx~)?6v2|g z-=Yn-r=H*|@ToDxiyA&mNqPL(i_VV4l)-NXfyTKygy)uL$I7M|Q@}<&zqH1Ng5PXJ z4x^IcB0)VLGnJw{JM|;!b>TfwOgPBn_cnY(e4iv$cgm_lY5+tbTTf39D0(w{Maij^ z)~3IiuK2|Z2_{DeKbYE3s{A|QYSt}ZByu*)y7-pQd`mP#yN$hZ_wfX{6*3|c+2f&o z$QUMaU5F+4$6~>-N$D+9xl2D(fn20;f$4x@oBo)hLT3*a>)RkH5lQQqQ_F{NMR}{lf zlN+z#^3?c#p4I$<0*CGoABs*7zdf0^Q=$m10*NF)21@4Czu$YFAwnB-FE=;0C7c47 zM50L_BQAcvB5+FO>-(g!MZY<}V6%PUV zkh6+nFgg~RY7(azrs6tT4lv|fA5n3knc%>eKX~Qvwkd8HZEOvbi8sxeDr(l(HY_{1 z+w>iXzsSp*U{X<0v21Q`KCb0pfd@<+M@B~O@2^eT2L1fuGuq13-D2m4DSP2)8sVCg zme*Z1C~RFSi(voUN85VYjb`5xXV&fiLr}*ZMjQgqmMH)kKmea(BgTw z+uf$NsBd?<0eWZ|I6c z*w0-bk=Fc{XDVMU2b<$;ilI*00<12Z$>dbN+%G0%mm19GQNjx~v)kX=oa^XcyxjM; zkuV=u-eVWx2xGrLa^KCNP^x4w({jwMUjMUOOn`YzTw7b)x|n<%o|{gBVW}o?=#@?E zTzeuz)afMdU}F}G>PXs+>?-6K|C)b(Ru+@6V8bW>N8P`-r&1=PU0n8}8;isB+*JKH zW>z^wjT5N8tBdVc*JDeKBKSs9Qd0PhsZxWucCc9NrXg*4&w@RpVB0jFPE1kpK~d}d z{QP`qS2}p#l{5a zac%Ef@qWH`%>p-%LeFB;eFL$ zhczeF;-C}*76-$DB_PCWpFge%yPll?b{??CsvEfqwnjz{E|QESG_wE~>r+jN*&fQ7 zuYpE?ceH&rnc~4#iWE~D=aN7uRxT#tn*1C(G2%!&!4yDkR;n9PY{aM z_|j&ejoGC%8Ffo(kes*N5+&o_65o;aTM2=Kh9mito7Q*WAk3gSvZk zv%yo+rOPE8ljb2+MfJRyfoaD&c2(|i;n&KvakWPmZZ!s0T^1EBU=CgWxU#ZR&!T!T zL(efo2mr>_vI)OK)=^$B&N&t3@;*XG={x47Rtv~j9u8VN3=Rzp;K3OB&L^f;PlMl* z(<#uU!P#}OXFBNf?-Uw5m5#3}FEbL69ZnnHkX+53&mr2E(p2{ZqFxiPT*7F$sqkP% zh5Q6QUepO^vDSx}*{+n7*Usos1I^gpPqn`5D-u>DVMUQTy3JUQ0k;nr{k`jxOsnGp3lBDz0plm@o3s zlP)N|f`GwDp>~Xtp2gk8oswT?emTr6i4V87wv-%EX*0s&0qiTR&G2Q&#dra)n|gYO z6iNPk*2*8F*C~9P^4^(|1!+sw7xE0~rN@E~UVI>bhD8l;JKa-Vfs}FHewV@=&Jrhb8FL?5%F)QEb06#3zi*bCjQ9gW3?xP5HhE8Cj21!6D! z+vQ#63$u^a!cHK~Csue3iUCf5ZF`n-A7XTULp5fy!Oy{_+)2A|U~P=J^|X?koBNWp zme4nTDk`eh*A&Lo@{y0g4i3}kJl$lgsLow*%p2WgfhrFnz0!Ryuj!_raM-l`mKjoj zGjv{7-nsn#bu_Gub2~Cy<#HNUdNwNIQ~SkI&!(fbhOi>a^GW;SQBhY`euI9?*kdU5 z>?@>7%Wa}rJ!Yx0z}}A4^B1DcU7M)ercQOqdyMg=MRZnU#;2sk#A@|2g}J{lUs8R% z2jxx-GP_df>6r0=C^a~+4|tw)zzP42|RL?U$KQK`Xo=2w6wI!x(WY1RY1*XET%?j(fd1x zMEH>7fgH|XvkST#=IrduxjI@=kgfFM106|=%kHQUl#(}hv?7ejj6HGMsmPES6*Qkp#zN=${ zpqQyaRC@w6sj$4N;ngU4iFETNvsIJ|4H&n$`(viHRZFejPTw@C6|5+|AtSs{pRuTe zwx>jE6$GsiP9xa5%aCTlvG}?~+UL&`{6e~7Vh{KenB#RR(n)=@niRt`8y^g)<>j_Z z+}+*da})iL=Oe!p#NF@d88$n2w~P5ER1)i$IGmQs#qFxC*nRKHBL_H;N!*S$-tiw( zKfa5@_fymegw9TrmvjAFU*f?(+B!Od`sH`NeiB~zJa{j@@6hlfSfz8__RYY1P-YbagXdUuS#Z`>?UCq<4~X z!rVWA=Sq6T=2Pu>>ENADy4Ks<+qS(~Dz1DUhQSDlgk{qgZF=zy#K?xYl2A)tPwI5J zBip_yuQw+?XZr(FUdYu3wWE~^)wz!3{TSSGORk}mOYYu>I>Rp;N`Y);jnB_%%!SJ4 z|D+hYJF?h#Yx{Mbbzc@>V?C-TGj?6g5AZ3&)50Rv)y=K&q6lm_Cnx8mtT@Zy831#O zE2hhtlpGfqxAffb5j&F5kyB;bk;LBxq|F=yCd5G(7Z-ybw@khUK;-NVyWd1T{Vp37 z9bLCc$9L~NxA!Df#q?8tvFi8XNAS)7OTxLn2liQaz86FptG-7b#NMRMVjKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000W1Nkl+hONyx=zAPNCx15uD&6hUR#Wyt`#3nk@=yIZnb!3&L* z0>ooETuLYqu#`n%L5^B57A}IEn<$`#4X6+l1i23hM28R)LXu&UFv(2sAN^t`Gu;E3 z^vpC>{jEw>>h&?*pZ@jl{oe2WUQ3FiV99vJSO_ez7FbIbSPQHL){+I*0&9V_WP!E7 zT3{_%V8gH2<{ltPQqu<6@a$M3&|Cc93FspJKLK0@P6L&O{hD10x;fPBU#tlpZWmw_ za4*o;2Wl{t0(-?@KCsVh7ArOPi3G9OCx9Ga#5Gt{JK$*nbf5wE;Q&?wOMxOYSgcWC zp8#?Jo3Nrk>cC9}CIZ<4ZaDNIFbg;uO|V9EUcOKfukMK3VoeoS3`XeRh+*CWgl>SslWtoQ#X|ddJV=OT?=yrQTGcLCfcoNug zy>(tYfGxlS8rvEyw-K&gN&za!neSlK_%4mNf4G*tTQ9SBi;M4f)lhdu|8C;qCGHxM z$en|e=rbsZJN}RyMS9?k8R8H?;LN zz|8?(xXRBI0ZyP8CJ^{DV+~HQ}aGw)a zxEfjcp#>wS&cI)R$AFYy+Mj)+Bcms$>Kyf%xDJoG<5<;-nh)1V*`);FDc~7EjU4Qc zw`S7HE+iyrg_Z9B6U;t9Xn;E(7!ozOjTSr&$OPcG4Wr-N+RrA>@C%H3!)=2=(Hsi>vmFUqkM9WIx8SGL_P`BXq zDmcrZqg}^kVUN`9(g0v7w%9lp?e0d;yOaF(@Bp`BmkQ0~3UYj)0*n!_SDmiqdOa}j z`SU!KIt07aChTBkr2u#dPrZlPS;f>=d;RvX0aMN93bJ)lf@s3syT!@8YzKMEs(?Ns z79|33KL`HB*`sbYEiTvCHLvzA87ZG<{GqEOZA@BmY&D0Q;! zg9@E=W0Wmc?X)Ta@}0A@9Bj>9kF1Q-8H&CQY(rM^h?eY94#{nExaUtvq;-#@$DIlE z88MdZ6Pm?(J-;W$FZFqJPYtk%>q85H z0-!5u8gdYD8_*dwRT(9)p85d+V2^)O2JAE;#Gb%|!hL1<kt>?&l%7J0ChWr1L?)F{A76F|)X z7PRmjqfn>lBRoKu{Qj>Qo^{yI6}V}e5^n;qD>O%h04Kh!X4eKM7mMpj?HWs8dvcI@ zF}KKg6-90aVaT5|czw+&Ka2GcpBU`|yVk(Zny%{O`DHA8u{5Cl!ROmCVPRT8gyWMt zh+M8fUhBqP+w|As6K(iT_?p~cnNruhO(oN-YVBTPEqcN^Z>z$13PQA}fhNO{6Tgn!>}EHEwKJRPD9uV!CF#tLjHF zgw-1CY$mbw`euceVI9)$-+qG8lhc~C*<$UY1GyX(u$$l8PqnjqKzq^ge36UQ*7yax zweulfg`u``BAPZlxZ?n>%E2VJYwS*AV&X*%xH2kW-=E<`%@O-6_%L<&810#2$0;{z z;YV$xTmjVA9pmf&X-#X7jiNJXuhU*0jbP9?ki9m7hR+Ul{%qQE|5KeF6|l0>oQR|+ zYEkqpnp=0StK`&oElPTaI)mT=w({ZJGL3D6L^8vydPMkLZK#(@>Y0~aa#i0PCa?e- z+4eyd=g(-BpTAAhLJl*il}OO6N3UkAs@%hiL(frB>OpJzCPH8j;Hf{!;+IP_wzUKD z2=D5c=I9pGqUIdkJuVj4F>%;A&K`9Gn}hh~u!99y!mbUM`Ep~Gjvre^Xn9eia|i|a z&KUUX$Zi);-&rWuLX==YpsNo}+q))wIL2#?C90yA~DR+iN>d(3(EP=mWI?c(kQ{)mX5qW&uU) z+Hjeb(@TQHj^B#cvsDq_bCTka~nF^GT@b~#jDX?g8;Hph?+$9uxv^h|DIT^;}#Gu zVYRra92!6N&{DmrJ49VR^@0yn_0?C4lEWe+zgN&;xnqD=0qB2U5>s;1=+HUt8cw}W z#E)N!*HY_C8tp{b)E{-aeT$!~(XJb-c6#}0lL|Gh$5Cz{aD z_e<8OeX5O@mv&;%!)-%+_@_k{%0Fa#NIZxJO~Uwv8h0p}q18)-=VLqSij~&^4;7^z zUVFsBq>)89PKUA>IRpJ=`@Xv0OylS9eZ@#t)`(zRt=`*{?_%_=XLxI@gLB7PR^#RM zxUowaerRrhA%(HyD;u2Nmo@Sr-!Z}da@HQq` zVr;2~Uw`ROAr~TtzsN!@^nDe(v`&OrJpeekvxb8^Yk&*%ygQx&Ba%t~O#;8_9Z%=( ztu)ua79LhDUCmAS`o2W=2uG62=JK zhWbH=TgCtBXjfMs@yV+BE*EVh1}8>qv7#s?*E85)>ZKd_M?ev)Hne0`A8UcNWP!E7 sT3{_%U@fo~SW6aI3#QL2J;K>>q; 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 literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_timer_5_press.png b/images/short cut/camera_mode_timer_5_press.png new file mode 100644 index 0000000000000000000000000000000000000000..c7dab2fbac817989c683fb64e7e25406ad3c4f63 GIT binary patch literal 5549 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 OFOP|#C9*=_E$Uw>$3!~- literal 0 HcmV?d00001 diff --git a/images/short cut/camera_mode_timer_off_press.png b/images/short cut/camera_mode_timer_off_press.png new file mode 100644 index 0000000000000000000000000000000000000000..55250a0c029ab0db5f3f1bcf3f8f222c51430457 GIT binary patch literal 5578 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 Y08_^#MEz}$aR2}S07*qoM6N<$g3{ZFhyVZp literal 0 HcmV?d00001 diff --git a/images/smale_shot_g.png b/images/smale_shot_g.png new file mode 100644 index 0000000000000000000000000000000000000000..495140883ed3446447d12df4aa657498b310ffb4 GIT binary patch literal 2816 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 RNbLXs002ovPDHLkV1oTnHsb&Q literal 0 HcmV?d00001 diff --git a/images/smale_shot_w.png b/images/smale_shot_w.png new file mode 100644 index 0000000000000000000000000000000000000000..c7d790d4eb2c9906670a3c6d623a52eac51f4a51 GIT binary patch literal 2813 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 P00000NkvXXu0mjfPV6)T literal 0 HcmV?d00001 diff --git a/images/tmp/11_camcorder_standby_press.png b/images/tmp/11_camcorder_standby_press.png new file mode 100644 index 0000000000000000000000000000000000000000..94e09c2204552f9dcc869c32867c08aba53fd5e5 GIT binary patch literal 25958 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 literal 0 HcmV?d00001 diff --git a/images/tmp/11_camera_mode_bg.png b/images/tmp/11_camera_mode_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..b741abdab2ea24226c1d3327c07c6da8a518ed47 GIT binary patch literal 7075 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 literal 0 HcmV?d00001 diff --git a/images/tmp/11_camera_mode_button.png b/images/tmp/11_camera_mode_button.png new file mode 100644 index 0000000000000000000000000000000000000000..513d11832941c2977fb4dca2de128a8ae21d1094 GIT binary patch literal 8788 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 KMNUMnLSTZ)CexAt literal 0 HcmV?d00001 diff --git a/images/tmp/11_camera_mode_button_ver.png b/images/tmp/11_camera_mode_button_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc056f67b7b83f6dd7b82093b0bb3d7fae67cb5 GIT binary patch literal 8842 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 M07*qoM6N<$f?f{!oB#j- literal 0 HcmV?d00001 diff --git a/images/tmp/11_camera_mode_camcorder_off.png b/images/tmp/11_camera_mode_camcorder_off.png new file mode 100644 index 0000000000000000000000000000000000000000..e4dc9647ae631a3bb98ad9c8bd3856d98a7e80ef GIT binary patch literal 3363 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 literal 0 HcmV?d00001 diff --git a/images/tmp/11_camera_mode_camcorder_on.png b/images/tmp/11_camera_mode_camcorder_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e4dc9647ae631a3bb98ad9c8bd3856d98a7e80ef GIT binary patch literal 3363 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 literal 0 HcmV?d00001 diff --git a/images/tmp/11_camera_mode_camera_off.png b/images/tmp/11_camera_mode_camera_off.png new file mode 100644 index 0000000000000000000000000000000000000000..b51ec433afac12eb4f0baf642aa188106a9f6f9d GIT binary patch literal 3613 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 literal 0 HcmV?d00001 diff --git a/images/tmp/11_camera_mode_camera_on.png b/images/tmp/11_camera_mode_camera_on.png new file mode 100644 index 0000000000000000000000000000000000000000..b51ec433afac12eb4f0baf642aa188106a9f6f9d GIT binary patch literal 3613 zcmV+&4&w2NP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0009>Nklu!ZZ|sOZv-%UX&H zw=P=PT8x~SjhICxM8cpUK_7l(Dw6}{Xrp7;ywm0m3^F?7n|by|-XHGfF>~Mf%{lj; zbM74_BAjNqIOTEx9Y6=r0dxQzz$4^N=R-=VV@)a|&A>ww_S{oSh0VewEm}k*Qpb#--J0}23TSHKa;KvPpwPk~zCTs8nzngA7gq@!m* zvDq+-Mx%cQ1_lOOTU+Pq>+3h&Zue0J&Lyr{(`!&f9*I5GoQfr<)5O}^T0U@IX9IQW z^5EFmSS@fJC;`rx&V$*~?Ck7MfTE(JysD}yPZs98r5RoWVc_qHdvIf8W4FJ*|ASJ> z@AZ1$dA;6u)z#H+N=r*8hKGm0?Ck99o1HrniChA%02dBpu@unn_pg?fmAxDs99&I! z90T@3p-{NDw|Bm>vhu~k!oqgW)uMjCf3>Zx?L&Nn19pLR;3F^tyaxiIP-woXsp&jv~S#^=( zB*5N)g@uKAJv}{T8Zvgwuiwv!5bf^nzN&X<*D<_T0kr1?U|n5Z$>`|lU0oxln~Fv< zX_QZV7wzcixIHm3(F+u&@LaKoi~!A6*kNh0-O|$1xwW-584ic<90KCUPXd9!oX_XGxwyD^ zb8m02*kqWBQYz+hx%QP(hKQUo3?olOTq1JplkDl~>FullDy6>Zj=TW4Y@$N3y$9pX z>!vQCBQ|1K*Y+5h0`3Bzbpf4kBfyCM(UYFerFA!r2+psF4D4AK9f00000NkvXXu0mjfSPj9G literal 0 HcmV?d00001 diff --git a/images/tmp/11_camera_mode_recording_normal.png b/images/tmp/11_camera_mode_recording_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..73efa2ec449d70ffcc8eb18763df88473b4a54f2 GIT binary patch literal 24190 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 literal 0 HcmV?d00001 diff --git a/images/tmp/11_camera_mode_recording_normal_ver.png b/images/tmp/11_camera_mode_recording_normal_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..fcb07b196a209dcaaafdee43a1724f0b7ca7974b GIT binary patch literal 23973 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 KsG(FXU;RHZTOnEi literal 0 HcmV?d00001 diff --git a/images/tmp/11_camera_snapshot.png b/images/tmp/11_camera_snapshot.png new file mode 100644 index 0000000000000000000000000000000000000000..21804b6ac59eb120ef37cc01ee63ef4b70eee650 GIT binary patch literal 8360 zcmb7qbyQnH(|7RVEv`k26itv2TmmIUiWPSfAh-mVBE=nAAV?`v+Tu_sQnUgDmln4c zmqKxeFMaHN{&>%O&UepA?%vJ(W_D(0XXoxDPDlF@ISCU9001C|sYCU!cbC7PJA~Np z6nmpV?2QqnYK+o%w@3Necp(5vaCch-JIvL_0ilPmfd_bE5V8OOUM14N7-g)bDQ)NO zDs1zYM%drg1B(U#WEK29Z0wv7D0W+f1JX^7bMI3JCp!`@$7v*?C9372f^bBt2YMm& z1GNq80-fz3a83nzc3FREECW{r%7)$F)y2(Q+Fy?IAAF^;?Z4e3ob3M~K{?BD{&P^q zS~~11?p_FX31LwoJ5fndc1fTxP)r;Q1`D!-M1i6rq9731ex zg4;{$LDl{x3;QI;>4-vkNQ;R0`S}U^i3z)VIfwuu5XfI1AdnE2LdZM74Q1mmOZ7eq{y(wODqaX1l)IOKySvN3y-CN>9p&!r z=#oBvrs*oXhDL4+H2 z%Dk{E>|*Po1OUL227@XY_|NQEP8u!MKZDQuF ze!1Ai&J@`7Z9~|#Smii6SzkuJfz~zPrr0<{o-G6wd{`RW>d>X@-v@Yjhd=eMrZO%! zcWUb019!j0^ZC3FdBMS_yYqv>whns(=(eEK-QBjuJ(=~ZA;{wCypAB9cipUm1F1tU zJE^g6KW^rHT^ItV-_4}6&Wx@`(0W?vAKfQ@A69uTqjdOCwF?@2T|hA+Ki#zzsy8Iw zKuR`vo9cpN3sPrkvuDrXx+tE!UrJET$ld|c(5PUdj zEY9S^nHDQhSDmtX>S!K90Y5)jrO%2c*yL#P!1-3*k5sjhO7un_?c6B(Lh7%@Y9?W>`i&}VjU;LP09?ZR+nQW)iV<)%O5$0gj21Ouf zU>qksNzCBDu@YGE=BINp`vJa^+t(e#m^VUii;MBdS+{p~5?N&ZYuY}3{8(97Scq<) z?0ao<%MIhgc!tWUj(zULUD}n|YaN#;u5LRq9q4B|Gs#F`62&1mwT)PBocHWuZD1g?8_ zds9_cSNG9%_M=3ed`L@p=q&?`6($5D$D8`Pgxgy6X|J7`N8+MSpt`AD+w3{%Q=@@* zuKg z+PJSW_fBHS7^#XD`|=f@g$lQcZ0zpd|KPno)H_jWHtaT4Q`p|nK>IpGSr3B?cv2(z z*~NDuXs=D!!+D}24n33U`7qCASRJL?ffX#v_-dhJul*ALo$Lf3;3*W82JcIMpi$Mf zS(>}1yG%!{UOE+OCZ;ThA_Us;=zplGPDw*278vR3-U~XJb{NK5nW*%D9TUSH1f$3huSwZn8sV5&47-YO z&eky>cLy3bYYsoENy$-z+DanleotEX&991v*t1u5jWNAZ5F4z%iY}e46Jd7(Jr5aG zj;qCAdawUB`hL((Er;1h7xc}ThDZ|9#RW=~t67%;XS;0DXQ4tlNGGJ{zGs`*N!$rk zKQB{m|0$3uWac}IW&ZSWDW6fUGf6n1C54Fg=eezZZWHAJ#cx!nCFHv)Ow+ znSC7mJbRT-ayhEP^Cb&ap3O)R8dt~;O)*-x+MgA}SiupTk#$ee`@a8Dco4marFlho z-8n}tA=2CNRrxcODy7(%R(eJ8*o$n6qX)&|i-LT79)?xsXz*W05otgBbr)2~HEl{$ z(_G;|J^hk@WQ-zvjzzKsfRVaujqMK& z4IS#4+dDL^q-&V-Ncrv<#{@gH+M%I+S5@-DOBSK$t3x8s&iipWO}_c~_?(j&zv{Dj zwI*(4Dj~#GviviKje>s=x0#RU#IL`x{kSqHnu0ZFogg!8`DIH4VcNK#larG!&Zsz=a_?i6Deh*uLxrIgk7c!{@8ZraZLAx2G z+-Z%uB=tx|I$F$O0s7*)06^#1eCKL13cHJ0PH$G(C$^3qNyl zU5YTn#K2(XhHay*^rEg>1<-b%HJd|wm!NQ{_ zm;CKa)|nOq3nlr|o%{j<-tt#}R3@KKtH-@ZS}tuQTjSavW&kMK_m4KmJ$;e52wzE; zKS?ysYq~voov)QjJ}sJL$OTbQMXhy&_Ln0yXa zV9xyA!#&gD!zrB`HJwL=8+=W4V)XBo#QGn8Wnn!S->A`7Z&y4B7+N7){YY#j7zXPj z-tTo>!RO~|51MQ8Tps*d-i{0qAqRA0m$>JBb|r>4THXVP_&T|SGxf>+z;(2GE}8~V z-FonNUBl{vYG7%VI{{|zd0fcOS_%Xwg^{l$UVi=c>z8vJt)<;Waq9`k)2C0hgMvQM z@@4!vI~NR@!yo*vbKP92-wRA7{a|i~`wkDaRl%|4|0VYMz)Fj0Ti>5Y7t{q&a)Q;F_GWm=-PlMr3I1iue-tR zN($7`4b3@l3b8c~wThGX06IhBdDxpbZ~X2$w?Jn@srjZK4a;HOy`Vm=fS>Hw2P&ML zJJubiRDs#~Lx!d;M`Idk&saK-+X7-$nZx%(uoF4SNz?E^1C95C=oUGo>YZarkNC-&`;g^ zDHo5(!hk(n$R%j%A(#!{(%pdpDEK5g8#Y>v%hwH+llI9{mz%l78 zJgfj0>C5x*_f96yaQYFynVuROOW9%faWPFbZ1~^dQgZIk$*!MI@xZr<=CJ@b^bwXa z8syF-FRLSoiGi3GC*G6h-sAv6mDWT!kF!Z%B5>}>;sejgDFRZuE4+ElDN=5htaxGZ z{(<>`QD225QJf>v#K<#{$haeQ$;e&7ZQah679k#LdH4Na-)x2g&AWgzqO@62=|56$ z(v#B8&(AY>HM2$aja+?9aKVLv<#|h*(zh+P&>fq zYgWQ}93M6_z#U&s1ypr$6oo_OZ_ex%3m4aFq z4C_Lb!E7KGHkQgovFM~M7ZT_dCR^O;gtPo~bP5ZwZ!jdvIj}72$2etdF0Y)X+E}#( zHjw5NEQ&1_dtGf?-Oh|IueHU$v*cEn=e6I7=85HMI0r8`lvlSi@i%tK%HnR8;mIC6 z%o|wB_fQz%05Ge`xky`}(%Ka>SmVPehzhsku81Vzy_76cOB1~j7p(Whh0%Pc;H%(L zs}mKxgot;H4mm3cchFyG6Gq9V?tG&Y)0QrI4sz*x!C%m*dcF2dBT3*MyT{rejS*Za zpH^iL&E#d;?-%)g3&bz%>M^tK9ltH9-!hWrkELXQ!?c4Q-&5rtRtz1c= zuWoQo{p&0Ew5^-Ml@X4!ahzlfk0Vv}Qa3eP9zY^CIX9Q5gSWl4HFxoJ)Z<#e2H%M5e|1ThTlq z8_+EGJ*iM`&a~*RmC(!CMc?iu=5;DOvV?JaYNpWjd_U;~Iw3Dh|DRFvFMq$j5r}0| zVX&oO6xHIC&LBx3gsiXGI$%{FBf-0qcmra;b>=FITy*fR>$35bL4p}$stfu7ZD)xiI)gW@W|7UfTk8z?1rF;b2hS}T`q`XN zT@!l6#AabLt4zaR96j)jMxiuzTvsDE)!Z*Sr2y&?(Ig4}PL~{7xM*U5`LpZeU1Q}A zy~G=>#E6#tZsyB3u+Ygkz$~TcOXfk{HPK?GHSTe)D;~O%F?Lf?4jg-RH4wph`wPGL zgak3=BxsNTc&!(>5;_hrNnXL&THyFu#JnGD#B3soOf5NoB`XRKb1i)jcxuf5Wk*0T$sYgGgtVI<*zb!ZEGnchD)RILwmO`z$VH4FLq);jRq zpDjauPv%og33<4AiuVmC0tt>A6Kf%^@y(a1ca_XoeXEN}rGRgveIBgd>U@TvHgxnt zAF6MWJzs16=`HAHH|~(9sCJ3dti3+B<;8etqr1y!!OF^7$zxoa@okE@TD9SdBvJ{) zGD1bRucjx#Hxe63!6wgAtw+S)!`JZ0O01hnO9Dqk>#Ad zRk+4fnmy2%j9gI$(w??HrToJx8RJFK$YyX=pRoeE*Uaz4a8q)PO~_(geHU7R*(ChM zL>LSKBCf8(c~ZDhf6iypLRek>331T#j&!FkZ2a8X!M^+141r>Y>x6#cQqdT~RjTRv zOYm3|wF(8LCSDHcG#Z!`kun^Ae=Mr%lo}qQEm{=#Lh2}}<2@8(n1WyvlLS&Zbwv>D zvIwn^?=#jTv0-T_nN_BuI4Kg>9#5yoQC%umU_1Mze?8v$JYTLdV4_T1usE!l=bqg2 zz#l*mSpUi^YUB3^C~;DqCszC87@1YG&$giv6*<4Uub_HSD^Kb4=N;8TlWtRXs+3%vD^0vPtiJsjG01BMCNH^6^vn}6*}|M5mXo!F+vcfQTS&+ zxKOG6?qg9I*&(KhAy-Bze{Bf~S{s=;<=T-U%cPY2M$HP}i&)*(DciCkg&$s_Ww*{6 zHa0R|E9!e^v=AaiP*Tb*9kF4wotXdEO$*{GE|X3@)^q07*VX8EE)vtL7oR_Wt_=m! zcB<@r;fkps#~Y7}7mU{B-P#XD@>FvWe*C5%Q4vf2xg_QQ4PT~?-{$_r@tz<2p**_M z=*Rc47br0ui2*8^jD4$Xf{FyYxYC@Q91E0wzveF+H)~yn1d26#yZ901#2^uV{#uFz zN#-f%(5ywWtk)R?#{zaWz4$W-TMMNW_8`?{!9$xaHCR3> zdWmvL95H{=L=_6l)%v-COP9Y0J5_O|K~zR?$vE9jPRufb_FG3jp|YsrIM@fbk-T#a zQI5lKuhVh=US991r^^i$V=S_{)H0JE%+nyO3G_GAP99>cgVBuD2A#S&ZkS9|Jm&rO zUTqUlk&wUP+42q?6c}iG(LG4>Qk<+_GfR~UL8EE4VI;qg*Jr-;!0~PE^(3a0XWh}l zV$YwL<*($~^uVUy5=1MIQs@ zVX#7Foe#q}e0FGbO~3k=kVNJ6<>@E(=5mtOlmX_9KUw^;fhNXLH35x5rtgY}3?e{E# z!Yidrx}!kC#Ae&Zvvn0(TJ3Vz=b6vR$e4!a>ky=%GwU&9OW&07%aynZgI={3!1xND zsqgch<7Z>4l9$JZzgzF+VuI~D4pcdpG=+ATAIWMKxQ@Iv@&^o-y|41kNg{r}Mq@n+ zI@|PH2x&}+gbS{i4+-jupl`65x&Co}ASjMj#&_pTgoP4Rey=C(WBS($`c-WSdPkWa zHEEZ^u%Y@%gQs1(r)~7XRq+`dFJ-P%e71{@Nc3X?E{%m2{MFhyRX^s6`m%o9m-YAX zHZhsL#H_3zHopopz;-ekcqQ`ur0ag8%R+FbQsD4rNIW#MO!(CK_aX|H$ER+b1(W4I zQ@=^+TK6%ci=pjRAby{qGtC7pnd_cU=@*Tlfk$Efm2(r{r#8N`LVlr^O@#X9rU#s3 zmuoJTd-Ag^Lz@Md5}t|~%S^|-aTU5miExx_*-6xP=VP-q}jep)?D&)I8^Z#K2Q++Omaq2<#>J4%FF`Zrk<{mtI#>dxKy+s>eIQCWc$M zyoSF76+D(YbGNZ4ZYp5k2~7)h>6_s)$Lz8%$!s^3k)7MXOr^&!Xh(-FfH;r-klv!= zr>q2!G@&wUdATHvb{#a^Z(4=bckv|7r4}0Rjg%W!Zt%v8Qq|K?Hn(|+`s zHZLA!ABJXgV_6{dJRfb19f-|Wclp$6wk`QvV8_tvOKC#LjY3_=CFmyQD-H&c4( z_ODN@S|)khk>tf56dpjX=EplOEly_?ZualYFawbP#G?a zraUALIq)wdXq@+*{r$myFvmK?l0iMPj3)-3ngD6Z99Mxn^cIe^YBhc*DsPmrQkx)! zzci{;LOrsLJtwxUZoP2o$DR|)|3p#SR)E&8c#n>^YvbeosLNO@T#Tk%yx5kA3SCKi zbR;HPt42UakH%kG8!qTrnJ{y2^W2%LRZ+h9>3UzOE|@Oesd{;$-N z(RZAE8*{F1^S$~0UOy&CP8fJU(sN%_Fy~t*MpVpa)V@5gz}w)pQgQ70w~5>H;orBX z3qd_i6&)$7sdlmmI%~P>*~M^AYi+1bXsA?atdjA8AC;I5o3#xE@RvYbE*0VcQ9&&He3Co# z+2u*E*|TeB0p}O8J?HF^zAvf|$*dZg?Zj$*5E-fcntDJ$zynNBR8-VBwq(*F8gg-j!T(jmka9~syX^Ero3R#( zXNu$HzouHiQaO z5!XzvxraT{!7#M>D%5)+D8Xt1^cSi8?~qPTWyT$$*F^QtHfwCY2fG(T{o;wJ~jbp5?mBOIf-QQ!~VhH;bDSL#eiwo&#!iOUv1^&oKPnvxh5qg4PMO( z?Zjw%!QO>?KN}<|p;(_oz1|=lmY*ekF%n8k_!al8Ai?m9IJOq#W%uyCRFEUH+tvH0 z<>vb5U)XMRcql&BLi!xiBhG6N;FDd)$H%F-V>H2%y^uyhXXEv>=^fviO}W92*{!@> z;(+M)0lc^F!S*X`mi}E5A<33#E$6Jhm1p)^MOkPv6XRTG(DC?%x}n^)xVW(Ll4?7) z{N>EXt8qhy8mgS+PT$T8s){4j9D^6N;aY+tiye-7A{QD&+8L;G7I~Yx1=eZp+6+GV zLACgfPJezGvP;UuwSJ*QT5fCef_a6}YZo==>YqKh7qS-=_<+%*LeS`UjF69XS}cyH ztZyLV_lz+VsUs`7>>RhX6Z5bd>RC-6#$nG*aY@st6LDILzb6v^JEF&?V682b4$!>B z1EjnBG8b^I>3OYsEsR(%jype zmk-Phg$4k`rF`71Y@8tokTt~K(M5v(q_c+}7^t=;y$7%1~3T13giQWy1+$!BBVx=M&}O0sZr#M@jRrwG-8q zSNx|e)RzRk0|MbD%FXTV?ak%Q&*kc2&&>-4ga7d0{2uD{J&>xOg)~=oi33`;K|L6kDP1n)h0RjIPa~JqOjfFBBw~v(@H!l|tx5r;J zfBN?~N<-s+BVe$9QNt0skbf)xU-`rJecd43x)8Xlr-u#7i*^kEA?kk%`a}57K8R{q zc{oE*UR1P#!XbbCp`jtFg;L(p#R@9#YU2rmxFA&ICFngp9c@L0<%JdG!6G7Zd~&i1 zJiNRzvNCdVihK&fUPD7h6|v_#a23IHNi$5AksHg4im0xWYhx*<94|zewkkQIO#U%gKoF@q!h2c~Mnf z8F?_DpsWZOEFjO1>h(Xcw*PN)aicWh{xin@W6b^Cgc`_ys{finsE>cmL5K^=Wge&* zhQwoU2LPUQs>sXe`z#%ry@cxTruOg$T0>)E33dqL-20z#(>`T`Hp1G7JIf1Hiw*Pb zNGq1~E0ZL3sRSJ>9#t4*2`#=d+^74(IBL^LrW4_nr9o#x1$)pu=qNYvEPdfIe&A_i z-|*Lwk6$i2B}b?wyKmFaVnU8g_h-8J;r2VLCqHuFfxFo!V!}HewaLr1Ih;sz4s2tW zF(7i;BX}Dy1_SqcydbQnwruD8tNE%8&zOU})9Hk1OX5PYZZwhVmC`Wqc38N3eQ?wL zM7)PN@8H4>+U?rSGGcMJL9tE0QMp~Q`S`>PQ#0v>EKTQ4wnmmv`(C^}{W@c^it~WI z2jSJt<2 z%dOm05LDg+PO#~Gw}=UfF9zs-O$`ZtrM(mcf)>Z@8z--jc?5~bCl9|~j=wL*M?a~u zxOY-lA?#%>HSDiRS@!w9D&nGm+x#|(IoKoQIbBQBtY55G+>$RA35XE3P~V4sf-Utk zq)LV#o8lN=-FgRAHZnI~g)mGKvFe#g-s~0eVor--LC{*>%(A~V(8&tltgNj3R-spB zIO83?JCPIp<9tsfuk~F>2oTXMCL)sV;OMx2aCmrl^zGZXQn=q^0qVR`ucYVLC!OUv zR+hliuQu@#I~AW!0)KSYnl=&iHh|nr4Bnubr^G@nV(QA2L-bW(d~KQM=jZLht3I1| zOG`_Xv&_WWL!`{=?`N(ws&pwCr`;rWC-c0sGBZiW$H&oU{k)HsJnvT8;UoJ$mMdtA zyi%5ku}&X_;hkdT`fT8o&u%4aN$zj7VX*4N&liV(V2!R^rVF}rPb{Z5gp*R{SIpY! z8yT&+EyLP4Uo<;>%J#k3Nu?ksALe;*n$_4wOn$AUV>I2z#KhDPfk&~!ZCnq^6K%J3 zaBw(Z?RrUyv2yLb>RXoFi|!CvF6fRP%wkMcAapD2va$#KapW4bELd`sS@hlZr9Wlv zJ4L0SU9mOdd|cx~!0aO@{)%yv4#fT_*)u~9lXpI6DWRcgM2!9xSFLtvcB*NI8gnco z7|14@k+_1I7j0fGEiE*VuT&K@Tbo{3wMK{3!^{MtMuCy9M_UvQdd^epOy_({) z;L-M6aqxi+UouE+*E~5m;CjrWRh4|{NB0j24c5_gaX|UO&c}?VyP3RSm)~w~Zaz>^ z6FiQ4qi%ZDY0ZMEetiPkr#BEm%fwQXOrEc)sX2D8>+(AO+7|{m2DJ2OFKg6fEV;M3 zQ!IG8DIFxlgDtnlVw96<@8x47^dIrhgvEBmy&lwH)X8iAKKJ54{yPq<2NZpxlorPR z3ErP#Qx!s7e@ZFMw>Do>Q1JBnz~c9fy0^D*@lo9@Rr!(ClldX8zON24o%C@{S8Y?d ze%~t68x8VTn<~tDoIY2+l>Ai2b0x|G3QKf< z=O&O*X`fwR>>5E=-?gVaP$jE6Q{iyeI3&ronMzv34S>Wljm9Qv#`7DO_$R}0^0Ve^ z&0b3BT>8P1n{)U>8Y+x0Or>6wvc2WhXP#Y&8FhFS{hOVO%WJOA!b01~NEkkbsP+Don}#6cED=a zi>r@+!4cWc$L?sN^G51^U&}_dQJU-Z-RIw%5m-D~HfJ?1@~@_j_VA zG&H#w8J1(EAyYl*37 ze21NCVq&s?Ulz-BbL}j0e01cgEI~-@U>S3w{W5up%P@Ya)GU>QH$JS@QWtJNk$vqg zzx=zszP=vB+QCgz29!~v273%9<7VaX3zKpXq!X|P5Y9STSma?-7i&f?2sAZAn3SDG z4(4jcg3g90%95kHa}3ro$p}=~N2Mw`bFJz(s7W#4nHuc7hJ{B&NwbeKg`MM=$G1Q# zsMTvCk}gmL4VjnXARS6lS}MQz8t)2F)6_JBu5AjuSkhpQA;|yo@}vt>K|$dG#>&Kz z=y9~QTHJ9II=LQkjAQY07vnC!?>$qmIh)?JBRRn2-=`NA_Oik7VW&x`<#i%CO63&0 zB4(cj9&I;HQB`X~0sb0YGqaEx{#Ln zGBo2zEO6TKSC70bqGK3CTL2@@sOCADGYrPbLeiLU;grMPpZ7R6h)S`7XDbuVdVflns+``(~Vpft_w9KtZL#3mwo9>jA)4$m`+eME z@I1kpJixwE;mPY~hSk!xB{6-^KgxvbsF*MVNcS_lZ9gQvRH4~g-nq!QW(`l8g0hd0 zTL_rs<#FQCKapYQeb2-*sq|WH63G{mBoPWwOXC{1nFjXmG~{rr8jULA8B3}eeI9&6 zN}-;?2MNJY(O{dY@S%3jg1`d@=s5z}$F&*-o;DB@^G|V%3%Q+2W;^FN^HUZFzx6q@ z2H?LENn4UdHa1h*_@}h0-PLAd;*sBxeo;3q+t$FD`5-G5G+Ii2&)AQZPx*x?iGv_Y zBk7Kw!6AWGWUMp?`7%W&dhOkQY1T%zSZ8iPv&VMYkZx+ir=-}?{{H?&Ml(DZzIGvS zNkyovTcN?A^%74=el0pGs+xU-Q%rH^*Tv$~qqQq)8J;|TAj)4CCh0v=LqLN>^oTsH#CSht(;he%}O z&5d99%J9YIgYYUz#4CIAA-xQ261oUc49jgYGO~-k!ZL?KD_tK-&$qlipXhd2v%E0X zYf4HWjAMrs#0`QEb6>r}n#974=ZUw({6_+{ME&dhdesu3%_ zSbMZgBdc{bp2-o7zP*Mg6lg=(iNTi8MSbuCxRCez&fX%pzx)=p9_*Tt{)&gz&s*X( zjJ%vaeLhLk5E3n4YIsj2!s%Z8$_A=v$M>0AGnI2EzCSRvKKzU24TwtM4gS~RuwvC6 zYS|%ar~cWUH>51tMN09Cn$?+kauKlQ)^P?5nZSHoBqStqttBitThwz@SR_UgHP~Bc zW@iQBV8+jZ>j+?SDii70=xFHzm!_5vu@Hr#2uSeu$BDPs@d_mlVEH5hGv+%Mn;f3l zj|s7paP-5FLkhyM=Yyc>FoR{DY+>JX+sGp7)axS5`W4sVEd^ zkX%MALlqu*k=_4|~E6>1XLZ`~nmG32{dr)LUa!`*Q%2A1L9NeZ6EA=7@vo z@8jAeS^@ed(ZGrOSm}hqRK20012@#ll!xgb(ghvrBUge%(!ZK^49<^}TmDS8Mk{28 z?pN{jfLfAj3HaI+qRGL}jB2TIC{^C#n1mcHw~2LnpU|exMnqIgr#A~MmPW$ybL6EIhUmev<6)eZU;SG&%4`V>5@J~a=zgD z04=jV2!%3JK~rEdMOgS@D(woJ+0o7oO*@e)juEnGMIzPw8vD3Sayr>|7pB3ONG$JO z^+n5gV>;_VOGngRgxBIN^P46`8p6Y+w&bK@W58)w!t+@`O*B|#nlB#k?7=-cg9e>| z?0qlJxA#nHNFTkrf~$VfM-6g=bOl01I|HHCQ9CW)dYje|511{j4Vy({Ab31L0_S#m zbn-!FSia(sGN3fjs-(1-Zwl`u#)J)`dU_9+?V;J z#WI>MQB9d`8bfPRP?1y7w9DR1L1o{a*E(Q8lrgdlPZ=JY(x zMfs%D{Z^g6dhEKWbweB@UD_s5L2X2jyycn0};HL|XcMcyvS56nvW# z{dv35ZXijV59{Xk_N97@J=OCV))yt|^%c`PvkZ5&S65!~KH-a8z64Tx3k^05Cg1dN zbQ8=j08Q<@9=|V5*6MG82@h|i>WVq4f(h`;Qn<2PxBEU)Hu!;^MIVWlH?0QV!X~XE zX2U~>zT@=%I*pW)pMYYkq=EVIx-D0-C(EA@@nNZ;j96klHVx$H3;zBokFI6$!A#xx z3vfo<3B-%O)UOA1^fu?xm@OJ#*yLB<$a3x84`5MsV2^P~e;Gdb(SwXOxPN{B@hAUd zDe7!bT@KR3ywdP>t(%U{&a9%Jx^9L{v9yZf{R>&+xu_X2`Q*``bLML*@_6(lmi-*m zm2TjAuP9zub1Z!POPVdGa)S9=uK9cmxBy+HHg4R9C}ee`JW)L5#b+w>l1qmHkY zHebz5J^A>+|vvJOvp4y~)M&L-Wm`Oq&?k(H>*C{8x_`iA`MiVSvGi zPm+L(7enHNtIAhOl}L1B_T*U#LG*%|d%ED_)V%D``$Pt=DjAS>cApwfJ;MGM^Wy#i zv)s${OAnUBsLcG=SS}B`iIQRhWAL2NDHr!=%9N~vHFX#3(ck1Ie#$q zXcj+v%0C3)+8sLW$dNATrn1eC<54@*8VZahuLoW+X?h|M?~HVG8iu)FmCLChRw0tf z&;;3!BkBD16A&7k1IwQ8qZK<1p&Qw{ovQRgcD_=|X=wsO5_obL+UG&k`_edgh9OFC zRU|66jFr_VzNAtt9W*&&kayaI3 zS=l48DNY}D^FCV+FA?ddzrXP`*4Zm}`a}(F4FT4ZREnCab5m_4JPO42R8p3mY_b&u zJ8}t*VpyU><;4i8MNYF&p_nDzExQrv(T|=sIy0cw&&)cM1r}B*JiBXGv`BCcAl3Vw z>@|Zf`OJL$@8VlVVTKPNE3?P!nYr%M98^L}OihL4T3+7XCrmF|mz%9xw=3$g`I^|E zf!2@QLUEliw>P2iulI8rSpwbLQw3HDZn?yP9@h3%;wRR>!5YrnCDXhkU#FofU1en=^Z0a z=@|$J2ym|2wdsC>B8#|09FbdN7?$*qoMPrHYDxc}W;GqA0|)atfJ{2O$-*gDDYv2& z^5z^HWc}we=>^VWWkmpqC#!9^%s{(w*j%&@*wmanA}79tG;Wm9GSgpr^tpiV)TLpvTR=;Rod^K0z(gs46_ zMs_0hBZ=pS%V%imRp(+k2pjAlhl@=LT&$`Y#^E&>&G~4l`uFCNxBKp7Y{=$>juYhW;~j>hcU*mU?o_}9KxkY6rfPw-7} z4SZXWm0xs}LycD7>VJ|>!&O-(e1nWgSyQE zNF-%7R;v|d6(nz;r17~RZE2RvLMv<;FDxt!J#%{5|EV5sF?njNdV2i#dWr1bt6;RA z)6Yz)$|{0+jFHCrme~e*>Q+tHF+M-Uc}M00zgNjjlPFPgG}|3V>k!96(Mt8WeVP^c z!85L|Yu)!`N!fk+gq> z#pM@^yYn!Q>wInn$@e7aZ?o52Cc@VpruP5lih)Y0*J{3Pi2Z4iTj z_v++oI)AOLJPUY;@K#8=muXhk`^7tMRWG0L%H)o)0MX^o5tIt6uALJ@B?+~-I~_?H zUhmi@8SsfM??<=;d6gOE7!NqTlEl)%M52`bQ_{mgIi>0sZJLKBM3L51%gf8ZcfZeD z1jQ+?XXLZFGn{;&dZr(=88`Tzj`4=*2{vH6LC3Cklv!hS1sBcXb+?rC+DX_<9E)6iQwWQaF?@= z&27$?M_1!79)1GqpvtNJ{u >fowXXm{Jl;^^S$NMbOlWt=kbN;Qi=%Dyh<`eFcs zXa6$I+)qU+3O9n?2@e<7#T0d^r*Lw1J_rY;PvXq5;hnUFj`ri`i)f8p74k9Z4B*F& z1v445WAYFw`*k%H^xco60*wl-Es1?MMaczaPt1sW)h+giC@iQej@I!h$YfNnUzMn( z)pl*hiAkE9nr2g6#;8@KJA( z_Fai(V3OzwycZS3a^*za-Cay(Y3*ImY8jZBb=}o=9^a^=7JdAKWE)IC&%9zetCqq9 z%+iE1uV{{`=?lpR)zjNfuOpA&x3R(#*+=`}!Szxs!w{RB@a`D&tLw?2UnD_FYJI2@ zevhv{E7cp5Z31vv?~e%j6SmV*&lIT8S0Xz{Qym(HJkKZwV?Z(WSuOn!$EV3Wiu5-c z<_yzVT`X*DHhD|G0S?f2e~ zjijTgLyg2Y!u2w=(!WwgqAm!Uhb!$(yS=A+kZte;_Ty$D!=PP}!cFktlLs76S*2E+ z*{XseckcQ!i3l^rt92z>_xD0QsyabdFWKX;9Y-(av8Ua)N zp#xY(4n3Q8+mt1XY4zB&KE0v}EZ zcM4kr8dVh)75M=wGJ%2WclB?T(^bD@Jpq4ld8wonswn@v0Et{J-Pzd;2nZMf^L-j- z++gjI9Fj~$mTztPyl=e*U?x1eIbGyXGd2V?4c%7D%U>IL{F>2{s-g3hitBr3|H9}4 zfpp=jr2+)9y%iM|rGi2G&D@tvG8z}};!{YNoZRX-)2mmn9u#-i9v`o|gs(@w>8EU! zD+4njvMYSs(Dp+;f|IrUFS2T@vY|(9Z;D|zAGB&EQXeCk=GavpX9}}~ng<i`TuKLmjC;siLCgs*f$%#;E4qZ4EmqjKAk@uN}E_)rO0Y z%)VP|zx?2LJj{}N3QZ|0@1YhGZ5G0E;&l$jToO_nl`KW8+$&M)`Q@3$$Srfihzdlr z!8VJxv=ZSB=E=?eyBlx~0n5e*?yrHwr&yHKU4=n|`(J+6xVD>@t13thY9%M6iB*@r zvY#Eao~N~Jjj4q-Mr8oh`5fGl0#DgQywNGWMMn;NZv0Pg*M4``GBON}o_}^aos{q#(HBT67+qB*#v1ovdqJXyt_qZKL+xl)BSB+R?KKd7>P0-sJ?uI20X zSSB-MKxMyzw_E>_{UWSiK_$o9P)RXVa%>oJD+R;?@cHiedC}_&p%36m0 EAF;~=umAu6 literal 0 HcmV?d00001 diff --git a/images/tmp/37_guideline_1.png b/images/tmp/37_guideline_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2e35a7907638dd91e62103bad68447b097a6d6ad GIT binary patch literal 2812 zcmVKLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z04YgCK~#9!?8dPT05Avxu+aa14hv6IvL{d5CdtbY5fKp)5fKsjD?0$~C2{z O0000KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z04PaBK~#9!?9c%L000OApz8l;8zM|#lVkt@sBsDa0J=N?009600|4%+1OQ%ND#`!= N002ovPDHLkV1lJ`RSWKLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z04qsEK~#9!?8dPT03Zwlu)u%(e@?paL?wIjY5S7o<`WSS5fKp)5!sa)05gjR3a(TR Q)&Kwi07*qoM6N<$f}E#WMgRZ+ literal 0 HcmV?d00001 diff --git a/images/tmp/37_guideline_opa_2.png b/images/tmp/37_guideline_opa_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1844d7f771bda2d86906ca81c799925b705935b1 GIT binary patch literal 2812 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 LtDnm{r-UW|hA%l# literal 0 HcmV?d00001 diff --git a/images/tmp/imageeditor_bottom_arrow.png b/images/tmp/imageeditor_bottom_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..f2dc0d86d96fc8188cb797b28ef6be2ee7415c07 GIT binary patch literal 3152 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 literal 0 HcmV?d00001 diff --git a/images/tmp/imageeditor_right_arrow.png b/images/tmp/imageeditor_right_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..e07767d32288cc78e554643df22dc47b85072502 GIT binary patch literal 3136 zcmV-G48QY004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( zX+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHz3$DNjUR8-d%htIutdZEoQ0#b(FyTAa_ zdy`&8VVD_UC<6{NG_fI~0ue<-nj%P0#DLLIBvwSR5EN9f2P6n6F&ITuEN@2Ei>|D^ z_ww@lRz|vC zuzLs)$;-`!o*{AqUjza0dRV*yaMRE;fKCVhpQKsoe1Yhg01=zBIT!&C1$=TK@rP|Ibo3vKKm@PqnO#LJhq6%Ij6Hz*<$V$@wQAMN5qJ)hzm2h zoGcOF60t^#FqJFfH{#e-4l@G)6iI9sa9D{VHW4w29}?su;^hF~NC{tY+*d5%WDCTX za!E_i;d2ub1#}&jF5T4HnnCyEWTkKf0>c0%E1Ah>(_PY1)0w;+02c53Su*0<(nUqK zG_|(0G&D0Z{i;y^b@OjZ+}lNZ8Th$p5Uu}MTtq^NHl*T1?CO*}7&0ztZsv2j*bmJyf3G7=Z`5B*PvzoDiKdLpOAxi2$L0#SX*@cY z_n(^h55xYX#km%V()bZjV~l{*bt*u9?FT3d5g^g~#a;iSZ@&02Abxq_DwB(I|L-^b zXThc7C4-yrInE_0gw7K3GZ**7&k~>k0Z0NWkO#^@9q0fwx1%qj zZ=)yBuQ3=54Wo^*!gyjLF-e%Um=erBOdIALW)L%unZshS@>qSW9o8Sq#0s#5*edK% z>{;v(b^`kbN5rY%%y90wC>#%$kE_5P!JWYk;U;klcqzOl-UjcFXXA75rT9jCH~u<) z0>40zCTJ7v2qAyk54cquI@7b&LHdZ`+zlTss6bJ7%PQ)z$cROu4wBhpu-r)01) zS~6}jY?%U?gEALn#wiFzo#H}aQ8rT=DHkadR18&{>P1bW7E`~Y4p3)hWn`DhhRJ5j z*2tcg9i<^OEt(fCg;q*CP8+7ZTcWhYX$fb^_9d-LhL+6BEtPYWVlfKTBusSTASKKb%HuWJzl+By+?gkLq)?+BTu761 zjmyXF)a;mc^>(B7bo*HQ1NNg1st!zt28YLv>W*y3CdWx9U8f|cqfXDAO`Q48?auQq zHZJR2&bcD49Ip>EY~kKEPV6Wm+eXFV)D)_R=tM0@&p?(!V*Qu1PXHG9o^ zTY0bZ?)4%01p8F`JoeS|<@=<@RE7GY07EYX@lwd>4oW|Yi!o+Su@M`;WuSK z8LKk71XR(_RKHM1xJ5XYX`fk>`6eqY>qNG6HZQwBM=xi4&Sb88?zd}EYguc1@>KIS z<&CX#T35dwS|7K*XM_5Nf(;WJJvJWRMA($P>8E^?{IdL4o5MGE7bq2MEEwP7v8AO@ zqL5!WvekBL-8R%V?zVyL=G&{be=K4bT`e{#t|)$A!YaA?jp;X)-+bB;zhj`(vULAW z%ue3U;av{94wp%n<(7@__S@Z2PA@Mif3+uO&y|X06?J#oSi8M;ejj_^(0<4Lt#wLu#dYrva1Y$6_o(k^&}yhSh&h;f@JVA>W8b%o zZ=0JGnu?n~9O4}sJsfnnx7n(>`H13?(iXTy*fM=I`sj`CT)*pTHEgYKqqP+u1IL8N zo_-(u{qS+0<2@%BCt82d{Gqm;(q7a7b>wu+b|!X?c13m#p7cK1({0<`{-e>4hfb-U zsyQuty7Ua;Ou?B?XLHZaol8GAb3Wnxcu!2v{R_`T4=x`(GvqLI{-*2AOSimk zUAw*F_TX^n@STz9kDQ z$NC=!KfXWC8h`dn#xL(D3Z9UkR7|Q&Hcy#Notk!^zVUSB(}`#4&lYA1f0h2V_PNgU zAAWQEt$#LRcH#y9#i!p(Udq2b^lI6wp1FXzN3T;~FU%Lck$-deE#qz9yYP3D3t8{6 z?<+s(e(3(_^YOu_)K8!O1p}D#{JO;G(*OVghDk(0R9Hv7*u6^wK@bJ-6G5;N1VON} z3J9rErLs*W*jfpKt$%+1R=f`*l=oYKWFyf zk>Zm3vCQ7?Y*xy$yeNv|63KG`oFUi922yB;072#n*~|+)CCg#M2@6TAJEjcFHzSJknjz%l``5;kmw82ibZ2UqF=~y3>piX zx(@IA7#Y_wV+(KlrOFRBTe zx}H^0ZP3(p1azHnE|Bm8vYQhmI?4&o+m;;Q6wsnE(+1gkHge6DRoKpooxE(t#JJKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0004SNkl&(?5!W8^zuT~#_sIA*-rnLU9+>}XLjEIy|-Igmf=AAzy!DkzBL!#b^zM| zQs5Z)0`4^z4;%o$2rR%IkoXKd1TKG#y#gH{fzN?y&Ug#>kgGSqZQvbDqx$f#(YE?MM(d>IB{`2(ls_0rR?m zBY|yO9;d$ewsYVo;7rL5r{dqvfUkgC#bjgrwM>A!QYUCDHi?J8VA0ef$jUg*Oba-a z9oWOI24y@wa1j`mS+i>c+y_R~r$~}YTm`tYxhqwEp$V{6`gB-Z=K@<7C`ua1kt_s$ zv@HP@HJ78g5jc^?(HE^c@Kzr1A+W$d9RP2uAPm+T#T01br+UD6{YT1DvlVxwG4L74 f%?1BMi=P1iC;l*i8Cm`=00000NkvXXu0mjf@p92d literal 0 HcmV?d00001 diff --git a/images/vertical/camera_mode_bg_ver.png b/images/vertical/camera_mode_bg_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ad3c416167afa1c4ac4fecb343364a6c371593 GIT binary patch literal 3770 zcmaJ^c|4R|{}!T%ge(!$q(WK7Rx?>L3nmS+7h+}%CbO9t8cIU4MGJ{UmItLq)@0w8 zLXD7_gb*{E_jGKBwF>=5C05F1Bqh(8wW4Ky{Ggdiy}^;TC_#;(wU{{pfTGL`Ub+rAykE^tH)UUmXw_4Bpbv)6?Q3v}nO3I+~$H zq85fl+a2I+^N7CKG;*qMaX^ zPNw;hDFB#*A;1Ms@+M!R{Y0Zs5G094N0YEPB-{kZ=WFBf-VmsP1qfjPg&G!6!i|hR#F6_75Eh7*q{K#+|6(5B2wxE)UfS(

    2J3s@I0KG_&TJ>{ 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 literal 0 HcmV?d00001 diff --git a/sounds/cam_start_02.wav b/sounds/cam_start_02.wav new file mode 100644 index 0000000000000000000000000000000000000000..f02ac17a9d80e71b0e085c0ec55237a4b9d133c6 GIT binary patch literal 20162 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 literal 0 HcmV?d00001 diff --git a/sounds/cam_stop_01.wav b/sounds/cam_stop_01.wav new file mode 100644 index 0000000000000000000000000000000000000000..cccf7dc49ffca0a88363449d8aa2ede349c20daf GIT binary patch literal 39852 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

    e?VBj3Sq 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 literal 0 HcmV?d00001 diff --git a/sounds/cam_stop_03.wav b/sounds/cam_stop_03.wav new file mode 100644 index 0000000000000000000000000000000000000000..5f89edd80c68ea6c62c822dd2d279f65dde61332 GIT binary patch literal 26584 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 literal 0 HcmV?d00001 diff --git a/sounds/count.wav b/sounds/count.wav new file mode 100644 index 0000000000000000000000000000000000000000..e2bdb685df54aa3306f4a9396fbfe57ecbb6eb4b GIT binary patch literal 26700 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 literal 0 HcmV?d00001 diff --git a/src/CamDeviceCapacity.cpp b/src/CamDeviceCapacity.cpp new file mode 100755 index 0000000..206e159 --- /dev/null +++ b/src/CamDeviceCapacity.cpp @@ -0,0 +1,183 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 + +#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_Effect.bChecked = FALSE; + m_Zoom.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_EDIR_SHORTCUT; + 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::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::GetCamDevZoomCaps(int *min, int *max) +{ + 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 ((min == 0) && (max == 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; +} + +// private +bool +CCamDeviceCapacity::IsSupported(unsigned int type, CamDeviceType deviceType, void *user_data) +{ + bool ret = FALSE; + unsigned int uCaps = 0; + + switch(type) { + case CAM_CP_FUNC_EFFECT_MODE: + { + if (GetCamDevEffectCaps(&uCaps, user_data)) + ret = m_Effect.bSupported; + } + break; + case CAM_CP_FUNC_EDIR_SHORTCUT: + case CAM_CP_FUNC_TIMER: + case CAM_CP_FUNC_GUIDE_LINE: + case CAM_CP_FUNC_RESET: + ret = TRUE; + break; + default: + break; + } + + return ret; +} + diff --git a/src/CamTypeConverter.cpp b/src/CamTypeConverter.cpp new file mode 100755 index 0000000..7718a82 --- /dev/null +++ b/src/CamTypeConverter.cpp @@ -0,0 +1,104 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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::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_AQUA: + ret = CAM_CP_EFFECT_AQUA; + break; + case CAMERA_ATTR_EFFECT_GRAY: + ret = CAM_CP_EFFECT_GRAY; + break; + case CAMERA_ATTR_EFFECT_ANTIQUE: + ret = CAM_CP_EFFECT_ANTIQUE; + break; + case CAMERA_ATTR_EFFECT_EMBOSS: + ret = CAM_CP_EFFECT_EMBOSS; + break; + case CAMERA_ATTR_EFFECT_OUTLINE: + ret = CAM_CP_EFFECT_OUTLINE; + 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_AQUA: + ret = CAM_CP_EFFECT_AQUA; + break; + case CAM_SETTINGS_EFFECTS_GRAY: + ret = CAM_CP_EFFECT_GRAY; + break; + case CAM_SETTINGS_EFFECTS_ANTIQUE: + ret = CAM_CP_EFFECT_ANTIQUE; + break; + case CAM_SETTINGS_EFFECTS_EMBOSS: + ret = CAM_CP_EFFECT_EMBOSS; + break; + case CAM_SETTINGS_EFFECTS_OUTLINE: + ret = CAM_CP_EFFECT_OUTLINE; + break; + default: + break; + } + + return ret; +} + + diff --git a/src/cam.c b/src/cam.c new file mode 100755 index 0000000..949885f --- /dev/null +++ b/src/cam.c @@ -0,0 +1,731 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include +#include +#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" + + +static int __is_idle_lock(void); + +static int _is_running(void) +{ +#ifdef CHECK_RUNNING_PROC + GDir *dir = NULL; + GError *error = NULL; + const gchar *dir_name; + char path[255] = { 0, }; + char proc_name[255] = { 0, }; + int fd = 0, count = 0; + dir = g_dir_open("/proc", 0, &error); + + if (dir) { + while ((dir_name = g_dir_read_name(dir)) != NULL) { + if (!isdigit(dir_name[0])) + continue; + + snprintf(path, sizeof(path), "/proc/%s/cmdline", + dir_name); + fd = open(path, O_RDONLY); + read(fd, proc_name, sizeof(proc_name) - 1); + close(fd); + if (strstr(proc_name, "camera")) { + static int pid = 0; + count++; + if (count > 1) { + g_dir_close(dir); + printf + ("camera application[PID: %d] is already running !!!!\n\n", + pid); + return 1; + } + pid = atoi(dir_name); + } + } + g_dir_close(dir); + } else { + printf("cannot open proc directory [%s]", error->message); + } + + if (error) + g_error_free(error); + + return 0; +#else + return 0; +#endif +} + +static bool cam_create(void *data) +{ + CAM_TA_ACUM_ITEM_BEGIN("==cam_create==", 0); + cam_debug(LOG_UI, "************** cam_create START **************"); + + if (__is_idle_lock()) { + return FALSE;/*fix crash*/ + } + + struct appdata *ad = data; + Ecore_X_Display *dpy = NULL; + debug_fenter(LOG_CAM); + + /* create main window */ + ad->win_main = cam_app_create_win(PACKAGE); + cam_retvm_if(ad->win_main == NULL, FALSE, "cam_app_create_win failed"); +#ifdef EFL_TEMP_CODE + cam_win_transparent_set(ad); +#endif + /* remove effect */ + dpy = ecore_x_display_get(); + if (dpy) { + Ecore_X_Window win; + win = elm_win_xwindow_get(ad->win_main); + + printf("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); + } + + /* set indicator. */ +#ifndef CAMERA_MACHINE_I686 + elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE); +#endif + + + 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); + ad->launch_type = CAM_LAUNCH_FIRST; + + /* camera application initialization */ + CAM_TA_ACUM_ITEM_BEGIN(" cam_app_init", 0); + if (!cam_app_init(ad)) + return FALSE; + CAM_TA_ACUM_ITEM_END(" cam_app_init", 0); + + /*add camera exteral engine lib load*/ + open_cam_ext_handle(); + evas_object_show(ad->win_main); + + cam_debug(LOG_UI, "******** cam_create END**********"); + CAM_TA_ACUM_ITEM_END("==cam_create==", 0); + + return true; +} + + + +static void cam_terminate(void *data) +{ + cam_debug(LOG_UI, "############## cam_terminate ##############"); + + struct appdata *ad = (struct appdata *)data; + if (!ad) return; + ad->appcore_state = CAM_APPCORE_TERMINATE_STATE; + + + debug_fenter(LOG_CAM); + + CAM_TA_ACUM_ITEM_BEGIN("cam_terminate", 0); + + cam_key_grab_deinit(ad); + +#ifdef USE_FIFO_THREAD + cam_app_FIFO_thread_exit(); +#endif + +#ifdef USE_FILE_REG_THREAD + cam_app_file_register_thread_exit(ad); +#endif + + CAM_TA_ACUM_ITEM_BEGIN(" cam_app_quit", 0); + cam_app_quit(ad); + CAM_TA_ACUM_ITEM_END(" cam_app_quit", 0); + + power_unlock_state(POWER_STATE_NORMAL); + + CAM_TA_ACUM_ITEM_END("app_terminate", 0); + + CAM_TA_ACUM_ITEM_SHOW_RESULT_TO(CAM_TA_SHOW_FILE); + CAM_TA_RELEASE(); + + close_cam_ext_handle(); +} + +static void cam_pause(void *data) +{ + cam_debug(LOG_UI, "############## cam_pause ##############"); + + struct appdata *ad = (struct appdata *)data; + cam_ret_if(ad == NULL); + CamAppData *camapp = ad->camapp_handle; + cam_ret_if(camapp == NULL); + debug_fenter(LOG_CAM); + ad->appcore_state = CAM_APPCORE_PAUSE_STATE; + + if ( ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) { + int mm_state = 0; + mm_state = cam_mm_get_state(); + ad->appcore_state = CAM_APPCORE_PAUSE_STATE; + + if (mm_state < CAMERA_STATE_CAPTURING) { /* MM_CAMCORDER_STATE_CAPTURING < MM_CAMCORDER_STATE_RECORDING */ + if (ad->imageviewer_ug) { /*Is this paused by Video player ? */ + DEBUG_TRACE("###### ug_pause() ######"); + ug_pause(); + return; + } else { + cam_app_exit(ad); + return; + } + } else if (mm_state == RECORDER_STATE_RECORDING && camapp->camera_mode == CAM_CAMCORDER_MODE) { + if (!cam_video_record_stop(ad)) { + DEBUG_TRACE("record stop fail"); + return; + } + } + } + + if (ad->imageviewer_ug) { + DEBUG_TRACE("###### ug_pause() ######"); + ug_pause(); + } + + if (ad->foucs_out_from_quickview == TRUE) { + DEBUG_TRACE("image viewer UG->image editor"); + ad->foucs_out_from_quickview = FALSE; + return; + } + CAM_TA_ACUM_ITEM_BEGIN("app_stop", 0); + DEBUG_TRACE(" "); + ad->foucs_out_from_quickview = FALSE; + ad->launch_type = CAM_LAUNCH_RELAUNCH; /* set launch type */ + cam_app_pause(ad); + + power_unlock_state(POWER_STATE_NORMAL); + CAM_TA_ACUM_ITEM_END("app_stop", 0); + +} + +static void cam_resume(void *data) +{ + cam_debug(LOG_UI, "############## cam_resume ##############"); + + struct appdata *ad = (struct appdata *)data; + cam_ret_if(ad == NULL); + debug_fenter(LOG_CAM); + DEBUG_TRACE(" "); + CamAppData *camapp = ad->camapp_handle; + cam_ret_if(camapp == NULL); + + ad->appcore_state = CAM_APPCORE_RESUME_STATE; + + if (!cam_check_dir()) { + cam_app_notice_popup(data, "Cannot make default path", + cam_app_timeout_notice_response_cb); + return; + } + if (!cam_utils_check_torchlight_status(ad)) { + DEBUG_TRACE("Can not get torchlight status"); + } + + if (ad->imageviewer_ug) { /* bug fix camera app overlab with imageviewer_ug */ + DEBUG_TRACE("####### ug_resume() ######"); + ug_resume(); + return; + } + else + 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); + } + +} + +void *cam_start_thread_run(void *data) +{ + struct appdata *ad = (struct appdata *)data; + cam_retv_if(ad == NULL, NULL); + + if (cam_app_start(ad) == FALSE) + cam_critical(LOG_CAM, "cam_app_start failed"); + + pthread_exit(NULL); + + return NULL; +} + +static void cam_service(service_h service, void *user_data) +{ + CAM_TA_ACUM_ITEM_BEGIN("==cam_service==", 0); + cam_debug(LOG_UI, "############## cam_service START##############"); + struct appdata *ad = (struct appdata *)user_data; + cam_ret_if(ad == NULL); + CamAppData *camapp = ad->camapp_handle; + cam_ret_if(camapp == NULL); + + DEBUG_TRACE("ad->launch_type = %d ", ad->launch_type); + gint latest_mode = 0; + ad->appcore_state = CAM_APPCORE_RESET_STATE; + + if (!cam_check_dir()) { + cam_app_notice_popup(ad, "Cannot make default path", + cam_app_timeout_notice_response_cb); + return; + } + if (!cam_utils_check_torchlight_status(ad)) { + DEBUG_TRACE("Can not get torchlight status"); + } + if (ad->launch_type == CAM_LAUNCH_IS_ALREADY_RUNNING) { + cam_app_notice_popup(ad, "Camera is alreay running.", + cam_app_popup_response_cb); + return; + } + /* 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_debug(LOG_UI, "service_get_operation failed"); + return; + } + + if ( operation == NULL ) + { + cam_debug(LOG_UI, "operation is null"); + return; + } + + ret = service_clone(&ad->service_handle, service); + if (ret != SERVICE_ERROR_NONE) + { + cam_debug(LOG_UI, "service_clone failed"); + return; + } + + CamExeArgs *args = (CamExeArgs *)malloc(sizeof(CamExeArgs)); + if (args == NULL) { + return; + } + memset(args,0,sizeof(CamExeArgs)); + + if (!cam_app_parse_args(args, service)) { + return; + } + ad->exe_args = args; + + 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; + + + 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; + } + CAM_TA_ACUM_ITEM_END(" cam_handle_init", 0); + + cam_app_init_with_args(ad); + } else { + ad->launching_mode = CAM_LAUNCHING_MODE_NORMAL; + + latest_mode = cam_app_get_latest_mode(); + + CAM_TA_ACUM_ITEM_BEGIN(" cam_handle_init", 0); + if (!cam_handle_init(ad, latest_mode)) { + cam_critical(LOG_CAM, "cam_handle_init failed"); + return; + } + CAM_TA_ACUM_ITEM_END(" cam_handle_init", 0); + } + + if (ad->launch_type == CAM_LAUNCH_FIRST) { + debug_fenter(LOG_CAM); + + if (!cam_condition_check_to_start_camera(ad)) { + cam_critical(LOG_CAM, "cannot start camera"); + return; + } + + if (!open_cam_handle((void*)ad)) { + cam_critical(LOG_CAM, "open_cam_handle failed"); + return; + } + + 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; + } + + 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 = malloc(sizeof(ad->setting_menu_composer)); + cam_compose_setting_menu(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); + } else { + /* RELUNCHING!! //in paused -> Camera process is called by External process */ + + cam_debug(LOG_SYS, "RELUNCHING !!!"); + + /*remove GUI*/ + if (ad->imageviewer_ug) { + DEBUG_TRACE("destory imageviewer"); + ug_destroy(ad->imageviewer_ug); + ad->imageviewer_ug = NULL; + } + + cam_layout_del_all(ad); + + power_lock_state(POWER_STATE_NORMAL, 0); + + if (ad->exe_args == NULL) + return; + + if (!cam_condition_check_to_start_camera(ad)) { + cam_critical(LOG_CAM, "cannot start camera"); + return; + } + + 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; + } + + ResetCaps(); + + 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); + + evas_object_raise(ad->win_main); + } + + cam_debug(LOG_UI, "############## cam_service END##############"); + CAM_TA_ACUM_ITEM_END("==cam_service==", 0); +} + +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; + +} + +#define CAM_EXT_LIB_PATH "/usr/lib/libcamera-external-engine.so" + +void *handle = NULL; +gboolean open_cam_ext_handle() +{ + + if (!handle) { + handle = dlopen(CAM_EXT_LIB_PATH, RTLD_NOW); + if ( !handle ) { + return FALSE; + } + } + return TRUE; +} + +void close_cam_ext_handle() +{ + + if (handle) { + dlclose(handle); + handle = NULL; + } +} + +gboolean open_cam_handle(void* data) +{ + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; + int session_type; + 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) { + DEBUG_TRACE("session_type : SOUND_SESSION_TYPE_SHARE"); + session_type = SOUND_SESSION_TYPE_SHARE; + } else { + DEBUG_TRACE("session_type : SOUND_SESSION_TYPE_EXCLUSIVE"); + session_type = SOUND_SESSION_TYPE_EXCLUSIVE; + } + if (!cam_mm_session_init(session_type)) { + cam_critical(LOG_MM, "cam_mm_session_init faild"); + return FALSE; + } + +/*open camera handle*/ + if (!cam_mm_create(CAM_DEVICE_MEGA, camapp->camera_mode)) { + cam_critical(LOG_MM, "cam_mm_create failed"); + cam_app_notice_popup(ad, "UNABLE TO LAUNCH CAMERA", cam_app_timeout_notice_response_cb); + + return FALSE; + } + return TRUE; + +} + +static void cam_low_power_cb(void *data) +{ + struct appdata *ad = (struct appdata *)data; + + cam_info(LOG_SYS, "Low battery !!"); + + 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 void cam_update_ts_cb(void *data) +{ + struct appdata *ad = (struct appdata *)data; + + cam_info(LOG_SYS, "#################Update String !!"); + + cam_retm_if(ad == NULL, "appdata is NULL"); + char *path = NULL; + + elm_win_indicator_mode_set(ad->win_main, 0); + + path = vconf_get_str(VCONFKEY_LANGSET); + if (!path) { + return; + } + + + /* update main */ + update_ts_main(data); + + enum ug_event ev = UG_EVENT_LANG_CHANGE; + ug_send_event(ev); +} + +static void cam_device_orientation_cb(app_device_orientation_e mode, void *data) +{ + struct appdata *ad = (struct appdata *)data; + cam_retm_if(ad == NULL, "appdata is NULL"); + if (ad->appcore_state == CAM_APPCORE_TERMINATE_STATE + || ad->appcore_state == CAM_APPCORE_PAUSE_STATE) {/*NOTE: in pause state, and terminate state, not cb*/ + return; + } + cam_retm_if(ad->camapp_handle == NULL, "ad->camapp_handle is NULL"); + + cam_debug(LOG_UI, "rotated : %d", mode); + + /*TODO: now just return, if the last rotated is not finished*/ + if (ad->is_rotating) { + return; + } + + 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; + } + if (ug) { + enum ug_mode md = ug_get_mode(ug); + if (md == UG_MODE_FULLVIEW) { + if(ev == UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN) + return; + elm_win_rotation_with_resize_set(ad->win_main, angle); + /* send event to ug */ + ug_send_event(ev); + } + } else { + + + unsigned int *main_pipe_op_type = NULL; + main_pipe_op_type = (unsigned int *)calloc(1, sizeof(unsigned int)); + if (main_pipe_op_type) + *main_pipe_op_type = CAM_MAIN_PIPE_OP_TYPE_ROTATE_ANIMATOR; + ecore_pipe_write(ad->main_pipe, (void *)main_pipe_op_type, sizeof(unsigned int)); + } +} + +int main(int argc, char *argv[]) +{ + DEBUG_TRACE(" "); + + int i = 0; + struct appdata ad; + if (_is_running()) + return 0; + + /*set appdata init variable*/ + memset(&ad, 0x0, sizeof(struct appdata)); + + g_type_init(); + + CAM_TA_INIT(); + DEBUG_TRACE("argc = %d", argc, argv); + for (i = 0; i < argc; i++) { + DEBUG_TRACE("argv[%d] = %s", i, argv[i]); + } + + app_event_callback_s event_callbacks; + + event_callbacks.create = cam_create; + event_callbacks.terminate = cam_terminate; + event_callbacks.pause = cam_pause; + event_callbacks.resume = cam_resume; + event_callbacks.service = cam_service; + + event_callbacks.language_changed = cam_update_ts_cb; + event_callbacks.low_battery = cam_low_power_cb; + event_callbacks.device_orientation = cam_device_orientation_cb; + + event_callbacks.low_memory = NULL; + event_callbacks.region_format_changed = NULL; + + setenv("ELM_ENGINE", "gl", 1); /*add open gl support for 3D slide_show of image viewer*/ + + return app_efl_main(&argc, &argv, &event_callbacks, &ad); + +} + +int update_ts_main(void *data) +{ + DEBUG_TRACE(" "); + + struct appdata *ad = (struct appdata *)data; + + if (ad && ad->layout_main) + edje_object_part_text_set(_EDJ(ad->layout_main), "txt_title", dgettext("sys_string", "IDS_COM_BODY_CAMERA")); + + return TRUE; +} +//end file diff --git a/src/cam_animation.c b/src/cam_animation.c new file mode 100644 index 0000000..e8aefd0 --- /dev/null +++ b/src/cam_animation.c @@ -0,0 +1,389 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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" + +static gboolean __cam_save_captured_file(void *data) +{ + cam_debug(LOG_MM, " __cam_save_captured_file \n\n "); + + struct appdata *ad = (struct appdata *)data; + + CamAppData *camapp = NULL; + + gchar *filename = NULL; + FILE *fp = NULL; + + cam_retvm_if(ad == NULL, FALSE, "appdata is NULL"); + camapp = ad->camapp_handle; + cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL"); + +/* save file */ + + filename = cam_app_get_next_filename(); + if (filename == NULL) { + cam_critical(LOG_SYS, " Get next filename FAILED"); + return FALSE; + } + + fp = fopen(filename, "w+"); + if (fp == NULL) { + cam_critical(LOG_SYS, "FileOPEN error!!"); + return FALSE; + } else { + cam_debug(LOG_SYS, "FileOPEN success"); + + if (fwrite + (ad->capture_datatype.data, ad->capture_datatype.length, 1, + fp) != 1) { + cam_critical(LOG_SYS, "File write error!!"); + fclose(fp); + return FALSE; + } + /*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); + + free(ad->capture_datatype.data); + + return TRUE; + +} + +static Eina_Bool __cam_shutter_image_move_animate(void *data) +{ + cam_debug(LOG_MM, " __cam_shutter_image_move_animate \n\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, "cam_handle is NULL"); + + Evas_Coord des_x_l, des_x_r, des_y_t, des_y_d, des_w, des_h; + + Evas_Coord src_x_l = ad->shutter_src_rect.x; + Evas_Coord src_x_r = + ad->shutter_src_rect.x + ad->shutter_src_rect.width; + Evas_Coord src_y_t = ad->shutter_src_rect.y; + Evas_Coord src_y_d = + ad->shutter_src_rect.y + ad->shutter_src_rect.height; + + Evas_Coord cur_x_l, cur_x_r, cur_y_t, cur_y_d, cur_w, cur_h; + + static float cur_progress = 0.0; + + des_x_l = ad->shutter_des_rect.x; + des_y_t = ad->shutter_des_rect.y; + des_w = ad->shutter_des_rect.width; + des_h = ad->shutter_des_rect.height; + + des_x_r = des_x_l + des_w; + des_y_d = des_y_t + des_h; + + cur_x_l = src_x_l * (1.0 - cur_progress) + des_x_l * cur_progress; + cur_x_r = src_x_r * (1.0 - cur_progress) + des_x_r * cur_progress; + cur_y_t = src_y_t * (1.0 - cur_progress) + des_y_t * cur_progress; + cur_y_d = src_y_d * (1.0 - cur_progress) + des_y_d * cur_progress; + + cur_w = cur_x_r - cur_x_l; + cur_h = cur_y_d - cur_y_t; + + evas_object_resize(ad->shutter_move_image, cur_w, cur_h); + evas_object_move(ad->shutter_move_image, cur_x_l, cur_y_t); + + cur_progress += 0.1; + + if (cur_progress > 1.0) { + edje_object_signal_emit(_EDJ(ad->shutter_screen), "bright", ""); + toolbar_update_quickview_thumbnail_by_screennail(ad); + DEL_EVAS_OBJECT(ad->shutter_move_image); + + if (camapp->camera_mode == CAM_CAMERA_MODE) { + +#if 1 + /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */ + CamIdlerItem *item = NULL; + item = (CamIdlerItem *) g_malloc(sizeof(CamIdlerItem)); + if (item == NULL) + return FALSE; + + if (item) { + item->data = ad; + 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); + } else { + cam_critical(LOG_UI, + "malloc failed for CamIdlerItem", + item->idler); + } +#endif + } + + cur_progress = 0.0; + + return EINA_FALSE; + } else { + return EINA_TRUE; + } +} + +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; + + int window_width, window_height; + int pre_width, pre_height; + + 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; + + if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) + evas_object_geometry_get(ad->backbtn, &x, &y, &w, &h); + else + evas_object_geometry_get(ad->toolbar.quickview_item.edje, &x, &y, &w, &h); + + ad->shutter_des_rect.x = x; + ad->shutter_des_rect.y = y; + ad->shutter_des_rect.width = w; + ad->shutter_des_rect.height = h; + + if (pre_width < window_width) { + ad->shutter_src_rect.x = (window_width - pre_width) / 2; + ad->shutter_src_rect.width = pre_width; + } else { + ad->shutter_src_rect.x = 0; + ad->shutter_src_rect.width = window_width; + } + + if (pre_height < window_height) { + ad->shutter_src_rect.y = (window_height - pre_height) / 2; + ad->shutter_src_rect.height = pre_height; + } else { + ad->shutter_src_rect.y = 0; + ad->shutter_src_rect.height = window_height; + } + +#if 0 + ad->shutter_move_image = + evas_object_image_add(evas_object_evas_get(ad->shutter_screen)); + + evas_object_image_filled_set(ad->shutter_move_image, 1); + evas_object_image_file_set(ad->shutter_move_image, camapp->filename, + NULL); +#endif + + evas_object_stack_above(ad->shutter_move_image, ad->shutter_screen); + + evas_object_resize(ad->shutter_move_image, ad->shutter_src_rect.width, + ad->shutter_src_rect.height); + evas_object_move(ad->shutter_move_image, ad->shutter_src_rect.x, + ad->shutter_src_rect.y); + + evas_object_show(ad->shutter_move_image); + + edje_object_signal_emit(_EDJ(ad->shutter_screen), "dim", ""); + + ecore_animator_frametime_set(0.03); + ecore_animator_add(__cam_shutter_image_move_animate, ad); + + return EINA_TRUE; +} + +static gboolean cam_app_create_screennail_and_start_animation(void *data) +{ + struct appdata *ad = (struct appdata *)data; + + MMCamcorderCaptureDataType *scrnl = NULL; + + if (cam_mm_get_screennail(&scrnl)) { + int output_width, output_height; + + imgp_info _imgp_info; /* init imgp_info _imgp_info */ + _imgp_info.imgp_gstcs_info = (imgp_gstcs_internal_info *) + malloc(sizeof(imgp_gstcs_internal_info)); + cam_retv_if(_imgp_info.imgp_gstcs_info == NULL, FALSE); + + imgp_dlopen_type imgp_type = IMGP_GSTCS; + + _imgp_info.imgp_gstcs_info->input_buf = (char *)malloc((sizeof(char)) * scrnl->length); /* nvbuffer_size is scrnl->length */ + cam_retv_if(_imgp_info.imgp_gstcs_info->input_buf == NULL, + FALSE); + + memcpy(_imgp_info.imgp_gstcs_info->input_buf, scrnl->data, scrnl->length); /* nvbuffer_pointer is scrnl->data */ + + mm_set_imgp_dlopen_info(imgp_type, &_imgp_info, "NV12", scrnl->width, scrnl->height, "RGBA8888", scrnl->width, scrnl->height, 0); /* set input value to imgp_dlopen */ + + int ret = mm_imgp_dlopen(imgp_type, &_imgp_info); /* after this function call below value is set. The conversion time is about 120ms */ + if (ret == 0) { + char *output_buf = + _imgp_info.imgp_gstcs_info->output_buf; + output_width = _imgp_info.imgp_gstcs_info->output_stride; /* width */ + output_height = _imgp_info.imgp_gstcs_info->output_elevation; /* height */ + + int new_width; + int new_height; + + char *tmp_buf = (char *)malloc((sizeof(char)) * output_width * output_height * 4); /* nvbuffer_size is scrnl->length */ + cam_retv_if(tmp_buf == NULL, FALSE); + + if (!cam_utils_image_rotate + (output_buf, output_width, output_height, tmp_buf, + &new_width, &new_height, (ad->angle + 90) % 360)) { + free(output_buf); + free(tmp_buf); + free(_imgp_info.imgp_gstcs_info->input_buf); + free(_imgp_info.imgp_gstcs_info); + return FALSE; + } + + ad->shutter_move_image = + evas_object_image_add(evas_object_evas_get + (ad->shutter_screen)); + + evas_object_image_smooth_scale_set + (ad->shutter_move_image, 1); + evas_object_image_filled_set(ad->shutter_move_image, 1); + + evas_object_image_alpha_set(ad->shutter_move_image, 0); + evas_object_image_size_set(ad->shutter_move_image, + new_width, new_height); + +/*rename param data to img_data,for this param has save name with others in the same func*/ + unsigned char *img_data = + evas_object_image_data_get(ad->shutter_move_image, + 1); + + if (img_data == NULL) { + DEBUG_TRACE("evas_object_image_data_get FAILED!"); + return FALSE; + } + + memcpy(img_data, tmp_buf, new_width * new_height * 4); /* nvbuffer_pointer is scrnl->data */ + + evas_object_image_data_set(ad->shutter_move_image, + (void *)img_data); + evas_object_image_data_update_add + (ad->shutter_move_image, 0, 0, new_width, + new_height); + +/* evas_object_image_save(ad->shutter_move_image,"/opt/media/screennail.jpg",NULL,"quality=100 compress=9"); */ + free(output_buf); + free(tmp_buf); + + cam_start_capture_animation(ad); + + } + + free(_imgp_info.imgp_gstcs_info->input_buf); + free(_imgp_info.imgp_gstcs_info); + + return TRUE; + + } else + return FALSE; +} + +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; + + DEL_EVAS_OBJECT(ad->shutter_screen); + +} + +static gboolean cam_app_shutter_screen_show(void *data) +{ + struct appdata *ad = data; + Evas_Coord witdh = 0, height = 0; + + char *group_name = "shutter_image"; + + CAM_TA_ACUM_ITEM_BEGIN(" cam_app_shutter_screen_show", 0); + + if (ad->shutter_screen) { + evas_object_del(ad->shutter_screen); + ad->shutter_screen = NULL; + } + + ad->shutter_screen = + cam_app_load_edj(ad->win_main, CAM_MAIN_LAYOUT_EDJ_NAME, + group_name); + if (ad->shutter_screen == NULL) { + cam_critical(LOG_UI, "shutter_screen load failed "); + CAM_TA_ACUM_ITEM_END(" cam_app_shutter_screen_show", 0); + return FALSE; + } + + evas_object_geometry_get(ad->win_main, NULL, NULL, &witdh, &height); + evas_object_resize(ad->shutter_screen, witdh, height); + /* evas_object_resize(ad->black_screen, ad->win_width, ad->win_height); */ + + evas_object_lower(ad->shutter_screen); + evas_object_show(ad->shutter_screen); + evas_object_show(ad->win_main); +/* evas_render(ad->evas); */ + + 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); + +/* ecore_timer_add(0.1, cam_app_shutter_timer_cb, ad); */ + + CAM_TA_ACUM_ITEM_END(" cam_app_shutter_screen_show", 0); + return TRUE; +} +#endif diff --git a/src/cam_app.c b/src/cam_app.c new file mode 100755 index 0000000..63dcb0c --- /dev/null +++ b/src/cam_app.c @@ -0,0 +1,7642 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include +#include +#include +#include +#include + +#include "cam.h" +#include "cam_app.h" +#include "edc_string.h" +#include "cam_sound.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_devman.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 "camera_utils.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 ZSL_MAX_REL (1280*720) /* 1m wide */ +#define FOCUS_FOCUSED_TIME_OUT 3 +#define FOCUS_FAILED_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 LONG_PRESS_INTERVAL 0.5 /* 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" + +#define SHUTTER_W_RATIO 0.1 +#define SHUTTER_H_RATIO 0.34 +#define SCREEN_RATIO 1.0 +#define AUTO_CLOSE_COUNT 10 +/* #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); +static void cam_app_get_win_size(struct appdata *ad); +#ifdef ENABLE_CHECK_CAM_STATUS +static void cam_app_check_status(); +#endif + +#ifndef DISABLE_TOOLBAR_TOGGLE +static Eina_Bool _cam_app_toolbar_toggle_timer(void *data); +#endif + +static gboolean cam_power_key_press(void *data); +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_idle_lockstate_change_cb(keynode_t *key, void *data); +static void cam_usb_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 void cam_app_auto_close_popup_response_cancel_cb(void *data, Evas_Object *obj, void *event_info); +static void cam_app_auto_close_popup_response_ok_cb(void *data, Evas_Object *obj, void *event_info); +static void cam_app_timer_update_count(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 7 +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_IDLE_LOCK_STATE, *cam_idle_lockstate_change_cb}, + {VCONFKEY_SYSMAN_USB_STATUS, *cam_usb_state_change_cb}, + {VCONFKEY_SETAPPL_ACCESSIBILITY_TORCH_LIGHT, *cam_torchlight_update_cb} +}; + +#ifdef CAMAPP_SIG_HANDLING +#include +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_state_manager(int previous, int current, gboolean by_asm); +static void cam_app_close_ug(void *data); +Eina_Bool __ug_destory_postprocessing(void *data); + +/* timeout */ +static gboolean cam_app_timeout_checker_update(); +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_zoom_warring_popup_response_cb(void *data, Evas_Object *obj, void *event_info) +{ + if (obj) { + evas_object_del(obj); + obj = NULL; + } +} +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_snapshot_popup_response_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct appdata *ad = data; + cam_retm_if(ad == NULL, "appdata is NULL"); + + if (obj) { + evas_object_del(obj); + obj = NULL; + } + ad->is_showing_snapshot_popup = FALSE; + DEBUG_TRACE("ad->is_showing_snapshot_popup = FALSE"); +} + +static Eina_Bool cam_delay_popup(void *data) +{ + + cam_app_notice_popup(data,_("IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"), + cam_app_timeout_notice_response_cb); + return EINA_FALSE; + +} +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(LONG_PRESS_INTERVAL, 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; + } +} + +Eina_Bool _message_popup_destroy_and_exit(void *data) +{ + Evas_Object *obj = (Evas_Object *)data; + cam_popup_remove(obj); + elm_exit(); + + return ECORE_CALLBACK_CANCEL; +} + +Eina_Bool cam_app_real_exit(void *data) +{ + struct appdata *ad = (struct appdata *)data; + + debug_fenter(LOG_UI); + cam_retvm_if(ad == NULL, -1, "appdata is NULL"); + + if (ad->timeout_checker) { + ecore_timer_del(ad->timeout_checker); + ad->timeout_checker = NULL; + } + + cam_app_key_event_deinit(ad); + + elm_exit(); + + return 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; + int width =0, height=0; + evas_object_geometry_get(ad->win_main, NULL, NULL, &height, &width); + 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); + if (width >= height) { + evas_object_resize(rect, width, width); + } else { + evas_object_resize(rect, height, height); + } + evas_object_show(rect); +} +#endif +void cam_set_orient_value(void *data) +{ + struct appdata *ad = (struct appdata *)data; + cam_retm_if(ad == NULL, "appdata is NULL"); + int orient_value = 0; +#if 0 + CamAppData *camapp = ad->camapp_handle; + if (camapp->shooting_mode == CAM_SELF_MODE) { + switch (ad->rot_current) { + case APPCORE_RM_PORTRAIT_NORMAL: + orient_value = 1; + DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n", + ad->rot_current, orient_value); + break; + case APPCORE_RM_PORTRAIT_REVERSE: + orient_value = 3; + DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n", + ad->rot_current, orient_value); + break; + case APPCORE_RM_LANDSCAPE_NORMAL: + orient_value = 8; + DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n", + ad->rot_current, orient_value); + break; + case APPCORE_RM_LANDSCAPE_REVERSE: + orient_value = 6; + DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n", + ad->rot_current, orient_value); + break; + default: + break; + } + } else { +#endif + switch (ad->rot_current) { + case APP_DEVICE_ORIENTATION_0: + orient_value = 6; + DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n", + ad->rot_current, orient_value); + break; + case APP_DEVICE_ORIENTATION_180: + orient_value = 8; + DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n", + ad->rot_current, orient_value); + break; + case APP_DEVICE_ORIENTATION_90: + orient_value = 3; + DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n", + ad->rot_current, orient_value); + break; + case APP_DEVICE_ORIENTATION_270: + orient_value = 1; + DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n", + ad->rot_current, orient_value); + break; + default: + break; + } + + /*orient_value = CAMERA_ATTR_TAG_ORIENTATION_TOP_LEFT;*/ + + 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; +} + +static void cam_app_get_win_size(struct appdata *ad) +{ + DEBUG_TRACE(); + + cam_ret_if(ad == NULL || ad->win_main == NULL); + evas_object_geometry_get(ad->win_main, NULL, NULL, &(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->imageviewer_service) { + service_destroy(ad->imageviewer_service); + ad->imageviewer_service = NULL; + } + if (ad->timeout_checker) { + ecore_timer_del(ad->timeout_checker); + ad->timeout_checker = 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; + } + if (ad->recording_commit) { + ecore_idler_del(ad->recording_commit); + ad->recording_commit = NULL; + } + if (ad->still_captured_idle) { + ecore_idler_del(ad->still_captured_idle); + ad->still_captured_idle = NULL; + } + if (ad->capture_idle) { + ecore_idler_del(ad->capture_idle); + ad->capture_idle = 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); + } + if (ad->auto_shot_idle) { + ecore_idler_del(ad->auto_shot_idle); + ad->auto_shot_idle = NULL; + } + if (ad->update_thumbnail_idler) { + ecore_idler_del(ad->update_thumbnail_idler); + ad->update_thumbnail_idler = NULL; + } + if (ad->timer_timer) { + ecore_timer_del(ad->timer_timer); + ad->timer_timer = NULL; + } + if (ad->timeout_checker) { + ecore_timer_del(ad->timeout_checker); + ad->timeout_checker = NULL; + } + if (ad->rec_icon_updater) { + ecore_timer_del(ad->rec_icon_updater); + ad->rec_icon_updater = NULL; + } + if (ad->rec_time_updater) { + ecore_timer_del(ad->rec_time_updater); + ad->rec_time_updater = NULL; + } + if( ad->setting_menu_composer != NULL){ + cam_compose_free(ad->setting_menu_composer); + } + 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; + } +#ifdef USE_FILE_REG_THREAD + + 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); + cam_debug(LOG_FILE, " register done."); + } + } + g_queue_free(ad->file_reg_queue); + ad->file_reg_queue = NULL; + } +#endif + + 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_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); + +#ifdef USE_FILE_REG_THREAD + 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); +#endif + +#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 ENABLE_HAPTIC + CAM_TA_ACUM_ITEM_BEGIN(" cam_devman_init", 0); + if (!cam_devman_init(ad)) { + cam_critical(LOG_SYS, " cam_devman_init failed"); + return FALSE; + } + CAM_TA_ACUM_ITEM_END(" cam_devman_init", 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; + /*int session_type;*/ + + 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 guideline value*/ +#ifdef GUIDE_LINE_ENALBE + camapp->guideline = FALSE; +#endif + + CAM_TA_ACUM_ITEM_BEGIN(" cam_mm_create", 0); + if (cam_mm_is_created() == FALSE) { + if (!cam_mm_create(CAM_DEVICE_MEGA, camapp->camera_mode)) { + cam_critical(LOG_MM, "cam_mm_create failed"); + cam_app_notice_popup(ad, "UNABLE TO LAUNCH CAMERA", cam_app_timeout_notice_response_cb); + return FALSE; + } + } + CAM_TA_ACUM_ITEM_END(" cam_mm_create", 0); + + CAM_TA_ACUM_ITEM_BEGIN(" cam_callback_init", 0); + if (!cam_callback_init(ad)) { + cam_critical(LOG_CAM, "cam_init_mm_callback failed"); + cam_app_notice_popup(ad, "UNABLE TO START PREVIEW", cam_app_timeout_notice_response_cb); + 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"); +// return FALSE; + } + CAM_TA_ACUM_ITEM_END(" cam_app_init_attribute", 0); + + CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_start", 0); + + /* + * TODO: this func dealt with efl ui api, but cam_app_start is called in thread. + * We should consider it carefully. + */ + cam_continuous_af_start(ad); + if (!cam_app_preview_start(ad)) { + if (ad->is_calling == CAMERA_ERROR_SOUND_POLICY ||ad->is_calling == RECORDER_ERROR_SOUND_POLICY) { + DEBUG_TRACE(" MM CAMCARORDER ERROR\n"); + cam_app_black_screen_show(ad, 2); + ecore_timer_add(0.01, cam_delay_popup, (void *)ad); + return FALSE; + } + + cam_critical(LOG_MM, "cam_app_preview_start failed"); + cam_app_notice_popup(ad, "UNABLE TO START PREVIEW", cam_app_timeout_notice_response_cb); + return FALSE; + } + CAM_TA_ACUM_ITEM_END(" cam_app_preview_start", 0); + + 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); + + 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(); + + 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); + } else if (mm_state == CAMERA_STATE_CAPTURING + && (camapp->camera_mode == CAM_CAMERA_MODE)) { + cam_mm_capture_stop(TRUE, CAM_CAMERA_MODE); + } + + if (ad->imageviewer_ug) { /* image viewer is running and camera app is fous out */ + ad->foucs_out_from_quickview = TRUE; + } + CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_stop", 0); + if (!cam_app_preview_stop()) { + cam_critical(LOG_MM, "cam_app_preview_stop fail"); + } + CAM_TA_ACUM_ITEM_END(" cam_app_preview_stop", 0); + + cam_app_key_event_deinit(ad); + if (!cam_key_grab_deinit(ad)) { + DEBUG_TRACE("cam_key_grab_deinit fail"); + } + + cam_app_timeout_checker_init(ad); + + 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; + } + + cam_app_timeout_checker_init(ad); + + if (ad->imageviewer_ug == NULL) { /* home key destory imageviewer_ug */ + elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE); + cam_state = cam_mm_get_state(); + cam_app_get_preview_offset_coordinate(ad); + + CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_start", 0); + if (!cam_app_preview_start(ad)) { + if (ad->is_calling == CAMERA_ERROR_SOUND_POLICY || ad->is_calling == RECORDER_ERROR_SOUND_POLICY) { + DEBUG_TRACE(" MM CAMCARORDER ERROR\n"); + cam_app_black_screen_show(ad, 2); + 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_TA_ACUM_ITEM_BEGIN(" cam_key_grab_init", 0); + + if (!ad->imageviewer_ug) { + 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); + } +#ifdef ENABLE_CHECK_CAM_STATUS + alarm(CAM_CHECK_STATUS_INTERVAL_TIME); /* start alarm */ +#endif + + return TRUE; +} + +Eina_Bool cam_app_stop(void *data) +{ + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; + + char *filename = NULL; + debug_fenter(LOG_CAM); + cam_retvm_if(ad == NULL, EXIT_FAILURE, "appdata is NULL"); + + CAM_TA_ACUM_ITEM_BEGIN(" cam_app_stop", 0); + + camapp = ad->camapp_handle; + cam_retvm_if(camapp == NULL, EXIT_FAILURE, "camapp_handle is NULL"); + + /* 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 EXIT_FAILURE; + } + if (ad->path_in_return) { + if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) { + DEBUG_TRACE("contacts -not need sending result"); + } else { + if (ad->appcore_state != CAM_APPCORE_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 (ad->imageviewer_ug) { + cam_app_close_ug(ad); + } + + cam_popup_remove_all(); + cam_toolbar_destroy(ad); + cam_app_clear_engine_data(ad, true); + + if (ad->timer_activated) { + ad->timer_activated = false; + + DEL_EVAS_OBJECT(ad->timer_icon_edje); + REMOVE_TIMER(ad->timer_timer); + } + REMOVE_TIMER(ad->toolbar_toggle_timer); + cam_app_timeout_checker_remove(); + if (ad->auto_close_timer) { + ecore_timer_del(ad->auto_close_timer); + ad->auto_close_timer = NULL; + } +#if 1 + if (EXIT_FAILURE == cam_noti_deinit(ad)) { + cam_critical(LOG_UI, "cam_noti_deinit failed"); + } +#endif + cam_app_key_event_deinit(ad); + if(!cam_key_grab_deinit(ad)) + DEBUG_TRACE("cam_key_grab_deinit fail"); + + /* destory camcorder */ + if (cam_mm_is_created()) { + int state = 0; + state = cam_mm_get_state(); + if (camapp->camera_mode == CAM_CAMERA_MODE) { + switch (state) { + case CAMERA_STATE_NONE: + case CAMERA_STATE_CREATED: + break; + case CAMERA_STATE_PREVIEW: + break; + case CAMERA_STATE_CAPTURING: + cam_mm_capture_stop(TRUE, CAM_CAMERA_MODE); + break; + case CAMERA_STATE_CAPTURED: + break; + default: + /*g_assert_not_reached();*/ + break; + } + }else if (camapp->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_TA_ACUM_ITEM_BEGIN(" cam_app_preview_stop", 0); + if (!cam_app_preview_stop()) { + cam_critical(LOG_MM, "cam_app_preview_stop faild"); + } + 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 faild"); + } + CAM_TA_ACUM_ITEM_END(" cam_mm_destory", 0); + } + + cam_config_save(); + ad->toolbar_hided = FALSE; + cam_app_toggle_indicator(ad, FALSE); + cam_app_toggle_toolbar(ad, FALSE); + + /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */ + cam_app_destroy_progressbar(ad); + cam_utils_remove_idler_all(ad); + + if (filename != NULL) { + free(filename); + filename = NULL; + } + + CAM_TA_ACUM_ITEM_END(" cam_app_stop", 0); + + CAM_TA_ACUM_ITEM_SHOW_RESULT_TO(CAM_TA_SHOW_FILE); + CAM_TA_RELEASE(); + + return EXIT_SUCCESS; + +} + +gboolean cam_app_quit(void *data) +{ + struct appdata *ad = (struct appdata *)data; + cam_retvm_if(ad == NULL, FALSE, "appdata is NULL"); + + 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_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 ENABLE_HAPTIC + cam_devman_deinit(); +#endif + + if (EXIT_FAILURE == cam_noti_deinit(ad)) { + cam_critical(LOG_UI, "cam_noti_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); + + /* 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_handle_free(ad); */ + cam_appdata_fini(ad); + + 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 (state < CAMERA_STATE_NONE || 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(); + if (ad == NULL) + return FALSE; + CamAppData *camapp = ad->camapp_handle; + if (camapp == NULL) + return FALSE; + if (!cam_mm_preview_stop(camapp->camera_mode)) { + cam_critical(LOG_MM, "cam_mm_preview_stop failed"); + return FALSE; + } + return TRUE; +} + +static void +_main_layout_click_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct appdata *ad = (struct appdata *)data; + + if (!ad) + return; + + unload_zoom_edje(ad); + + if (ad->setting_ctxpopup || ad->toolbar_popup) { + /* destroy toolbar popup and setting popup */ + ad->show_menu = FALSE; + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; + cam_toolbar_and_setting_popup_del(ad); + if (ad->shot_mode_guide_popup) + toolbar_shot_guide_popup_create(ad, ad->camapp_handle->shooting_mode); + } else if (ad->toolbar_show_setting_popup == TRUE) { + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; + ad->show_menu = FALSE; + toolbar_hide_setting_popup(ad); + if (ad->toolbar_show_edit_shortcuts_popup == TRUE) { + toolbar_destroy_shortcuts_popup(ad); + ad->toolbar_show_edit_shortcuts_popup = FALSE; + } + } else if (ad->toolbar_show_edit_shortcuts_popup == TRUE) { + toolbar_destroy_shortcuts_popup(ad); + ad->toolbar_show_edit_shortcuts_popup = FALSE; + } else { + if (ad->camapp_handle->enable_touch_af == TRUE) { + REMOVE_TIMER(ad->continuous_af_timer); + cam_camera_touch_af_press(ad); + } + } + + return; +} + +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; + } + /*ad->angle = 270;*/ + 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; + + } + + elm_win_rotation_with_resize_set(ad->win_main, ad->angle); + + /* cam_app_get_win_size(ad); */ + 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->zoom_edje) { + unload_zoom_edje(ad); + load_zoom_edje(ad); + } + /* guideline */ +#ifdef GUIDE_LINE_ENALBE + if (ad->guideline_edje) + settings_guideline_refresh(ad); +#endif + + } + 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; + } + + elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE); + + cam_app_start_rotate(ad, TRUE); + DEBUG_TRACE("ad->angle = %d", ad->angle); + /*elm_win_rotation_with_resize_set(ad->win_main, 270);*/ + cam_app_get_preview_offset_coordinate(ad); + 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); + + CAM_TA_ACUM_ITEM_BEGIN(" layout_main load", 0); + if (ad->layout_main == NULL) { + ad->layout_main = + cam_app_load_edj(ad->win_main, CAM_MAIN_LAYOUT_EDJ_NAME, + "main_layout"); + if (ad->layout_main == NULL) { + CAM_TA_ACUM_ITEM_END(" layout_main load", 0); + cam_critical(LOG_UI, "layout_main load failed "); + return FALSE; + } + +#ifndef CAMERA_MACHINE_I686 + evas_object_smart_callback_del(_EDJ(ad->layout_main), + "mouse.click", + _main_layout_click_cb); + + evas_object_smart_callback_add(_EDJ(ad->layout_main), + "mouse.click", + _main_layout_click_cb, ad); + + define_mouse_callback(_EDJ(ad->layout_main), + _EDJ(ad->layout_main)); +#endif + } + CAM_TA_ACUM_ITEM_END(" layout_main load", 0); + + cam_app_focus_guide_create(ad); + + 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); + +#ifndef DISABLE_INDICATOR + CAM_TA_ACUM_ITEM_BEGIN(" cam_indicator_create", 0); + if (ad->indicator_edje) { + evas_object_hide(ad->indicator_edje); + cam_indicator_destory(ad); + } + 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); +#endif + + cam_app_update_quickview_icon(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->battery_ani_timer) { + ecore_timer_del(camapp->battery_ani_timer); + camapp->battery_ani_timer = NULL; + } + + if (camapp->filename) { + free(camapp->filename); + camapp->filename = NULL; + } + + if (camapp->thumbnail_name) { + free(camapp->thumbnail_name); + camapp->thumbnail_name = NULL; + } + + 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"); + ad->toolbar_1_type = cam_config_get_int( PROP_TOOLBAR_1_TYPE_NAME, CAM_MENU_EMPTY); + ad->toolbar_2_type = cam_config_get_int( PROP_TOOLBAR_2_TYPE_NAME, CAM_MENU_EMPTY); + ad->toolbar_3_type = cam_config_get_int( PROP_TOOLBAR_3_TYPE_NAME, CAM_MENU_EMPTY); + ad->toolbar_4_type = cam_config_get_int( PROP_TOOLBAR_4_TYPE_NAME, CAM_MENU_EMPTY); + DEBUG_TRACE("ad->toolbar_1_type= %d", ad->toolbar_1_type); + DEBUG_TRACE("ad->toolbar_2_type= %d", ad->toolbar_2_type); + DEBUG_TRACE("ad->toolbar_3_type= %d", ad->toolbar_3_type); + DEBUG_TRACE("ad->toolbar_4_type= %d", ad->toolbar_4_type); + + 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 toolbar_1_type; + int toolbar_2_type; + int toolbar_3_type; + int toolbar_4_type; + + toolbar_1_type = cam_config_get_int( PROP_TOOLBAR_1_TYPE_NAME, CAM_MENU_EMPTY); + toolbar_2_type = cam_config_get_int( PROP_TOOLBAR_2_TYPE_NAME, CAM_MENU_EMPTY); + toolbar_3_type = cam_config_get_int( PROP_TOOLBAR_3_TYPE_NAME, CAM_MENU_EMPTY); + toolbar_4_type = cam_config_get_int( PROP_TOOLBAR_4_TYPE_NAME, CAM_MENU_EMPTY); + + if (toolbar_1_type != ad->toolbar_1_type) + cam_config_set_int(PROP_TOOLBAR_1_TYPE_NAME, ad->toolbar_1_type); + if (toolbar_2_type != ad->toolbar_2_type) + cam_config_set_int(PROP_TOOLBAR_2_TYPE_NAME, ad->toolbar_2_type); + if (toolbar_3_type != ad->toolbar_3_type) + cam_config_set_int(PROP_TOOLBAR_3_TYPE_NAME, ad->toolbar_3_type); + if (toolbar_4_type != ad->toolbar_4_type) + cam_config_set_int(PROP_TOOLBAR_4_TYPE_NAME, ad->toolbar_4_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_info(LOG_UI, "camera_mode = %d ", camapp->camera_mode); + + cam_config_set_int_by_type(CAM_CONFIG_TYPE_COMMON, PROP_MODE_NAME, mode); + + cam_app_set_config_group(camapp->camera_mode); + +#ifdef USE_CAM_STORAGE_SETTING + camapp->storage = cam_config_get_int( PROP_STORAGE_NAME, CAM_STORAGE_INTERNAL); +#else + vconf_get_int(VCONFKEY_SETAPPL_DEFAULT_MEM_CAMERA_INT, &(camapp->storage)); +#endif + + /* use shot mode as default value */ + camapp->recording_mode = RECMODE_DEFAULT; + camapp->shooting_mode = SHOTMODE_DEFAULT; + + camapp->af_mode = AF_DEFAULT; + + if (camapp->camera_mode == CAM_CAMERA_MODE) { + camapp->flash = cam_config_get_int(PROP_FLASH_NAME, FLASH_DEFAULT); + } else { + camapp->flash = cam_config_get_int(PROP_FLASH_NAME, REC_FLASH_DEFAULT); + } + +#ifdef GUIDE_LINE_ENALBE + camapp->guideline = cam_config_get_boolean(PROP_GUIDELINE_NAME, GUIDE_LINE_DEFAULT); + DEBUG_TRACE("camapp->guideline = %d" ,camapp->guideline); +#endif + + camapp->effect = EFFECT_DEFAULT; + + if (camapp->camera_mode == CAM_CAMERA_MODE) + DEBUG_TRACE("default resolution will be got from FW API"); + else + camapp->resolution = cam_config_get_int(PROP_RESOLUTION_NAME, REC_RESOLUTION_DEFAULT); + + camapp->image_quality = cam_config_get_int(PROP_IMAGE_QUALITY_NAME, QUALITY_DEFAULT); + camapp->video_quality = cam_config_get_int(PROP_VIDEO_QUALITY_NAME, 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 = + cam_config_get_int(PROP_SHUTTER_SOUND_NAME, 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 = 1; + 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->enable_touch_af = TRUE; + camapp->key_lock = FALSE; + + /*init toolbar menu config */ + cam_toolbar_menu_config_init((void*)ad, mode); + + 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; + if (!cam_mode_change(ad, tempval)) { + cam_critical(LOG_CAM, + "MODE CHANGE IS FAILED by MIDDLE WARE"); + cam_app_notice_popup(data, + "MODE CHANGE FAILED !!", + cam_app_timeout_notice_response_cb); + } + } + 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; + } + printf(" ##### %s %d tempval = %d\n", __FUNCTION__, + __LINE__, tempval); + cam_config_set_int(PROP_SHOT_MODE_NAME, tempval); + cam_app_focus_guide_update(ad); + } + break; + case PROP_REC_MODE: + { + gint tempval = g_value_get_int(value); + /* set recording mode */ + camapp->recording_mode = tempval; + cam_config_set_int(PROP_REC_MODE_NAME, tempval); + + if (!cam_recording_mode_change(ad, tempval)) { + cam_critical(LOG_UI, "rec mode change fail - mode[%d]", tempval); + return FALSE; + } + + } + break; + case PROP_RESOLUTION: + { + gint tempval = g_value_get_int(value); + /* int af_x,af_y; */ + + 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 + ("*******************************************************"); + + + cam_critical(LOG_FILE, "1111111111"); + + if (!cam_app_reset_resolution(ad, CAM_RESOLUTION_W(tempval), CAM_RESOLUTION_H(tempval))) { + cam_warning(LOG_UI, "resolution set fail"); + return FALSE; + } +#ifdef GUIDE_LINE_ENALBE + settings_guideline_refresh(ad); +#endif + camapp->resolution = tempval; + cam_critical(LOG_FILE, " camapp->resolution %d", camapp->resolution); + + if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + cam_app_set_video_quality(ad, camapp->video_quality); + /* cam_mm_set_video_quality(camapp->recording_mode, camapp->video_quality); */ + } + + if ((camapp->camera_mode == CAM_CAMERA_MODE + && camapp->shooting_mode == CAM_SINGLE_MODE) + || (camapp->camera_mode == CAM_CAMCORDER_MODE + && camapp->recording_mode == CAM_RECORD_NORMAL)) { + cam_debug(LOG_UI, + "resolution saved : [%d]x[%d]", + CAM_RESOLUTION_W(tempval), + CAM_RESOLUTION_H(tempval)); + cam_config_set_int(PROP_RESOLUTION_NAME, + tempval); + } + cam_app_get_preview_offset_coordinate(ad); + ad->remained_count = cam_system_get_still_count_by_resolution(ad); + } + break; + case PROP_FPS: + { /* fps may not set it alone */ + gint tempval = g_value_get_int(value); + /* set fps */ + if (!cam_mm_set_fps(tempval)) { + cam_warning(LOG_UI, "fps set fail"); + return FALSE; + } + camapp->fps = 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; + cam_config_set_int(PROP_EFFECT_NAME, 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 ((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; + } + + } 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_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); + /*set timer */ + 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; + } + /*set quality */ + camapp->image_quality = tempval; + cam_config_set_int(PROP_IMAGE_QUALITY_NAME, 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; + } + /* set quality */ + camapp->video_quality = tempval; + cam_config_set_int(PROP_VIDEO_QUALITY_NAME, 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; + cam_config_set_boolean(PROP_AUDIO_REC_NAME, tempval); + + } + break; + case PROP_AUDIO_QUALITY: + { + gint tempval = g_value_get_int(value); + /* set audio quality */ + camapp->audio_quality = tempval; + cam_config_set_int(PROP_AUDIO_QUALITY_NAME, 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); + if (!cam_mm_set_zoom(tempval)) { + cam_warning(LOG_UI, "zoom set fail"); + return FALSE; + } + camapp->zoom = tempval; + } + break; + case PROP_STORAGE: + { + gint tempval = g_value_get_int(value); + + camapp->storage = tempval; + cam_config_set_int(PROP_STORAGE_NAME, tempval); + } + 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_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; + cam_config_set_int(PROP_SHUTTER_SOUND_NAME, 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; + default: + cam_warning(LOG_UI, "unknow type :%d ", type); + return FALSE; + break; + } + /* indicator should be updated here!!! */ +/* change_indicator_mode_icons(ad); */ + return TRUE; +} + +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); + + int session_type; + debug_fenter(LOG_UI); + + cam_elm_cache_flush(); + + evas_object_hide(ad->timer_icon_edje); + REMOVE_TIMER(ad->timer_timer); + ad->timer_activated = false; + DEL_EVAS_OBJECT(ad->timer_icon_edje); +#ifdef GUIDE_LINE_ENALBE + DEL_EVAS_OBJECT(ad->guideline_edje); + camapp->guideline = FALSE; +#endif + 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 + /*cam_app_black_screen_show(ad, to_mode);*/ + + 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; + + } + + if (!cam_mm_destory()) { + cam_critical(LOG_MM, "cam_mm_destory faild"); + cam_app_notice_popup(data, + "cam_mm_destory faild BY MIDDLE WARE", + cam_app_timeout_notice_response_cb); + return FALSE; + } + + if (to_mode == CAM_CAMERA_MODE) { + DEBUG_TRACE("session_type :SOUND_SESSION_TYPE_SHARE"); + session_type = SOUND_SESSION_TYPE_SHARE; + } else { + DEBUG_TRACE("session_type :SOUND_SESSION_TYPE_EXCLUSIVE"); + session_type = SOUND_SESSION_TYPE_EXCLUSIVE; + } + if (!cam_mm_session_init(session_type)) { + cam_critical(LOG_MM, "cam_mm_session_init faild"); + goto MODE_CHANGE_FAILED; + + } + if (!cam_mm_create(CAM_DEVICE_MEGA, to_mode)) { + cam_critical(LOG_MM, "cam_mm_create failed"); + 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) { + ad->last_camera_zoom_mode = camapp->zoom_mode; + } + + if (!cam_handle_create(ad)) { + cam_critical(LOG_CAM, "cam_handle_create faild"); + goto MODE_CHANGE_FAILED; + + } + + if (!cam_handle_init(ad, to_mode)) { + cam_critical(LOG_CAM, "cam_handle_init faild"); + goto MODE_CHANGE_FAILED; + + } + + else if (to_mode == CAM_CAMERA_MODE) { + camapp->zoom_mode = ad->last_camera_zoom_mode; + } + 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"); +// goto MODE_CHANGE_FAILED; + } + + cam_app_get_preview_offset_coordinate(ad); + + cam_continuous_af_start(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); + ResetCaps(); + + /*update toolbar shortcuts*/ + cam_toolbar_destroy(ad); + cam_toolbar_create(ad); + cam_app_update_quickview_icon((void *)ad); + + return TRUE; + +MODE_CHANGE_FAILED: + cam_app_notice_popup(ad, "PREVIEW START FAILED !!", 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 (camapp->recording_mode == CAM_RECORD_SELF ||camapp->recording_mode == CAM_RECORD_SELF_MMS ) { + device_type = CAM_DEVICE_VGA; + } else { + device_type = CAM_DEVICE_MEGA; + } + + if (!cam_mm_create(device_type, camapp->camera_mode)) { + cam_critical(LOG_MM, "cam_mm_create failed"); + cam_app_notice_popup(ad, "cam_app_preview_start failed", 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; + } + } + + 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; + } + + g_value_set_int(&value, CAM_RESOLUTION_VGA); + if (!cam_handle_value_set(ad, PROP_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_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_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_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, "PREVIEW START FAILED !!", 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_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) +{ + return; +} + +gboolean cam_shooting_mode_change(void *data) +{ + 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_elm_cache_flush(); + + cam_app_stop_video_stream(); + cam_app_timeout_checker_remove(); + cam_shooting_mode_reset(ad); + cam_mm_get_video_device(&video_dev); + + if ((camapp->shooting_mode == CAM_SELF_MODE && video_dev == CAM_DEVICE_MEGA) + || (camapp->shooting_mode != CAM_SELF_MODE && 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 (camapp->shooting_mode == CAM_SELF_MODE) { + device_type = CAM_DEVICE_VGA; + } else { + device_type = CAM_DEVICE_MEGA; + } + DEBUG_TRACE("device_type = %d" ,device_type); + if (!cam_mm_create(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; + } + 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); + + cam_continuous_af_start(ad); + } + + g_value_init(&value, G_TYPE_INT); + + cam_debug(LOG_CAM, "Shooting mode = %d ", camapp->shooting_mode); + + if (ad->shot_mode_guide_popup) + toolbar_shot_guide_popup_destory(ad); + + switch (camapp->shooting_mode) { + case CAM_SINGLE_MODE: + { + int resolution = 0, flash = 0, auto_focus = 0; + resolution = cam_config_get_int(PROP_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); + /* set resolution */ + g_value_set_int(&value, resolution); + cam_handle_value_set(ad, PROP_RESOLUTION, &value); + + /* set flash off */ + 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 capture count */ + g_value_set_int(&value, IMAGE_COUNT_DEFAULT); + cam_handle_value_set(ad, PROP_IMAGE_COUNT, &value); + } + break; + + case CAM_SELF_MODE: + /* set resolution */ + g_value_set_int(&value, CAM_RESOLUTION_VGA); + cam_handle_value_set(ad, PROP_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 capture count */ + g_value_set_int(&value, IMAGE_COUNT_DEFAULT); + cam_handle_value_set(ad, PROP_IMAGE_COUNT, &value); + break; + default: + break; + } + + if (cam_reset) { + if (!cam_app_init_attribute(ad, camapp->camera_mode)) { + cam_critical(LOG_MM, "cam_app_init_attribute failed"); + } + } else { + /* cam_app_set_source_format_shooting_mode(camapp->shooting_mode); */ + cam_app_set_capture_format_shooting_mode(camapp->shooting_mode); + } + + 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; + } + + if (!cam_app_preview_start(ad)) { + 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_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; + char count_string[3] = ""; + + cam_retm_if(ad == NULL, "appdata is NULL"); + + cam_debug(LOG_UI, "timer count ... [ %d ]", ad->timer_count); + + 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->win_main, 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->win_main, CAM_UTILS_EDJ_NAME, "timer_icon_portrait"); + break; + default: + DEBUG_TRACE("Invalid direction type!!!"); + } + + cam_ret_if(ad->timer_icon_edje == NULL); + } + + 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_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"); + 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); + cam_image_capture_start(ad); + } else { + cam_video_record_start(ad); + } + + 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"); + + ad->timer_activated = true; + + switch (ad->camapp_handle->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; + } + + 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); + + remain = cam_system_get_still_count_by_resolution(ad); + + cam_set_orient_value(ad); + + switch (camapp->shooting_mode) { + case CAM_SELF_MODE: + case CAM_SINGLE_MODE: + ret = cam_mm_capture_start(camapp->capture_cb, camapp->capture_completed_cb, (void*)ad); +#ifdef USE_CAMERA_APP_SHUTTER_SOUND + cam_sound_play(camapp->shutter_sound, ad); +#ifdef ENABLE_CAPTURE_ANIMATION + cam_app_shutter_screen_show(ad); +#endif + +#endif + break; + default: + ret = cam_mm_capture_start(camapp->capture_cb, camapp->capture_completed_cb, (void*)ad); /*capture on recoring */ + break; + } + + 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); + cam_retvm_if(ad == NULL, FALSE, "appdata is NULL"); + camapp = ad->camapp_handle; + cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL"); + + 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; + +#ifdef ENABLE_CAPTURE_ANIMATION + __cam_save_captured_file(ad); +#endif + + return cam_image_capture_handle(ad); +} +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; + char *str = NULL; + char popup_str[256] = { 0 }; + + + if (camapp->filename) { +#ifdef USE_FILE_REG_THREAD + 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_single_shot_reg_file(camapp->filename); +#endif + } 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 "); + } + str = strrchr(camapp->filename, '/'); + snprintf(popup_str, sizeof(popup_str), "%s %s", (str+1), _("IDS_CAM_POP_SAVED")); + cam_app_snapshot_popup(ad, popup_str, cam_app_snapshot_popup_response_cb); + + return ECORE_CALLBACK_CANCEL; +} + +Eina_Bool cam_image_capture_handle(void *data) +{ + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; +/* gboolean last_capture = FALSE; */ + gboolean bClosedEyesFoundFlag = FALSE; + gboolean preview_skip = FALSE; + + 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); + + switch (camapp->shooting_mode) { + case CAM_SINGLE_MODE: + case CAM_SELF_MODE: + + cam_app_destroy_progressbar(ad); + + if (!bClosedEyesFoundFlag) { + if (camapp->review) { + if (camapp->filename) { + __cam_single_shot_reg_file + (camapp->filename); + /* run media browser. */ + cam_app_black_screen_show(ad, -1); /* after capture , to hide preview screen , The hide is in preview_start */ + } else { + cam_app_notice_popup(ad, + "Your storage have trouble ", + cam_app_popup_response_cb); + } + if (!cam_mm_capture_stop(TRUE, camapp->camera_mode)) { + cam_critical(LOG_MM, "cam_mm_capture_stop error "); + } + /* del mouse down event - image viewer bug */ + cam_app_mouse_event_deinit(ad); + if (!cam_app_run_image_viewer_ug + (ad, camapp->filename)) { + cam_app_mouse_event_init(ad); + return ECORE_CALLBACK_CANCEL; + } + } else { + if (camapp->filename) { +#ifdef USE_FILE_REG_THREAD + 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_single_shot_reg_file(camapp->filename); +#endif + } else { + cam_app_notice_popup(ad, + "Your storage have trouble ", + cam_app_popup_response_cb); + } + + if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) { + if(!((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "gallery") == 0))) { + preview_skip = TRUE; + } + } + + if (!cam_mm_capture_stop (preview_skip, camapp->camera_mode)) { + cam_critical(LOG_MM,"cam_mm_capture_stop error "); + } + CAM_TA_ACUM_ITEM_BEGIN + (" capture stop to preview", 0); + + if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) { + if (ad->appcore_state == CAM_APPCORE_PAUSE_STATE) { + cam_app_exit(ad); + return ECORE_CALLBACK_CANCEL; + } + /* view image select page */ + if(!((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "gallery") == 0))) { + cam_app_mouse_event_deinit(ad); + if (!cam_app_run_image_viewer_ug(ad, camapp->filename)) { + cam_app_mouse_event_init(ad); + return ECORE_CALLBACK_CANCEL; + } + } + } + + } + } + cam_app_toggle_indicator(ad, ad->toolbar_hided); + cam_app_toggle_toolbar(ad, ad->toolbar_hided); + cam_app_get_preview_offset_coordinate(ad); + + break; + + default: + cam_debug(LOG_UI, " Not matched shooting mode [%d]", + camapp->shooting_mode); + break; + } + ad->remained_count--; + 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; + 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"); + camapp->focus_mode = 0; + if (ad->af_outside == TRUE) { + DEBUG_TRACE("########## out if af area !!"); + return TRUE; + } + if (CAM_CAMERA_MODE == camapp->camera_mode) { + camapp->focus_mode = CAM_FOCUS_MODE_TOUCH_AUTO; + + } else { + camapp->focus_mode = CAM_FOCUS_MODE_CONTINUOUS; + } + + 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 (!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"); + return FALSE; + } + ad->camapp_handle->key_lock = FALSE; + } + + return TRUE; +} + +gboolean cam_camera_key_half_press(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"); + + REMOVE_TIMER(ad->toolbar_toggle_timer); +#ifndef CAMERA_MACHINE_I686 + if (camapp->camera_mode == CAM_CAMERA_MODE + && camapp->shooting_mode != CAM_SELF_MODE) +#else + if (camapp->camera_mode == CAM_CAMERA_MODE + && camapp->shooting_mode != CAM_SELF_MODE + && TRUE) +#endif + { + if (camapp->camera_mode == CAM_CAMERA_MODE) { + camapp->focus_state = CAM_FOCUS_STATUS_RELEASED; + cam_app_focus_guide_update(ad); + } + 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 TRUE; +} + +gboolean cam_camera_key_half_release(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"); +#ifndef CAMERA_MACHINE_I686 + if (camapp->camera_mode == CAM_CAMERA_MODE + && camapp->shooting_mode != CAM_SELF_MODE) +#else + if (camapp->camera_mode == CAM_CAMERA_MODE + && camapp->shooting_mode != CAM_SELF_MODE + && TRUE) +#endif + { + camapp->focus_state = CAM_FOCUS_STATUS_RELEASED; + cam_app_focus_guide_update(ad); + } + + return TRUE; +} + +gboolean cam_camera_key_press(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 (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: + cam_app_toggle_indicator(ad, TRUE); + cam_app_toggle_toolbar(ad, TRUE); + 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; +} + +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"); + + DEBUG_TRACE("cam_continuous_af_start"); + + /* 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); + + cam_app_draw_af_box(ad); + camapp->focus_state = CAM_FOCUS_STATUS_RELEASED; + cam_app_focus_guide_update(ad); + + evas_object_show(ad->focus_edje); + + camapp->focus_mode = CAM_FOCUS_MODE_CONTINUOUS; + + /* 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!"); + } + 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; + cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL"); + + if (ad->cancel_key_press == TRUE) + return ECORE_CALLBACK_CANCEL; + + 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) { + zoom_in(ad, up_key); + } + } + 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) { + zoom_in(ad, up_key); + } + } + break; + case CAMERA_STATE_NONE: + case CAMERA_STATE_CREATED: + case CAMERA_STATE_CAPTURING: + break; + default: + break; + } + + } + + 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; + } + /* 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_mouse_event_init(void *data) +{ + struct appdata *ad = (struct appdata *)data; + if (ad == NULL) { + cam_critical(LOG_UI, "appdata is NULL, maybe not created"); + return FALSE; + } +#if ENABLE_MOUSE_CONTROL + if (ad->mouse_down == NULL) { + ad->mouse_down = + ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, + cam_mouse_button_down, ad); + } + + if (ad->mouse_up == NULL) { + ad->mouse_up = + ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, + cam_mouse_button_up, ad); + } +#if 0 + + if (ad->mouse_move == NULL) { + ad->mouse_down = + ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, + cam_mouse_move, ad); + } +#endif +#endif + + return TRUE; +} + +gboolean cam_app_mouse_event_deinit(void *data) +{ + struct appdata *ad = (struct appdata *)data; + if (ad == NULL) { + cam_critical(LOG_UI, "appdata is NULL, maybe not created"); + return FALSE; + } + if (ad->mouse_down) { + ecore_event_handler_del(ad->mouse_down); + ad->mouse_down = NULL; + } + if (ad->mouse_up) { + ecore_event_handler_del(ad->mouse_up); + ad->mouse_up = NULL; + } + if (ad->mouse_move) { + ecore_event_handler_del(ad->mouse_move); + ad->mouse_move = NULL; + } + + return TRUE; +} + +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); + } +#if ENABLE_MOUSE_CONTROL + if (ad->mouse_down == NULL) { + ad->mouse_down = + ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, + cam_mouse_button_down, ad); + } + + if (ad->mouse_up == NULL) { + ad->mouse_up = + ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, + cam_mouse_button_up, ad); + } +#if 0 + + if (ad->mouse_move == NULL) { + ad->mouse_down = + ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, + cam_mouse_move, ad); + } +#endif +#endif + + 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; + } + if (ad->mouse_down) { + ecore_event_handler_del(ad->mouse_down); + ad->mouse_down = NULL; + } + if (ad->mouse_up) { + ecore_event_handler_del(ad->mouse_up); + ad->mouse_up = NULL; + } + if (ad->mouse_move) { + ecore_event_handler_del(ad->mouse_move); + ad->mouse_move = NULL; + } + + return TRUE; +} + +Eina_Bool cam_hard_key_down(void *data, int type, void *event_info) +{ + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; + + + Ecore_Event_Key *kd = (Ecore_Event_Key *) event_info; + + cam_retvm_if(ad == NULL, -1, "appdata is NULL"); + + cam_debug(LOG_UI, "Key name : %s", kd->keyname); + + camapp = ad->camapp_handle; + cam_retvm_if(camapp == NULL, -1, "camapp_handle is NULL"); + + ad->show_menu = FALSE; + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; + cam_toolbar_and_setting_popup_del(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; + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; + ad->show_menu = FALSE; + cam_toolbar_and_setting_popup_del(ad); + + 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->key_lock) { + camapp->key_lock = TRUE; + ad->up_key = TRUE; + cam_add_longpress_key_timer(ad); + camapp->key_lock = FALSE; + } + } else if (0 == strcmp(kd->keyname, KEY_VOLUMEDOWN)) { + if (!camapp->key_lock) { + camapp->key_lock = TRUE; + ad->up_key = FALSE; + cam_add_longpress_key_timer(ad); + camapp->key_lock = FALSE; + } + } 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 (!camapp->key_lock) { + camapp->key_lock = TRUE; + power_unlock_state(POWER_STATE_NORMAL); + cam_power_key_press(ad); + camapp->key_lock = FALSE; + + } + } + + return 0; +} + +Eina_Bool cam_hard_key_up(void *data, int type, void *event_info) +{ + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; + + Ecore_Event_Key *kd = (Ecore_Event_Key *) event_info; + cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL); + + cam_debug(LOG_UI, "Key name : %s", kd->keyname); + + camapp = ad->camapp_handle; + cam_retv_if(camapp == NULL, ECORE_CALLBACK_CANCEL); + + 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); + cam_volume_key_press(ad); + } + return FALSE; + } + + + 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->key_lock) { + camapp->key_lock = TRUE; + cam_del_longpress_key_timer(ad); + cam_volume_key_press(ad); + camapp->key_lock = FALSE; + } + } else if (0 == strcmp(kd->keyname, KEY_END) + || 0 == strcmp(kd->keyname, KEY_SELECT)) { + + DEBUG_TRACE("camapp->key_lock = %d", camapp->key_lock); + if (!camapp->key_lock) { + camapp->key_lock = TRUE; + + if ( ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) { + + int mm_state = 0; + mm_state = cam_mm_get_state(); + ad->appcore_state = CAM_APPCORE_PAUSE_STATE; + if (mm_state < CAMERA_STATE_CAPTURING) { + cam_app_exit(ad); + } + return 0; + } + + if (ad->imageviewer_ug) { + DEBUG_TRACE("destory imageviewer"); + cam_app_close_ug(ad); + cam_app_start_rotate(ad, false); + cam_app_key_event_deinit(ad); + if(!cam_key_grab_deinit(ad)) + DEBUG_TRACE("cam_key_grab_deinit fail"); + ad->foucs_out_from_quickview = FALSE; + } + if ((ad->mm_state == RECORDER_STATE_RECORDING + || ad->mm_state == RECORDER_STATE_PAUSED) + &&camapp->camera_mode == CAM_CAMCORDER_MODE) { + camapp->rec_stop_type = CAM_REC_STOP_NORMAL; + ad->recording_commit = ecore_idler_add(cam_video_idler_record_stop, ad); + camapp->key_lock = FALSE; + return 0; + } else if (ad->mm_state == CAMERA_STATE_CAPTURING + &&camapp->camera_mode == CAM_CAMERA_MODE) { + camapp->key_lock = FALSE; + return 0; + } else if ((ad->mm_state == RECORDER_STATE_READY + &&camapp->camera_mode == CAM_CAMERA_MODE) + ||(ad->mm_state == CAMERA_STATE_PREVIEW + &&camapp->camera_mode == CAM_CAMCORDER_MODE)) { + ; + } + if (0 == strcmp(kd->keyname, KEY_END)) { + cam_debug(LOG_UI, " Key up : END Key"); + /*cam_app_exit(ad);*/ + /*camapp->key_lock = FALSE;*/ + } + camapp->key_lock = FALSE; + + } else { + cam_debug(LOG_UI, "key lock status = %d", + camapp->key_lock); + } + } + + return 0; +} + +/*note: focus edje zoom in*/ +static void __cam_app_set_focus_zoom_in_effect(void *data) +{ + struct appdata *ad = (struct appdata *)data; + cam_retm_if(ad == NULL, "appdata is NULL"); + + if (ad->camapp_handle->enable_touch_af == TRUE) { + REMOVE_TIMER(ad->continuous_af_timer); + cam_camera_touch_af_press(ad); + } else { + 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_START_RATE, + CAM_FOCUS_EDJE_ZOOM_EFFECT_END_RATE, + CAM_FOCUS_EDJE_ZOOM_EFFECT_DURATION); + } +} + +/*note: focus edje zoom out*/ +static void __cam_app_set_focus_zoom_out_effect(void *data) +{ + struct appdata *ad = (struct appdata *)data; + cam_retm_if(ad == NULL, "appdata is NULL"); + + if (ad->camapp_handle->enable_touch_af == TRUE) { + REMOVE_TIMER(ad->continuous_af_timer); + cam_camera_touch_af_press(ad); + } else { + 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 ENABLE_MOUSE_CONTROL +Eina_Bool cam_mouse_button_down(void *data, int type, 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->zoom_edje + || ad->setting_ctxpopup + || (ad->toolbar_show_setting_popup == TRUE) + || (ad->toolbar_show_edit_shortcuts_popup == TRUE)) { + cam_debug(LOG_UI, "ignore touch event"); + ad->af_outside = TRUE; + } + + int toolbar_width = TOOLBAR_W; + + Ecore_Event_Mouse_Button *md = (Ecore_Event_Mouse_Button *) event_info; + cam_debug(LOG_UI, "mouse button down[%d, %d]", md->root.x, md->root.y); + + ad->touch_lcd_x = md->root.x; /* LCD x */ + ad->touch_lcd_y = md->root.y; /* LCD y */ + + ad->af_outside = FALSE; + + /* x */ + if (ad->touch_lcd_y < toolbar_width + || ad->touch_lcd_y > (ad->win_width - toolbar_width)) { + ad->af_outside = TRUE; + } else { + ad->af_x = ad->touch_lcd_y - ad->preview_offset_x; + } + /* y */ + if (ad->touch_lcd_x < ad->preview_offset_y + || ad->touch_lcd_x > (ad->preview_h + ad->preview_offset_y)) { + ad->af_outside = TRUE; + } else { + 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 + ("*************************************************************************************"); + if (ad->af_outside == FALSE) { + __cam_app_set_focus_zoom_in_effect((void *)ad); + } + cam_app_timeout_checker_update(); + cam_setting_toolbar_execution_time_checker_update(ad); + + return EINA_TRUE; +} + +Eina_Bool cam_mouse_button_up(void *data, int type, void *event_info) +{ + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; + + if (ad->zoom_edje + || ad->setting_ctxpopup + || (ad->toolbar_show_setting_popup == TRUE) + || (ad->toolbar_show_edit_shortcuts_popup == TRUE)) { + cam_debug(LOG_UI, "ignore touch event"); + ad->af_outside = TRUE; + return EINA_TRUE; + } + + Ecore_Event_Mouse_Button *md = (Ecore_Event_Mouse_Button *) event_info; + if (ad->shutter_move == TRUE) { + double y_gap = 0; + double x_gap = 0; + double shutter_h_ratio = SHUTTER_H_RATIO; + double shutter_w_ratio = SHUTTER_W_RATIO; + double screen_ratio = SCREEN_RATIO; + + y_gap = (double)md->root.y /(double)ad->win_width; + x_gap = (double)md->root.x /(double)ad->win_height; + + if (x_gap > (screen_ratio -shutter_h_ratio) || x_gap < shutter_h_ratio) { + if (!cam_camera_key_half_release(ad)) { + DEBUG_TRACE("cam_camera_key_half_release"); + } + } else if (ad->angle == 90 ||ad->angle == 180) { + if (y_gap > shutter_w_ratio) { + if (!cam_camera_key_half_release(ad)) { + DEBUG_TRACE("cam_camera_key_half_release"); + } + } + } else { + if (y_gap < screen_ratio -shutter_w_ratio) { + if (!cam_camera_key_half_release(ad)) { + DEBUG_TRACE("cam_camera_key_half_release"); + } + } + } + } + + cam_retvm_if(ad == NULL, EINA_FALSE, "appdata is NULL"); + cam_debug(LOG_UI, "mouse button up[%d, %d]", md->root.x, md->root.y); + if (ad->af_outside == FALSE) { + __cam_app_set_focus_zoom_out_effect((void *)ad); + } + camapp = ad->camapp_handle; + if (camapp == NULL) { + cam_warning(LOG_UI, "camapp_handle is NULL, maybe not created"); + return EINA_FALSE; + } + return EINA_TRUE; +} + +Eina_Bool cam_mouse_move(void *data, int type, void *event_info) +{ + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; + + Ecore_Event_Mouse_Move *md = (Ecore_Event_Mouse_Move *) event_info; + + cam_retvm_if(ad == NULL, -1, "appdata is NULL"); + cam_debug(LOG_UI, "mouse move[%d, %d]", md->root.x, md->root.y); + cam_debug(LOG_UI, "mouse move angle[%lf]", md->multi.angle); + cam_debug(LOG_UI, "mouse move pressure[%lf]", md->multi.pressure); + camapp = ad->camapp_handle; + if (camapp == NULL) { + cam_warning(LOG_UI, "camapp_handle is NULL, maybe not created"); + return -1; + } + cam_app_timeout_checker_update(); + + return 0; +} +#endif + +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 = + (camapp->camera_mode == CAM_CAMCORDER_MODE) ? + cam_file_get_internal_video_path() : + cam_file_get_internal_image_path(); + break; + case CAM_STORAGE_EXTERNAL: + default_path = + (camapp->camera_mode == CAM_CAMCORDER_MODE) ? + cam_file_get_external_video_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(void) +{ + + 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 (mm_state == RECORDER_STATE_RECORDING + &&camapp->camera_mode == CAM_CAMCORDER_MODE) { + new_filename = cam_file_get_next_filename(cam_app_get_target_path(), INAGE_FILE_NAME, IMAGE_FILE_EXTENSION); + } else { + new_filename = cam_file_get_next_filename(cam_app_get_target_path(), + (camapp->camera_mode == + CAM_CAMERA_MODE) ? + INAGE_FILE_NAME : + VIDEO_FILE_NAME, + (camapp->camera_mode == + CAM_CAMERA_MODE) ? + IMAGE_FILE_EXTENSION : + VIDEO_FILE_EXTENSION); + } + + 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(void *stream_buffer, int buffer_size, int width, + int height, camera_pixel_format_e format, 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_state_manager(previous, current, by_policy); + +} + +static void __cam_focus_cb(camera_focus_state_e state, void *user_data) { + + struct appdata *ad = NULL; + CamAppData *camapp = NULL; + + ad = (struct appdata *)user_data; + cam_retm_if(ad == NULL, "appdata is NULL"); + + /* + * TODO: perhaps we have to consider: in thread, we should not use any efl api. + * especially: + * try not to operation the global evas object in asynchronous + * callback or thread. Some bs perhaps caused by this. + * + */ + /*note: while rotating, return. */ + if (ad->is_rotating) return;/*note: while rotating, return. */ + camapp = ad->camapp_handle; + cam_retm_if(camapp == NULL, "camapp is NULL"); + + + cam_debug(LOG_MM, " Focus state changed to [%d]", state); + + if(ad->appcore_state == CAM_APPCORE_PAUSE_STATE) + return; + + if (camapp->camera_mode == CAM_CAMERA_MODE) { + camapp->focus_state = state ; + cam_app_focus_guide_update(ad); + } else { + camapp->focus_state = CAM_FOCUS_STATUS_RELEASED; + } + switch (state) { + case CAMERA_FOCUS_STATE_ONGOING: + break; + case CAMERA_FOCUS_STATE_FOCUSED: + if (ad->mm_state < CAMERA_STATE_CAPTURING) { + if (camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF + && camapp->camera_mode == CAM_CAMERA_MODE ) + cam_sound_play (CAM_SOUND_EFFECT_AF_OK, ad); + + if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO){ + REMOVE_TIMER(ad->continuous_af_timer); + DEBUG_TRACE("start caf"); + cam_app_focus_guide_create(ad); + cam_app_focus_guide_update(ad); + ad->continuous_af_timer= ecore_timer_add(FOCUS_FOCUSED_TIME_OUT, cam_continuous_af_start, ad); + } + } + break; + case CAMERA_FOCUS_STATE_FAILED: + if (ad->mm_state < CAMERA_STATE_CAPTURING) { + if (camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF + && camapp->camera_mode == CAM_CAMERA_MODE) + cam_sound_play (CAM_SOUND_EFFECT_AF_FAIL, ad); + + if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO) { + REMOVE_TIMER(ad->continuous_af_timer); + DEBUG_TRACE("start caf"); + cam_app_focus_guide_create(ad); + cam_app_focus_guide_update(ad); + ad->continuous_af_timer= ecore_timer_add(FOCUS_FAILED_TIME_OUT, cam_continuous_af_start, ad); + } + } + 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"); + + 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); + + /* save file */ + filename = cam_app_get_next_filename(); + 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); + } + +} + +static void __cam_capture_completed_cb(void *user_data) +{ +/* camera_error_e e;*/ + DEBUG_TRACE(); + struct appdata *ad = NULL; + CamAppData *camapp = NULL; + + ad = (struct appdata *)user_data; + camapp = ad->camapp_handle; + + if (camapp->camera_mode == CAM_CAMERA_MODE) { +#ifndef ENABLE_CAPTURE_ANIMATION + + /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */ + CamIdlerItem *item = NULL; + item = (CamIdlerItem *) + g_malloc(sizeof(CamIdlerItem)); + if (item == NULL) + return; + + if (item) { + item->data = user_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); + } +#endif + DEBUG_TRACE(); + if (!cam_app_preview_start(ad)) { + cam_critical(LOG_MM, "cam_app_preview_start failed"); + cam_app_notice_popup(ad, "cam_app_preview_start faild ", + 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; + CamAppData *camapp = NULL; + cam_retm_if(ad == NULL, "appdata is NULL"); + camapp = ad->camapp_handle; + cam_retm_if(camapp == NULL, "cam_handle is NULL"); + DEBUG_TRACE("policy is [%d]",policy); + switch (policy) { + case CAMERA_POLICY_SOUND: + { + cam_app_black_screen_show(ad, 2); + ecore_timer_add(0.01, cam_delay_popup, (void *)ad); + } + 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; + CamAppData *camapp = NULL; + cam_retm_if(ad == NULL, "appdata is NULL"); + camapp = ad->camapp_handle; + cam_retm_if(camapp == NULL, "cam_handle is NULL"); + DEBUG_TRACE("policy is [%d]",policy); + + switch (policy) { + case RECORDER_POLICY_SOUND: + { + cam_app_black_screen_show(ad, 2); + ecore_timer_add(0.01, cam_delay_popup, (void *)ad); + } + 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); + + switch (error) { + case CAMERA_ERROR_DEVICE: + cam_critical(LOG_SYS, + " MM CAMCARORDER ERROR "); + if (state < CAMERA_STATE_CAPTURING) { + cam_app_notice_popup(ad, + _("IDS_CAM_POP_UNABLE_TO_START_CAMERA"), + cam_app_timeout_notice_response_cb); + } else { + cam_app_notice_popup(ad, + _("IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"), + cam_app_timeout_notice_response_cb); + } + break; + case CAMERA_ERROR_INVALID_PARAMETER: + if (state == CAMERA_STATE_CAPTURING) { + cam_app_notice_popup(ad, + _("IDS_CAM_POP_CAPTURE_ERROR"), + cam_app_timeout_notice_response_cb); + } + break; + case CAMERA_ERROR_SOUND_POLICY: + { + DEBUG_TRACE(" MM CAMCARORDER ERROR\n"); + cam_app_black_screen_show(ad, 2); + ecore_timer_add(0.01, cam_delay_popup, + (void *)ad); + } + break; + case CAMERA_ERROR_INVALID_OPERATION: + { + DEBUG_TRACE(" Internal error\n"); + cam_app_black_screen_show(ad, 2); + ecore_timer_add(0.01, cam_delay_popup, + (void *)ad); + } + break; + case CAMERA_ERROR_OUT_OF_MEMORY: + { + DEBUG_TRACE(" Out of memory\n"); + cam_app_black_screen_show(ad, 2); + ecore_timer_add(0.01, cam_delay_popup, + (void *)ad); + } + break; + default: + { + DEBUG_TRACE(" MM CAMCARORDER ERROR error code =%x \n", error); + if (state == CAMERA_STATE_CAPTURING + && camapp->camera_mode == CAM_CAMERA_MODE) { + cam_app_notice_popup(ad, _("IDS_CAM_POP_CAPTURE_ERROR"), + cam_app_capture_error_popup_response_cb); + } + } + break; + } + +} + +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_state_manager(previous, current, by_policy); +} + +void __recording_status_cb(int elapsed_time, int 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"); + + if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + camapp->rec_stop_type = 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; + + if (camapp->camera_mode == CAM_CAMERA_MODE) { + switch (camapp->shooting_mode) { + case CAM_SINGLE_MODE: + case CAM_SELF_MODE: + camapp->capture_cb = (camera_capturing_cb) + __cam_capture_cb; + break; + default: + break; + } + } else { + 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_unset_preview_cb();*/ + /*ret &= cam_mm_unset_state_changed_cb();*/ + /*ret &= cam_mm_unset_error_cb();*/ + 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; +} + +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; + } + cam_file_init(NULL); + return; +} + +static void __ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) +{ + cam_debug(LOG_UI, " "); + + struct appdata *ad = (struct appdata *)priv; + 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); + elm_win_resize_object_add(ad->win_main, base); + 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; + char *val = NULL; + + CamAppData *camapp = NULL; + + cam_retm_if(ad == NULL, "appdata is NULL"); + camapp = ad->camapp_handle; + cam_retm_if(camapp == NULL, "cam_handle is NULL"); + + if (ad->imageviewer_ug) { + if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) { + if (result == NULL) { + ad->path_in_return = false; + 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; + cam_app_exit(ad); + } else { + /* get result value. */ + service_get_extra_data(result, "Result", &val); + + if (strcmp(val, "Ok") == 0) { + ad->path_in_return = true; + cam_app_exit(ad); + } + 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"); + ad->ug_is_deleting_process = TRUE; + + cam_app_timeout_checker_init(ad); + + /* add mouse down event - image viewer bug */ + if (ad->black_screen) { + DEL_EVAS_OBJECT(ad->black_screen); + ad->black_screen = NULL; + } + + if (ad->imageviewer_ug) { + ug_destroy(ad->imageviewer_ug); + ad->imageviewer_ug = NULL; + } + + elm_win_indicator_mode_set(ad->win_main, 0); + 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_mouse_event_init(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, + "PREVIEW START FAIL !!", + cam_app_timeout_notice_response_cb); + } + + if (!cam_key_grab_init(ad)) + DEBUG_TRACE("cam_key_grab_init fail"); + cam_app_key_event_init(ad); + /* update thumbnail to quickview after return from image viewer */ + cam_app_update_quickview_icon(ad); + cam_file_init(NULL); + ad->ug_is_deleting_process = FALSE; + return ECORE_CALLBACK_CANCEL; + + +} + +gboolean cam_app_run_image_viewer_ug(void *data, char *file_path) +{ + DEBUG_TRACE("START"); + + struct appdata *ad = (struct appdata *)data; + + cam_retvm_if(ad == NULL, FALSE, "appdata 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, " "); + cam_debug(LOG_UI, "path :%s", file_path); + + if (ad->imageviewer_ug) { + return FALSE;/*NOTE: ug is login, not create ug again.*/ + } + + /* init */ + enum ug_option opt; + opt = UG_OPT_INDICATOR_LANDSCAPE_ONLY | UG_OPT_INDICATOR_DISABLE; + UG_INIT_EFL(ad->win_main, opt); + + 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); + + service_create(&ad->imageviewer_service); + + 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 { + 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); + + switch (ad->rot_current) { + case APP_DEVICE_ORIENTATION_0: + elm_win_rotation_with_resize_set(ad->win_main, 0); + break; + case APP_DEVICE_ORIENTATION_270: + case APP_DEVICE_ORIENTATION_180: + break; + case APP_DEVICE_ORIENTATION_90: + elm_win_rotation_with_resize_set(ad->win_main, 90); + break; + default: + break; + } + + /* 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_app_preview_stop(); + power_unlock_state(POWER_STATE_NORMAL); + } else { + cam_warning(LOG_UI, "Cannot create imageviewer ug"); + cam_file_init(NULL); + return FALSE; + } + } + DEBUG_TRACE("END"); + + 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); + ad->launch_type = CAM_LAUNCH_IS_ALREADY_RUNNING; + DEBUG_TRACE("ad->launch_type = %d", ad->launch_type); + state = cam_mm_get_state(); + if (state > CAMERA_STATE_PREVIEW) { + cam_warning(LOG_MM, "Invaild state : %d", state); + return FALSE; + } + toolbar_hide_setting_popup(ad); + ad->foucs_out_from_quickview = FALSE; + + /* del mouse down event - image viewer bug */ + cam_app_mouse_event_deinit(ad); + if (!cam_app_run_image_viewer_ug(ad, cam_app_get_last_filename())) { + DEBUG_TRACE("cam_app_run_image_viewer_ug failed"); + cam_app_mouse_event_init(ad); + return FALSE; + } + + if (camapp->thumbnail_name) { /* Some image is deleted from image viewer and galler -> BS */ + free(camapp->thumbnail_name); + camapp->thumbnail_name = NULL; + } + + cam_app_timeout_checker_remove(); + return TRUE; +} + +gboolean cam_app_clear_engine_data(void *data, gboolean release) +{ + 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; + + 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; + } + + 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->win_main); + 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"); + + cam_debug(LOG_UI, " value [%f]", value); + + if (ad->progressbar) + elm_progressbar_value_set(ad->progressbar, value); + + 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"); + if (ad->progressbar) + DEL_EVAS_OBJECT(ad->progressbar); + if (ad->progressbar_edje) + DEL_EVAS_OBJECT(ad->progressbar_edje); + + cam_debug(LOG_UI, " done"); + + return TRUE; +} + +#if ENABLE_HAPTIC +void +cam_app_haptic_cb(void *data, Evas_Object *o, const char *emission, + const char *source) +{ + debug_fenter(LOG_UI); + cam_devman_haptic_play(100); +/* haptic_oneshot(100); */ +} +#endif + +static 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_zoom_warring_popup(void *data, const char *msg, + void (*func) (void *data, Evas_Object *obj, void *event_info)) +{ + struct appdata *ad = (struct appdata *)(data); + ad->zoom_warring_popup = elm_popup_add(ad->win_main); + evas_object_size_hint_weight_set(ad->zoom_warring_popup, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_object_text_set(ad->zoom_warring_popup, msg); + elm_popup_timeout_set(ad->zoom_warring_popup, 3.0); + evas_object_smart_callback_add(ad->zoom_warring_popup, "timeout", func, data); + evas_object_show(ad->zoom_warring_popup); +} +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_", _("IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA")); + syspopup_launch("mdm-syspopup", b); + bundle_free(b); + } + ecore_idler_add(cam_app_stop,ad); + elm_exit(); +} + + +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->win_main == NULL, " ad->win_main is NULL"); + Evas_Object *popup = NULL; + popup = elm_popup_add(ad->win_main); + 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); +} +void cam_app_snapshot_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->win_main == NULL, " ad->win_main is NULL"); + Evas_Object *popup = NULL; + popup = elm_popup_add(ad->win_main); + 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, 1.5); + evas_object_smart_callback_add(popup, "timeout", func, data); + ad->is_showing_snapshot_popup = TRUE; /*result popup is showing*/ + DEBUG_TRACE("ad->is_showing_snapshot_popup = TRUE"); + 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_mm_capture_stop(FALSE, camapp->camera_mode); + cam_app_exit(ad); +} + +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"); + if (obj) + evas_object_del(obj); + obj = NULL; + 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 void cam_app_auto_close_popup_response_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"); + + if (ad->auto_close_timer) { + ecore_timer_del(ad->auto_close_timer); + ad->auto_close_timer = NULL; + } + cam_app_timeout_checker_remove(); + if (ad->auto_close_popup) + evas_object_del(ad->auto_close_popup); + ad->auto_close_popup = NULL; + cam_app_exit(ad); + +} + +static void cam_app_auto_close_popup_response_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"); + if (ad->auto_close_timer) { + ecore_timer_del(ad->auto_close_timer); + ad->auto_close_timer = NULL; + } + if (ad->auto_close_popup) + evas_object_del(ad->auto_close_popup); + ad->auto_close_popup = NULL; + cam_app_timeout_checker_init(ad); +} + +void cam_app_auto_close_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"); + if (ad->auto_close_popup) { + evas_object_del(ad->auto_close_popup); + ad->auto_close_popup = NULL; + } + ad->auto_close_popup = elm_popup_add(ad->win_main); + if (ad->auto_close_popup == NULL) + return; + evas_object_size_hint_weight_set(ad->auto_close_popup, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_popup_timeout_set(ad->auto_close_popup, 9.0); + elm_object_text_set(ad->auto_close_popup, msg); + Evas_Object *btn1 = elm_button_add(ad->auto_close_popup); + if (btn1 == NULL) { + evas_object_del(ad->auto_close_popup); + ad->auto_close_popup = NULL; + return; + } + elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_OK")); + elm_object_part_content_set(ad->auto_close_popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", cam_app_auto_close_popup_response_ok_cb, (void*)ad); + Evas_Object *btn2 = elm_button_add(ad->auto_close_popup); + if (btn2 == NULL) { + evas_object_del(ad->auto_close_popup); + ad->auto_close_popup = NULL; + btn1 = NULL; + return; + } + elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_CANCEL")); + elm_object_part_content_set(ad->auto_close_popup, "button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", cam_app_auto_close_popup_response_cancel_cb, (void*)ad); + + evas_object_show(ad->auto_close_popup); + +} + +#if 0 +static Eina_Bool cam_app_auto_close_task(void *data) +{ + DEBUG_TRACE(" "); + int num; + char *str = NULL; + char *msg = _("IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS"); + num = 1+ snprintf(NULL, 0, msg, AUTO_CLOSE_COUNT); + DEBUG_TRACE("%d",num); + str = (char *)malloc(num); + if (str) { + memset(str, 0x00, num); + snprintf(str, num, msg, AUTO_CLOSE_COUNT); + DEBUG_TRACE("%s",str); + cam_app_auto_close_popup(data, str, NULL); + free(str); + str = NULL; + } + + return ECORE_CALLBACK_CANCEL; +} +#endif + +static Eina_Bool cam_app_auto_close_timer_cb(void *data) +{ + struct appdata *ad = (struct appdata *)(data); + CamAppData *camapp = NULL; + gdouble diff = 0.0; + int count = 10; + + cam_retvm_if(ad == NULL, 0, "appdata is NULL"); + camapp = ad->camapp_handle; + cam_retvm_if(camapp == NULL, 0, "cam_handle is NULL"); + + diff = _get_current_time() - camapp->last_time; + + ad->auto_close_count++; + + count = count - ad->auto_close_count; + + if ((cam_mm_get_state() == CAMERA_STATE_PREVIEW) + && (diff >= CAMERA_APP_TIMEOUT + 10)) { + cam_debug(LOG_UI, + "Quit camera application !!! diff time : [%lf]", + diff); + cam_app_timeout_checker_remove(); + + cam_app_exit(ad); + + return ECORE_CALLBACK_CANCEL; + } + cam_debug(LOG_UI, "####diff time : [%lf]", diff); + + return 1; + +} + +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, 0, "appdata is NULL"); + camapp = ad->camapp_handle; + cam_retvm_if(camapp == NULL, 0, "cam_handle is NULL"); + + diff = _get_current_time() - camapp->last_time; + + if ((cam_mm_get_state() == CAMERA_STATE_PREVIEW) + && (diff >= CAMERA_APP_TIMEOUT)) { + cam_debug(LOG_UI, + "auto close popup is closeed after 10 secondes !!! diff time : [%lf]", + diff); + ad->auto_close_count = 0; + ad->auto_close_timer = + ecore_timer_add(1, cam_app_auto_close_timer_cb, ad); +// ecore_idler_add(cam_app_auto_close_task, ad); + + } + cam_debug(LOG_UI, "diff time : [%lf]", diff); + return 1; +} + +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->auto_close_timer) { + ecore_timer_del(ad->auto_close_timer); + ad->auto_close_timer = NULL; + } + if (ad->auto_close_popup) { + evas_object_del(ad->auto_close_popup); + ad->auto_close_popup = NULL; + } + if (ad->timer_timer) { + ad->timer_activated = false; + DEL_EVAS_OBJECT(ad->timer_icon_edje); + REMOVE_TIMER(ad->timer_timer); + } + ad->timeout_checker = + ecore_timer_add(CAMERA_APP_TIMEOUT / 2, 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."); + elm_exit(); + } + + fd = open(CAM_FIFO_PATH, O_RDWR); + if (fd < 0) { + cam_critical(LOG_SYS, " Open CamApp FIFO failed."); + elm_exit(); + } + + 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 + +#ifdef USE_FILE_REG_THREAD + +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); + + if (!strcmp(REG_THREAD_EXIT, filename)) { + free(filename); + Exit_loop = TRUE; + break; + } else { + __cam_single_shot_reg_file(filename); + free(filename); + cam_debug(LOG_FILE, " register done."); + } + } + } + + 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; +} +#endif +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->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->resolution = ad->exe_args->resolution; + ad->camapp_handle->fps = FPS_DEFAULT; + } + } else { + ad->camapp_handle->shooting_mode = CAM_SINGLE_MODE; + if (ad->exe_args->width <= 0 + || ad->exe_args->height <= 0) { + ad->camapp_handle->resolution = CAM_RESOLUTION_VGA; + } else { + ad->camapp_handle->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); + + DEL_EVAS_OBJECT(ad->focus_edje); + + ad->focus_edje = + cam_app_load_edj(ad->layout_main, CAM_UTILS_EDJ_NAME, "focus_image"); + if (ad->focus_edje == NULL) { + cam_critical(LOG_UI, "focus_edje load failed "); + return EINA_FALSE; + } + + evas_object_resize(ad->focus_edje, ad->camera_focus_w, ad->camera_focus_h); + DEBUG_TRACE("#######################################\n"); + DEBUG_TRACE(" MOVE FOCUS_EDJE : %f, %f", ad->af_start_x, ad->af_start_y); + evas_object_move(ad->focus_edje, ad->af_start_x, ad->af_start_y); + evas_object_show(ad->focus_edje); + DEBUG_TRACE("#######################################\n"); + +#ifdef CAMERA_MACHINE_I686 + evas_object_hide(ad->focus_edje); +#endif + + return EINA_TRUE; +} + +Eina_Bool cam_app_focus_guide_update(void *data) +{ +#ifndef CAMERA_MACHINE_I686 + struct appdata *ad = (struct appdata *)data; + cam_retv_if(ad == NULL, EINA_FALSE); + + CamAppData *camapp = NULL; + + if (ad->focus_edje == NULL) { + return EINA_FALSE; + } + + /*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->setting_ctxpopup + || (ad->toolbar_show_setting_popup == TRUE) + || (ad->toolbar_show_edit_shortcuts_popup == TRUE)) { + cam_debug(LOG_UI, "do not need to update focus"); + edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program"); + return EINA_FALSE; + } + + camapp = ad->camapp_handle; + if (camapp == NULL) { + return EINA_FALSE; + } + if (ad->mm_state == CAMERA_STATE_CAPTURING + && camapp->camera_mode == CAM_CAMERA_MODE) { + return EINA_FALSE; + } + if (ad->mm_state < CAMERA_STATE_PREVIEW || FALSE) { + edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program"); + return EINA_FALSE; + } else { + DEBUG_TRACE("focus-state = %d, shooting-mode = %d", camapp->focus_state, camapp->shooting_mode); + if (camapp->recording_mode == CAM_RECORD_SELF + || camapp->recording_mode == CAM_RECORD_SELF_MMS + || camapp->shooting_mode == CAM_SELF_MODE) { + edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program"); + } else { + char signame[30] = { '\0', }; + const char *focus_state_name[4] = { + "notready", + "notready", + "focused", + "failed", + }; + + snprintf(signame, sizeof(signame), "%s,%s", "focus", focus_state_name[camapp->focus_state]); + + cam_debug(LOG_UI, "emit signal : %s", signame); + edje_object_signal_emit(_EDJ(ad->focus_edje), signame, "program"); + } + } +#endif + return EINA_TRUE; +} + +static int cam_app_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 (camapp->camera_mode == CAM_CAMERA_MODE) { + 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 (previous == CAMERA_STATE_CREATED && current == CAMERA_STATE_PREVIEW) { + cam_info(LOG_UI, "!!!!Preview Began"); +#ifndef CAMERA_MACHINE_I686 + if (ad->toolbar_setting_popup == NULL) { + if ((camapp->shooting_mode == CAM_SELF_MODE) + ||(camapp->recording_mode == CAM_RECORD_SELF) + ||(camapp->recording_mode == CAM_RECORD_SELF_MMS) ) { + DEBUG_TRACE("Not need to make setting menu"); + } else { + ecore_idler_add(cam_app_launch_after_preview_began, ad); + } + } +#endif + } + } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + 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"); + CamIdlerItem *item = NULL; + item = (CamIdlerItem *)g_malloc(sizeof(CamIdlerItem)); + if (item == NULL) + return FALSE; + + + if (camapp->filename) + free(camapp->filename); + cam_mm_get_filename(&camapp->filename,0);/*file size not used,so set to 0*/ + cam_info(LOG_UI, "Recorded file name [%s] ", camapp->filename); + + if (item) { + item->data = (void*)ad; + item->idler = ecore_idler_add(cam_video_capture_handle_idler, item); + + if (item->idler) + ad->capture_cb_list = g_list_append(ad->capture_cb_list, item->idler); + + cam_info(LOG_UI, "video capture idler add : %p ", item->idler); + } + + } + + if (previous == RECORDER_STATE_CREATED && current == RECORDER_STATE_READY) { + cam_info(LOG_UI, "!!!!Preview Began"); +#ifndef CAMERA_MACHINE_I686 + if (ad->toolbar_setting_popup == NULL) { + if ((camapp->shooting_mode == CAM_SELF_MODE) + ||(camapp->recording_mode == CAM_RECORD_SELF) + ||(camapp->recording_mode == CAM_RECORD_SELF_MMS) ) { + DEBUG_TRACE("Not need to make setting menu"); + } else { + ecore_idler_add(cam_app_launch_after_preview_began, ad); + } + } +#endif + } + } + cam_app_focus_guide_update(ad); + + if (ad->main_pipe) { + char *buffer = strdup("STATE_CHANGED"); + ecore_pipe_write(ad->main_pipe, buffer, strlen(buffer) + 1); + free(buffer); + } + + return 1; +} + +gboolean cam_app_exit(void *data) +{ + + struct appdata *ad = (struct appdata *)data; + cam_retvm_if(ad == NULL, FALSE, "appdata is NULL"); + + cam_app_stop(ad); + elm_exit(); + 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) { +#ifdef USE_CAM_STORAGE_SETTING + GValue value = { 0 }; +#endif + int mm_state = cam_mm_get_state(); + + 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, + _("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, + _("IDS_CAM_POP_MEMORY_CARD_REMOVED"), + cam_app_popup_response_cb); + } + } +#endif + +#ifdef USE_CAM_STORAGE_SETTING + CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL); + cam_handle_value_set(ad, PROP_STORAGE, &value); +#endif + cam_info(LOG_UI, "MMC card is removed"); + } + 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 + +gboolean cam_app_black_screen_show(void *data, int mode) +{ + struct appdata *ad = (struct appdata *)data; + cam_retvm_if(ad == NULL, FALSE, "appdata is NULL"); + Evas_Coord witdh = 0, height = 0; + + CAM_TA_ACUM_ITEM_BEGIN(" cam_app_black_screen_show", 0); + + cam_debug(LOG_UI, "~~~~~~~~~~~ mode :%d", mode); + if (ad->black_screen) { + evas_object_del(ad->black_screen); + ad->black_screen = NULL; + } else { + ad->black_screen = + cam_app_load_edj(ad->win_main, CAM_MAIN_LAYOUT_EDJ_NAME, + "black_screen"); + if (ad->black_screen == NULL) { + cam_critical(LOG_UI, "black_screen load failed "); + CAM_TA_ACUM_ITEM_END(" cam_app_black_screen_show", + 0); + return FALSE; + } + } + evas_object_geometry_get(ad->win_main, NULL, NULL, &witdh, &height); + evas_object_resize(ad->black_screen, witdh, height); + + evas_object_raise(ad->black_screen); + evas_object_show(ad->black_screen); + evas_object_show(ad->win_main); + evas_render(ad->evas); + + CAM_TA_ACUM_ITEM_END(" cam_app_black_screen_show", 0); + return TRUE; +} + +gboolean cam_app_black_screen_hide(void *data) +{ + struct appdata *ad = (struct appdata *)data; + cam_retvm_if(ad == NULL, FALSE, "appdata is NULL"); + CAM_TA_ACUM_ITEM_BEGIN(" cam_app_black_screen_hide", 0); + if (ad->black_screen) { + evas_object_del(ad->black_screen); + ad->black_screen = NULL; + edje_file_cache_flush(); + } +/* evas_render(ad->evas); */ + CAM_TA_ACUM_ITEM_END(" cam_app_black_screen_hide", 0); + return TRUE; +} + +#ifdef ENABLE_CAPTURE_ANIMATION + +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; + + DEL_EVAS_OBJECT(ad->shutter_screen); + +} + +static gboolean cam_app_shutter_screen_show(void *data) +{ + struct appdata *ad = (struct appdata *)data; + cam_retvm_if(ad == NULL, FALSE, "appdata is NULL"); + Evas_Coord witdh = 0, height = 0; + + char *group_name = "shutter_image"; + + CAM_TA_ACUM_ITEM_BEGIN(" cam_app_shutter_screen_show", 0); + + if (ad->shutter_screen) { + evas_object_del(ad->shutter_screen); + ad->shutter_screen = NULL; + } + + ad->shutter_screen = + cam_app_load_edj(ad->win_main, CAM_MAIN_LAYOUT_EDJ_NAME, + group_name); + if (ad->shutter_screen == NULL) { + cam_critical(LOG_UI, "shutter_screen load failed "); + CAM_TA_ACUM_ITEM_END(" cam_app_shutter_screen_show", 0); + return FALSE; + } + + evas_object_geometry_get(ad->win_main, NULL, NULL, &witdh, &height); + evas_object_resize(ad->shutter_screen, witdh, height); + /* evas_object_resize(ad->black_screen, ad->win_width, ad->win_height); */ + + /*evas_object_lower(ad->shutter_screen);*/ + evas_object_show(ad->shutter_screen); + evas_object_show(ad->win_main); +/* evas_render(ad->evas); */ + + 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); + +/* ecore_timer_add(0.1, cam_app_shutter_timer_cb, ad); */ + + CAM_TA_ACUM_ITEM_END(" cam_app_shutter_screen_show", 0); + return TRUE; +} +#endif +#ifdef ENABLE_CHECK_CAM_STATUS + +static void cam_app_check_status() +{ + cam_debug(LOG_SYS, "check status"); +} +#endif /* ENABLE_CHECK_CAM_STATUS */ + +static int cam_app_preview_unlock(void *data) +{ + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; + cam_retv_if(ad == NULL, FALSE); + + camapp = ad->camapp_handle; + if (camapp == NULL) { + cam_critical(LOG_UI, "handle is NULL"); + elm_exit(); + } + + elm_win_indicator_mode_set(ad->win_main, 0); + + return 0; +} + +static int cam_app_preview_lock(void *data) +{ + struct appdata *ad = (struct appdata *)data; + + if (ad == NULL) { + cam_critical(LOG_UI, "handle is NULL"); + elm_exit(); + } + + evas_object_hide(ad->timer_icon_edje); + REMOVE_TIMER(ad->timer_timer); + ad->timer_activated = false; + DEL_EVAS_OBJECT(ad->timer_icon_edje); + cam_app_timeout_checker_remove(); + if(!cam_key_grab_deinit(ad)) + DEBUG_TRACE("cam_key_grab_deinit fail"); + cam_app_key_event_deinit(ad); + + return 0; +} + +static void cam_idle_lockstate_change_cb(keynode_t *key, void *data) +{ + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; + int cam_state = -1; + int lock_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, "#################IDLE LOCK state changed : %d", + lock_state); + cam_state = cam_mm_get_state(); + + if (lock_state) { + DEBUG_TRACE(" "); + cam_app_preview_lock(ad); + } else if (!lock_state) { + DEBUG_TRACE(" "); + cam_app_preview_unlock(ad); + } + return; +} + +static void cam_usb_state_change_cb(keynode_t *key, void *data) +{ + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; + int usb_state = vconf_keynode_get_int(key); + int mm_state = cam_mm_get_state(); + + cam_retm_if(ad == NULL, "appdata is NULL"); + camapp = ad->camapp_handle; + cam_retm_if(camapp == NULL, "camapp_handle is NULL"); + + if (usb_state > VCONFKEY_SYSMAN_USB_DISCONNECTED + && (mm_state == RECORDER_STATE_RECORDING + || mm_state == RECORDER_STATE_PAUSED) + &&camapp->camera_mode == CAM_CAMCORDER_MODE) { + camapp->rec_stop_type = CAM_REC_STOP_USB_CONN; + cam_video_record_stop(ad); + } + return; +} + +#ifndef DISABLE_TOOLBAR_TOGGLE +static Eina_Bool _cam_app_toolbar_toggle_timer(void *data) +{ + struct appdata *ad = (struct appdata *)data; + if (ad == NULL) { + goto exit_timer; + } + if (ad->mm_state != CAMERA_STATE_PREVIEW) { + goto exit_timer; + } + + ad->toolbar_hided = TRUE; + cam_app_toggle_indicator(ad, TRUE); + cam_app_toggle_toolbar(ad, TRUE); + + exit_timer: + if (ad->toolbar_toggle_timer) + ecore_timer_del(ad->toolbar_toggle_timer); + ad->toolbar_toggle_timer = NULL; + return EINA_FALSE; +} +#endif + +void cam_app_toggle_indicator(void *data, gboolean hide) +{ +#ifndef DISABLE_INDICATOR + struct appdata *ad = (struct appdata *)data; + + cam_retm_if(ad == NULL, "appdata is NULL"); + + if (ad->toolbar_toggle_timer) { + REMOVE_TIMER(ad->toolbar_toggle_timer); + } + + indicator_toggle(ad, hide); +#endif + return; +} + +void cam_app_toggle_toolbar(void *data, gboolean hide) +{ +#ifndef DISABLE_TOOLBAR_TOGGLE + struct appdata *ad = (struct appdata *)data; + + cam_retm_if(ad == NULL, "appdata is NULL"); + + if (ad->toolbar_toggle_timer) { + REMOVE_TIMER(ad->toolbar_toggle_timer); + } + + if (hide) { + /* toolbar_hide_all_popup(ad); */ + unload_settings_edje(ad); + hide_toolbar_edje(ad); + } else { + show_toolbar_edje(ad); + } +#endif + 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_mm_preview_stop(camapp->camera_mode); /* stop preview */ + + 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); + + /* Effect */ + g_value_set_int(&i_value, EFFECT_DEFAULT); + cam_handle_value_set(ad, PROP_EFFECT, &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); +#ifdef GUIDE_LINE_ENALBE + settings_guideline_refresh(ad); +#endif + /* Review */ + g_value_set_boolean(&b_value, FALSE); + cam_handle_value_set(ad, PROP_REVIEW, &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); + + /* Resolution */ + if (camapp->camera_mode == CAM_CAMERA_MODE) { + g_value_set_int(&i_value, IMAGE_RESOLUTION_DEFAULT); + } else { + g_value_set_int(&i_value, REC_RESOLUTION_DEFAULT); + } + + cam_handle_value_set(ad, PROP_RESOLUTION, &i_value); +#ifndef DISABLE_INDICATOR + if (ad->indicator_edje) { + /* delete indicator */ + evas_object_hide(ad->indicator_edje); + cam_indicator_destory(ad); + } + cam_indicator_create(ad); +#endif + show_toolbar_edje(ad); + cam_app_preview_start(ad); +} + +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->win_main, + _("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_icon_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_icon_file_set(new_thumbnail_img, camapp->thumbnail_name, NULL); + elm_icon_aspect_fixed_set(new_thumbnail_img, EINA_FALSE); + elm_icon_resizable_set(new_thumbnail_img, EINA_TRUE, EINA_TRUE); + + 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 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"); + if (buffer) { + DEBUG_TRACE(); + /* Caution */ + /* DO NOT free buffer in here */ + /* buffer is freed by ecore */ + + int main_pipe_type = *((int *)buffer); + DEBUG_TRACE("main_pipe_type %d", main_pipe_type); + 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_ROTATE_ANIMATOR: { + ad->is_rotating = TRUE; + cam_ui_rotate_utils_rotate_start(ad, CAM_ROTATE_ICONS_ANTIMATION_DURATION); + } + break; + default: + break; + } + } + + 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->layout_main, 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"); + + /*cam_app_get_preview_offset_coordinate(ad);*/ + + 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_debug(LOG_CAM, "indicator_edje rotate start"); + cam_indicator_rotate(ad); + } + + if (ad->zoom_edje) { + unload_zoom_edje(ad); + load_zoom_edje(ad); + } + +#ifdef GUIDE_LINE_ENALBE + if (ad->guideline_edje) + settings_guideline_refresh(ad); +#endif + + /*update thumbnail*/ + toolbar_update_quickview_thumbnail_no_animation(ad); + /* rotate menu */ + if ((ad->show_menu == TRUE ) || + (ad->show_menu == FALSE && ad->displayed_setting_popup != DISPLAY_NONE_POPUP ) + || (ad->toolbar_show_edit_shortcuts_popup == TRUE) + || (ad->toolbar_show_setting_popup == 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; + } + + 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->appcore_state == CAM_APPCORE_TERMINATE_STATE + || ad->appcore_state == CAM_APPCORE_PAUSE_STATE) { + ad->is_rotating = FALSE; + return ECORE_CALLBACK_CANCEL; + } + /*cam_toolbar_rotate(ad);*/ + 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->appcore_state == CAM_APPCORE_TERMINATE_STATE + || ad->appcore_state == CAM_APPCORE_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); + + } + /*cam_app_get_preview_offset_coordinate(ad);*/ +} + +gboolean cam_app_get_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"); + + if (ad != NULL) { + CamAppData *camapp = ad->camapp_handle; + + if (camapp != NULL) { + *width = CAM_RESOLUTION_W(camapp->resolution); + *height = CAM_RESOLUTION_H(camapp->resolution); + + return TRUE; + } + } + + return FALSE; +} + +gboolean cam_app_reset_resolution(void *data, int width, int height) +{ + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; + int state = 0; + gboolean need_change_state = FALSE; + gboolean ret = TRUE; + + 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 (state > CAMERA_STATE_CREATED) + need_change_state = TRUE; + + cam_debug(LOG_MM, + " reset resolution = [%d x %d], current state = [%d], need_change_state = [%d]", + width, height, state, need_change_state); + + if (camapp->camera_mode == CAM_CAMERA_MODE) { +#ifdef ZSL_5M_TEST + if (camapp->shooting_mode == CAM_SINGLE_MODE + && (width * height == ZSL_5M_TEST)) +#else + if (0) /* camapp->shooting_mode == CAM_SINGLE_MODE && (width*height <= ZSL_MAX_REL)) */ +#endif + { + cam_info(LOG_MM, " set real resolution [%dx%d] for zsl", + width, height); + + ret &= cam_mm_set_image_size(width, height); + + if (need_change_state) { + ret &= cam_mm_preview_stop(camapp->camera_mode); + ret &= cam_mm_unrealize(); + ret &= cam_mm_set_video_size(width, height); + ret &= cam_mm_realize(); + ret &= cam_app_preview_start(ad); + } else { + ret &= cam_mm_set_video_size(width, height); + } + } else { + if (camapp->shooting_mode == CAM_SELF_MODE) { + if (need_change_state) { + ret &= cam_mm_preview_stop(CAM_CAMERA_MODE); + ret &= cam_mm_set_image_size(width, height); + ret &= cam_mm_set_video_size(width, height); + ret &= cam_app_preview_start(ad); + } else { + ret &= cam_mm_set_image_size(width, height); + ret &= cam_mm_set_video_size(width, height); + } + } else { + int p_width = 0; /* preview width */ + int p_height = 0; /* preview height */ + + ret &= cam_mm_get_video_size(&p_width, &p_height); + DEBUG_TRACE("get video size [%d]x[%d]", p_width, + p_height); + if (p_height == camapp->default_preview_height && (p_width == camapp->default_preview_width || p_width == PREVIEW_WIDE_W)) { + /* assume that last mode is normal capture mode */ + int cur_width = 0; + int cur_height = 0; + int temp_width = camapp->default_preview_width; + int temp_height = camapp->default_preview_height; + gboolean cur_is_wide = FALSE; + gboolean next_is_wide = FALSE; + + ret &= cam_mm_get_image_size(&cur_width, &cur_height); + cur_is_wide = cam_utils_check_wide_resolution(cur_width, cur_height); + cam_debug(LOG_MM, + "current image Resolution[w] : [%d]x[%d][%d]", + cur_width, cur_height, + cur_is_wide); + + next_is_wide = cam_utils_check_wide_resolution(width, height); + cam_debug(LOG_MM, + "next image Resolution[w] : [%d]x[%d][%d]", + width, height, next_is_wide); + + if (next_is_wide) + temp_width = PREVIEW_WIDE_W; + + ret &= cam_mm_set_image_size(width, height); + + if ((cur_is_wide != next_is_wide) + || (temp_width != p_width)) { + if (need_change_state) { + + ret &= cam_mm_preview_stop(camapp->camera_mode); + ret &= cam_mm_set_video_size(temp_width, temp_height); + ret &= cam_app_preview_start(ad); + } else { + ret &= cam_mm_set_video_size(temp_width, temp_height); + } + } + } else { + /* assume that last mode is zero system lag capture mode */ + int temp_width = camapp->default_preview_width; + int temp_height = camapp->default_preview_height; +#ifdef CAMERA_MACHINE_I686 + temp_width = 320; + temp_height = 240; +#endif + if (cam_utils_check_wide_resolution(width, height)) + temp_width = PREVIEW_WIDE_W; + + ret &= cam_mm_set_image_size(width, height); + + if (need_change_state) { + ret &= cam_mm_preview_stop(camapp->camera_mode); + ret &= cam_mm_set_video_size(temp_width, temp_height); + ret &= cam_app_preview_start(ad); + } else { + ret &= + cam_mm_set_video_size(temp_width, temp_height); + } + } + } + } + } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + if (need_change_state) { + ret &= cam_mm_preview_stop(CAM_CAMCORDER_MODE); + ret &= cam_mm_set_video_size(width, height); + ret &= cam_app_preview_start(ad); + } 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 { + switch (camapp->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; +} +/*TODO:temporily define this*/ +#define AUDIO_FORMAT_PCM_S16_LE 2 +#define AUDIO_CODEC_VORBIS 36 +#define VIDEO_CODEC_THEORA 27 + +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 format = AUDIO_FORMAT_PCM_S16_LE; + 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; + format = AUDIO_FORMAT_PCM_S16_LE; + channel = 1; + } else { + DEBUG_TRACE("mode = %d" , mode); + video_codec = RECORDER_VIDEO_CODEC_MPEG4; + audio_codec = RECORDER_AUDIO_CODEC_AAC; + sample_rate = 44100; + format = AUDIO_FORMAT_PCM_S16_LE; + channel = 2; + } +#ifdef CAMERA_MACHINE_I686 + video_codec = VIDEO_CODEC_THEORA; + audio_codec = AUDIO_CODEC_VORBIS; +#endif + + if (!cam_mm_set_codec(audio_codec, video_codec)) + return FALSE; + + if (!cam_mm_set_audio_source(sample_rate, format, 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; + + 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; + break; + case CAM_MM_SIZE_LIMIT_TYPE_SECOND: + ret = cam_mm_set_max_size(0); + 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 (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; + } + } + + 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); + + if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) { + /* get proper resolution */ + cam_mm_get_image_size(&width, &height); + if (camapp->camera_mode == CAM_CAMERA_MODE) { + camapp->resolution = CAM_RESOLUTION(width, height); + } + } + width = CAM_RESOLUTION_W(camapp->resolution); + height = CAM_RESOLUTION_H(camapp->resolution); + +#ifdef CAMERA_MACHINE_I686 + width = 320; + height = 240; +#endif + + if (CAM_CAMERA_MODE == mode) { + ret &= cam_mm_set_image_size(width, height); + ret &= cam_mm_set_image_count(camapp->image_count); +#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); + + } else if (CAM_CAMCORDER_MODE == mode) { + 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); +#else + ret &= cam_mm_set_fps(camapp->fps); + ret &= cam_mm_get_video_source_format(NULL, &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); + + 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); + ret &= cam_mm_set_zoom(camapp->zoom_min); + ret &= cam_mm_set_effect(camapp->effect); + 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); + } + + ret &= cam_mm_set_tag_enable(TRUE); + + ad->enable_mode_change = TRUE; + ad->is_recording = FALSE; + return ret; + +} + +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->aul_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_WARNING_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 { + 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"); + 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; + + } else { + /* enable flash icon */ + ad->torchlight_on = FALSE; + } + 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; +} + +Evas_Object *cam_app_create_win(const char *name) +{ + Evas_Object *eo = NULL; + int w, h; +#ifdef CAMERA_MACHINE_I686 + ecore_evas_app_comp_sync_set(EINA_FALSE); + eo = elm_win_add(NULL, name, ELM_WIN_BASIC); + ecore_evas_app_comp_sync_set(1); +#else + eo = elm_win_add(NULL, name, ELM_WIN_BASIC); +#endif + if (eo) { + elm_win_title_set(eo, name); + elm_win_borderless_set(eo, EINA_TRUE); + ecore_x_window_size_get(ecore_x_window_root_first_get(), + &w, &h); + evas_object_resize(eo, w, h); + } + + return eo; +} + +#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); + + elm_win_resize_object_add(parent, eo); + evas_object_show(eo); + } + + return eo; +} + +void cam_app_update_ts(Evas_Object *parent, struct text_part *tp) +{ + int i; + int size = sizeof(tp) / sizeof(tp[0]); + Evas_Object *eo = elm_layout_edje_get(parent); + + if (eo == NULL || tp == NULL || size < 0) + return; + + for (i = 0; i < size; i++) { + if (tp[i].part && tp[i].msgid) + edje_object_part_text_set(eo, + tp[i].part, _(tp[i].msgid)); + } +} + +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; + } +#ifndef ENABLE_CAPTURE_ANIMATION + else { + DEBUG_TRACE("thumbnail image check count=[%d]", g_thumbnail_image_check_count); + toolbar_update_quickview_thumbnail(ad); + } +#else + else if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + toolbar_update_quickview_thumbnail(ad); + + } else { + DEBUG_TRACE("NOT REACHED CODES REACHED!"); + } +#endif + 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) +{ +#ifdef CAMERA_MACHINE_I686 + return; +#else + 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*/ + filename = cam_app_get_last_filename(); + if (ad->camapp_handle->filename) { + free(ad->camapp_handle->filename); + ad->camapp_handle->filename = NULL; + } + if (filename != NULL) { + if (ad->camapp_handle->filename) { + free(ad->camapp_handle->filename); + ad->camapp_handle->filename = NULL; + } + ad->camapp_handle->filename = strdup(filename); + free(filename); + filename = NULL; + if (ad->camapp_handle->thumbnail_name) { + free(ad->camapp_handle->thumbnail_name); + ad->camapp_handle->thumbnail_name = NULL; + } + /*update quickview area */ + if (cam_file_get_cam_file_thumbnail_path(ad->camapp_handle->filename, + &ad->camapp_handle->thumbnail_name)) + toolbar_update_quickview_thumbnail_no_animation(ad); + } + + return; +#endif +} + +void cam_app_update_thumbnail() +{ +#ifdef CAMERA_MACHINE_I686 + return; +#else + 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; +#endif +} + +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->aul_service_mime = NULL; + + int ret = service_get_mime(service, &ad->aul_service_mime); + if (ret != SERVICE_ERROR_NONE) + { + cam_debug(LOG_UI, "service_get_mime is error "); + return FALSE; + } + + if(ad->aul_service_mime != NULL){ + /* get mode */ + if(strcmp(ad->aul_service_mime, AUL_SERVICE_MIME_TYPE_IMAGE) == 0){ + cam_debug(LOG_UI, "CAM_CAMERA_MODE"); + args->cam_mode = CAM_CAMERA_MODE; + }else if(strcmp(ad->aul_service_mime, AUL_SERVICE_MIME_TYPE_VIDEO) == 0){ + cam_debug(LOG_UI, "CAM_CAMCORDER_MODE"); + args->cam_mode = CAM_CAMCORDER_MODE; + } + } + + const char *val = NULL; + /* get caller appl. */ + service_get_extra_data(service, "CALLER", (char **)&val); + if (val) { + cam_debug(LOG_UI, "CALLER %s", val); + args->caller = strdup(val); + } else { + args->caller = NULL; + } + + /* resolution */ + val = NULL; + service_get_extra_data(service, "RESOLUTION", (char **)&val); + if (val) { + cam_debug(LOG_UI, "RESOLUTION %s", val); + + int res = 0; + + if (args->cam_mode == CAM_CAMERA_MODE) { + if (0 == strcmp(val, CAM_CAPTURE_RES_BIG)) + res = CAM_RESOLUTION_3264x2448; + else if (0 == strcmp(val, CAM_CAPTURE_RES_BIG_WIDE)) + res = CAM_RESOLUTION_3264x1836; + else if (0 == strcmp(val, CAM_CAPTURE_RES_MIDDLE)) + res = CAM_RESOLUTION_2560x1920; + else if (0 == strcmp(val, CAM_CAPTURE_RES_MIDDLE_WIDE)) + res = CAM_RESOLUTION_2560x1536; + else if (0 == strcmp(val, CAM_CAPTURE_RES_SMALL)) + res = CAM_RESOLUTION_2560x1920; + else if (0 == strcmp(val, CAM_CAPTURE_RES_SMALL_WIDE)) + res = CAM_RESOLUTION_1280x720; + else if (0 == strcmp(val, CAM_CAPTURE_RES_VGA)) + res = CAM_RESOLUTION_VGA; + else + res = CAM_RESOLUTION_3264x2448; + } else { + if (0 == strcmp(val, CAM_RECORDING_RES_HD)) + res = CAM_RESOLUTION_HD; + else if (0 == strcmp(val, CAM_RECORDING_RES_VGA)) + res = CAM_RESOLUTION_VGA; + else if (0 == strcmp(val, CAM_RECORDING_RES_QCIF)) + res = CAM_RESOLUTION_QCIF; + else + res = CAM_RESOLUTION_VGA; + } + + args->width = CAM_RESOLUTION_W(res); + args->height = CAM_RESOLUTION_H(res); + args->resolution = res; + } + + /* size limit */ + val = NULL; + service_get_extra_data(service, "LIMIT", (char **)&val); + if (val) { + cam_debug(LOG_UI, "LIMIT %s", val); + args->size_limit = atoi(val); + } else { + args->size_limit = 0; + } + + /* review */ + val = NULL; + service_get_extra_data(service, "REVIEW", (char **)&val); + if (val) { + if (0 == strcmp(val, "TRUE")) + args->review = TRUE; + else + args->review = FALSE; + } else { + args->review = FALSE; + } + + /* print exe args */ + cam_debug(LOG_SYS, "############### exe args ###############"); + cam_debug(LOG_SYS, "mode =%d", args->cam_mode); + cam_debug(LOG_SYS, "caller =%s", args->caller); + cam_debug(LOG_SYS, "width =%d", args->width); + cam_debug(LOG_SYS, "height =%d", args->height); + cam_debug(LOG_SYS, "limit =%d", args->size_limit); + cam_debug(LOG_SYS, "review =%d", args->review); + cam_debug(LOG_SYS, "############### end ###############"); + + return TRUE; +} + + +void cam_app_draw_af_box(void *data) +{ + + cam_retm_if(data == NULL, "data is null"); + struct appdata *ad = (struct appdata *)data; + ad->af_start_x = 0; + ad->af_start_y = 0; + + switch (ad->rot_current) { + case APP_DEVICE_ORIENTATION_0: + { + ad->af_start_x = ad->touch_lcd_x; + ad->af_start_y = ad->touch_lcd_y; + } + break; + case APP_DEVICE_ORIENTATION_180: + { + ad->af_start_x = ad->win_height - ad->touch_lcd_x; + ad->af_start_y = ad->win_width - ad->touch_lcd_y; + } + break; + case APP_DEVICE_ORIENTATION_270: + { + ad->af_start_x = ad->touch_lcd_y; + ad->af_start_y = ad->win_height - ad->touch_lcd_x; + } + break; + case APP_DEVICE_ORIENTATION_90: + { + ad->af_start_x = ad->win_width - ad->touch_lcd_y; + ad->af_start_y = ad->touch_lcd_x; + } + break; + default: + break; + } + + /* adjust */ + DEBUG_TRACE("ad->af_start_x=%f, ad->af_start_y=%f", ad->af_start_x, + ad->af_start_y); + ad->camera_focus_w = CAMERA_FOCUS_W * elm_config_scale_get(); + ad->camera_focus_h = CAMERA_FOCUS_H * elm_config_scale_get(); + DEBUG_TRACE("ad->camera_focus_w=%f, ad->camera_focus_h=%f", + ad->camera_focus_w, ad->camera_focus_h); + + ad->af_start_x = ad->af_start_x - (ad->camera_focus_w / 2); + ad->af_start_y = ad->af_start_y - (ad->camera_focus_h / 2); + DEBUG_TRACE("af area box start x,y =[%f,%f]\n", ad->af_start_x, + ad->af_start_y); + + if (ad->rot_current == APP_DEVICE_ORIENTATION_270 + || ad->rot_current == APP_DEVICE_ORIENTATION_90) { + if (ad->af_start_x < ad->preview_offset_x) { + ad->af_start_x = ad->preview_offset_x; + } + if (ad->af_start_y < ad->preview_offset_y) { + ad->af_start_y = ad->preview_offset_y; + } + if ((ad->af_start_x + ad->camera_focus_w) > + (ad->preview_w + ad->preview_offset_x)) { + ad->af_start_x = + (ad->preview_w + ad->preview_offset_x) - + ad->camera_focus_w; + } + if ((ad->af_start_y + ad->camera_focus_h) > + (ad->preview_h + ad->preview_offset_y)) { + ad->af_start_y = + (ad->preview_h + ad->preview_offset_y) - + ad->camera_focus_h; + } + + } else { + if (ad->af_start_y < ad->preview_offset_x) { + ad->af_start_y = ad->preview_offset_x; + } + if (ad->af_start_x < ad->preview_offset_y) { + ad->af_start_x = ad->preview_offset_y; + } + if ((ad->af_start_y + ad->camera_focus_h) > + (ad->preview_w + ad->preview_offset_x)) { + ad->af_start_y = + (ad->preview_w + ad->preview_offset_x) - + ad->camera_focus_h; + } + if ((ad->af_start_x + ad->camera_focus_w) > + (ad->preview_h + ad->preview_offset_y)) { + ad->af_start_x = + (ad->preview_h + ad->preview_offset_y) - + ad->camera_focus_w; + } + } + if (ad->focus_edje) { + DEBUG_TRACE + ("####################################################"); + DEBUG_TRACE("af area start ,ad->af_start_x,y =[%f,%f]\n", + ad->af_start_x, ad->af_start_y); + DEBUG_TRACE + ("####################################################"); + evas_object_move(ad->focus_edje, ad->af_start_x, + ad->af_start_y); + DEBUG_TRACE(" MOVE FOCUS_EDJE : %f,%f", ad->af_start_x, + ad->af_start_y); + } + +} + + +/* get preview start x,y coordinate */ +void cam_app_get_preview_offset_coordinate(void *data) +{ + + cam_retm_if(data == NULL, "data is null"); + struct appdata *ad = (struct appdata *)data; + + CamAppData *camapp = ad->camapp_handle; + cam_retm_if(camapp == NULL, "camapp is null"); + + int width = 0; + int height = 0; + CamVideoRectangle result; /* result ractangle */ + CamVideoRectangle window; /* target window ractangle */ + CamVideoRectangle preview; /* target preview rectangle */ + /*wow,now, the MMHandleType is not created*/ + cam_mm_get_video_size(&width, &height); + + ad->camfw_video_width = width; + ad->camfw_video_height = height; + preview.w = width; + preview.h = height; + DEBUG_TRACE("************************************************"); + DEBUG_TRACE("preview.w =%d, preview.h=%d", preview.w, preview.h); + + window.h = ad->win_height; + window.w = ad->win_width; + DEBUG_TRACE("window.w =%d, window.h=%d\n", window.w, window.h); + DEBUG_TRACE("************************************************"); + cam_app_preview_start_coordinate(preview, window, &result); + + ad->preview_offset_x = result.x; + ad->preview_offset_y = result.y; + ad->preview_w = result.w; + ad->preview_h = result.h; + + DEBUG_TRACE("************************************************"); + DEBUG_TRACE("ad->preview_offset_x = %d, ad->preview_offset_y = %d", + ad->preview_offset_x, ad->preview_offset_y); + DEBUG_TRACE("*************************************************"); + + camapp->focus_state = CAM_FOCUS_STATUS_RELEASED; + cam_app_focus_guide_update(ad); + + /* init */ + ad->af_x = (ad->win_width / 2) - ad->preview_offset_x; + ad->af_y = (ad->win_height / 2) - ad->preview_offset_y; + + ad->af_x = (ad->af_x * ad->camfw_video_width) / ad->preview_w; + ad->af_y = (ad->af_y * ad->camfw_video_height) / ad->preview_h; + /* init */ + ad->touch_lcd_x = (ad->win_height / 2); + ad->touch_lcd_y = (ad->win_width / 2); + + DEBUG_TRACE("*************************************************"); + DEBUG_TRACE(" ad->af_x=%d, ad->af_y=%d", ad->af_x, ad->af_y); + DEBUG_TRACE(" ad->af_start_x=%d, ad->af_start_y=%d", ad->af_start_x, ad->af_start_y); + DEBUG_TRACE(" ad->touch_lcd_x=%d, ad->touch_lcd_y=%d", ad->touch_lcd_x, + ad->touch_lcd_y); + DEBUG_TRACE("*************************************************"); + + cam_app_draw_af_box(ad); + camapp->focus_mode = CAM_FOCUS_MODE_CONTINUOUS; + + 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 EINA_FALSE; + } else if (cam_utils_check_battery_warning_low()) { + ad->battery_status = LOW_BATTERY_WARNING_STATUS; + } else { + ad->battery_status = NORMAL_BATTERY_STATUS; + } + + return EINA_TRUE; +} +//end file diff --git a/src/cam_config.c b/src/cam_config.c new file mode 100644 index 0000000..edef61e --- /dev/null +++ b/src/cam_config.c @@ -0,0 +1,360 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include + +/* +#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"); + } + 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_debug.c b/src/cam_debug.c new file mode 100644 index 0000000..92f95e6 --- /dev/null +++ b/src/cam_debug.c @@ -0,0 +1,291 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include +/* #include */ + +#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..9c4c4e9 --- /dev/null +++ b/src/cam_device_capacity.cpp @@ -0,0 +1,45 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 GetCamDevEffectCaps(unsigned int *uCapacity, void *user_data) +{ + return CCamDeviceCapacity::GetInstance()->GetCamDevEffectCaps(uCapacity, user_data); +} + +bool GetCamDevZoomCaps(int *min, int *max) +{ + return CCamDeviceCapacity::GetInstance()->GetCamDevZoomCaps(min, max); +} + +} + diff --git a/src/cam_devman.c b/src/cam_devman.c new file mode 100644 index 0000000..775f274 --- /dev/null +++ b/src/cam_devman.c @@ -0,0 +1,59 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 "cam_devman.h" +#include "cam_debug.h" + +gboolean cam_devman_init(void) +{ + int ret = HAPTIC_ERROR_NONE; + + ret = haptic_initialize(); + if (ret != HAPTIC_ERROR_NONE) { + cam_critical(LOG_MM, " haptic_initialize failed [%x]", ret); + return FALSE; + } + + return TRUE; +} + +gboolean cam_devman_deinit(void) +{ + int ret = HAPTIC_ERROR_NONE; + + ret = haptic_deinitialize(); + if (ret != HAPTIC_ERROR_NONE) { + cam_critical(LOG_MM, " haptic_deinitialize failed [%x]", ret); + return FALSE; + } + + return TRUE; +} + +gboolean cam_devman_haptic_play(int milisec) +{ + int ret = HAPTIC_ERROR_NONE; + + ret = haptic_vibrate_monotone(0, milisec, -1); + if (ret != HAPTIC_ERROR_NONE) { + cam_critical(LOG_MM, " haptic_vibrate_monotone failed [%x]", ret); + return FALSE; + } + + return TRUE; +} + diff --git a/src/cam_file.c b/src/cam_file.c new file mode 100644 index 0000000..15403a8 --- /dev/null +++ b/src/cam_file.c @@ -0,0 +1,489 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include "cam_file.h" +#include "cam_error.h" +#include "cam_debug.h" +#include "cam_ta.h" + +#include +#include +#include +#include +#include + +#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 { + cam_critical(LOG_FILE, "failed to get file type : [%s]", + filename); + return FALSE; + } + + media_info_h info; + 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); + 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 gchar *suffix) +{ + char *prefix = NULL; + char *result = NULL; + char *check_full_path = NULL; + int cnt = 0; + gboolean bFinal = FALSE; + + prefix = g_strdup_printf("%s/%s", storage_root, first_file_name); + + check_full_path = g_strdup_printf("%s%s", prefix, suffix); + + while (bFinal == FALSE && check_full_path) { + 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", prefix, cnt, suffix); + + bFinal = false; + } + } + + if (check_full_path) + g_free(check_full_path); + check_full_path = 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; + } + if (condition != 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; + } + if (condition != NULL) { + 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; + } + if (condition != NULL) { + 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); + + } + media_filter_destroy(filter); + filter = NULL; + return NULL; +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_long_press.c b/src/cam_long_press.c new file mode 100644 index 0000000..b5f5e3a --- /dev/null +++ b/src/cam_long_press.c @@ -0,0 +1,162 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include +#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 >= sizeof(g_timer)) + 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 >= sizeof(g_timer)) + 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 >= sizeof(g_timer)) + 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 >= sizeof(g_timer)) + 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 >= sizeof(g_timer)) + 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..5e49608 --- /dev/null +++ b/src/cam_menu_composer.c @@ -0,0 +1,169 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 "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_TIMER, CAM_MENU_EFFECTS, CAM_MENU_GUIDELINES,CAM_MENU_RESET}; +const CAM_MENU_ITEM effect[] = {CAM_MENU_EFFECT_NONE, CAM_MENU_EFFECT_NEGATIVE, CAM_MENU_EFFECT_BLACKANDWHITE, CAM_MENU_EFFECT_SEPIA}; + + +static gboolean __is_enabled_shortcuts(void* data); +static gboolean __is_enabled_timer(void* data); +static gboolean __is_enabled_effects(void* data); + + +void cam_compose_setting_menu(cam_menu_composer* composer) +{ + cam_retm_if(composer == NULL, "composer is NULL"); + + composer->title = strdup(_("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)), 50); + + unsigned int capacity = 0; + GetCamDevFuncCaps(&capacity, NULL); + + if(capacity & CAM_CP_FUNC_EDIR_SHORTCUT) + eina_array_push(composer->array, (void*)&setting[0]); + + if(capacity & CAM_CP_FUNC_TIMER) + eina_array_push(composer->array, (void*)&setting[1]); + + if(capacity & CAM_CP_FUNC_EFFECT_MODE) + eina_array_push(composer->array, (void*)&setting[2]); + + if(capacity & CAM_CP_FUNC_GUIDE_LINE) + eina_array_push(composer->array, (void*)&setting[3]); + + if(capacity & CAM_CP_FUNC_RESET) + eina_array_push(composer->array, (void*)&setting[4]); +} + +void cam_compose_menu_effect(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, NULL); + + 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_free(cam_menu_composer* composer) +{ + cam_ret_if(composer == NULL); + + 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 __is_enabled_shortcuts((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_GUIDELINES: + return TRUE; + case CAM_MENU_RESET: + return TRUE; + default: + break; + } + + return TRUE; + +} + +static gboolean __is_enabled_shortcuts(void* data) +{ + + struct appdata *ad = (struct appdata *)data; + cam_retv_if(ad == NULL, FALSE); + + unsigned int capacity; + GetCamDevFuncCaps(&capacity, NULL); + + if(!(capacity & CAM_CP_FUNC_EDIR_SHORTCUT)) + return FALSE; + + return TRUE; +} + +static gboolean __is_enabled_timer(void* data) +{ + struct appdata *ad = (struct appdata *)data; + cam_retv_if(ad == NULL, FALSE); + + unsigned int capacity; + GetCamDevFuncCaps(&capacity, NULL); + + return TRUE; + +} + +static gboolean __is_enabled_effects(void* data) +{ + struct appdata *ad = (struct appdata *)data; + cam_retv_if(ad == NULL, FALSE); + + unsigned int capacity; + GetCamDevFuncCaps(&capacity, NULL); + + if(!(capacity & CAM_CP_FUNC_EFFECT_MODE)) + return FALSE; + + return TRUE; + +} + diff --git a/src/cam_mm.c b/src/cam_mm.c new file mode 100755 index 0000000..f983925 --- /dev/null +++ b/src/cam_mm.c @@ -0,0 +1,1753 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 "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_effect_cb(camera_attr_effect_mode_e effect, 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(); + CamAppData *camapp = ad->camapp_handle; + 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_CAMERA0 || 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_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_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_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_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_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_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; + +} + +#ifdef ENABLE_CAPTURE_ANIMATION +gboolean cam_mm_get_screennail(MMCamcorderCaptureDataType **scrnl) +{ + int ret = 0; + char *err_name = NULL; + + MMCamcorderCaptureDataType *capture_struct = NULL; + int size = 0; + /* This is not the size of screennail buffer, this is a size of MMCamcorderCaptureDataType struct */ + g_return_val_if_fail(g_mm_handle, FALSE); + g_return_val_if_fail(g_mm_handle->hcam, FALSE); + + ret = mm_camcorder_get_attributes(g_mm_handle->hmm, &err_name, + "captured-screennail", + &capture_struct, &size, NULL); + + if (ret != CAMERA_ERROR_NONE) { + printf("set attr failed - code[%x] name[%s]\n", ret, err_name); + free(err_name); + err_name = NULL; + *scrnl = NULL; + return FALSE; + } + + *scrnl = capture_struct; + + return TRUE; + +} +#endif + +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_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) { + 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; + } + + e = recorder_set_file_format(g_mm_handle->hrec, RECORDER_FILE_FORMAT_3GP); + 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 format, 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); + 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_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_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_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->is_calling = 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->is_calling = 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_debug(LOG_MM, " camera state : %d", state); + /*todo:please consider recorder and camera*/ + if (state < 0) + return FALSE; + + switch (state) { + case CAMERA_STATE_NONE: + return FALSE; + break; + case CAMERA_STATE_CREATED: + /* stop state return TRUE; */ + break; + case CAMERA_STATE_PREVIEW: + CHECK_MM_ERROR(camera_stop_preview(g_mm_handle->hcam)); + break; + case CAMERA_STATE_CAPTURING: + return FALSE; + break; + default: + 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: + return FALSE; + break; + case RECORDER_STATE_CREATED: + /* stop state return TRUE; */ + break; + case RECORDER_STATE_READY: + CHECK_MM_ERROR(recorder_unprepare(g_mm_handle->hrec)); + break; + case RECORDER_STATE_RECORDING: + return FALSE; + break; + case RECORDER_STATE_PAUSED: + return FALSE; + break; + default: + 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; + if (mode == CAM_CAMCORDER_MODE) { + 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); + camera_destroy(hcam); + return FALSE; + } + g_return_val_if_fail(hcam, 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; + } + DEBUG_TRACE("camera_type = %d" , g_mm_handle->hdev); + + DEBUG_TRACE("--------------END---------------"); + CAM_TA_ACUM_ITEM_BEGIN("----cam_mm_create", 0); + + return g_mm_handle ? TRUE : FALSE; + +} + +gboolean cam_mm_destory(void) +{ + int state = 0; + g_return_val_if_fail(g_mm_handle, 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); + if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + if (g_mm_handle->hrec) { + state = cam_mm_get_state(); + DEBUG_TRACE("camera state : %d\n", + state); + if (state != RECORDER_STATE_CREATED) { /*no need delete*/ + /*TODO:now capi, have to change with camera and rec handle*/ + printf + ("[cam_mm_destory] Camera state is not match : %d\n", + state); + return FALSE; + } + CHECK_MM_ERROR(recorder_destroy(g_mm_handle->hrec));/*TODO:there is issue about in rec,to delete rec and cam handle*/ + CHECK_MM_ERROR(camera_destroy(g_mm_handle->hcam)); + g_mm_handle->hcam = 0; + g_mm_handle->hrec = 0; + g_mm_handle->hdev = -1; + + } + } else if (camapp->camera_mode == CAM_CAMERA_MODE) { + state = cam_mm_get_state(); + DEBUG_TRACE("camera state : %d\n", + state); + if (state != CAMERA_STATE_CREATED) { + printf + ("[cam_mm_destory] Camera state is not match : %d\n", + state); + return FALSE; + } + CHECK_MM_ERROR(camera_destroy(g_mm_handle->hcam)); + + g_mm_handle->hcam = 0; + g_mm_handle->hrec = 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); + + cam_debug(LOG_MM, ""); + CAM_TA_ACUM_ITEM_END(" camera key to capture start", 0); + + if (cam_mm_get_state() == CAMERA_STATE_PREVIEW + || cam_mm_get_state() == RECORDER_STATE_RECORDING) { + 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("mm_camcorder_capture_start", 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) +{ + 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) { + if (af_mode) { + /*continuous AF*/ + CHECK_MM_ERROR(camera_start_focusing(g_mm_handle->hcam, TRUE)); + } else { + /*Touch Auto AF*/ + CHECK_MM_ERROR(camera_start_focusing(g_mm_handle->hcam, FALSE)); + } + } else { + DEBUG_TRACE("Start focus operation failed - 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; + +} + +#ifndef CAPI_CAMERA_NEW/*TODO:the capi have changed, but they have not upload pkg,if uploaded, delete these*/ +gboolean cam_mm_set_capturing_cb(camera_capturing_cb capture_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_capturing_cb(g_mm_handle->hcam, capture_cb, data); + if (e != CAMERA_ERROR_NONE) { + DEBUG_TRACE("[ERROR] cam_mm_set_capturing_cb - error(%d)", e); + return FALSE; + } + return TRUE; +} + +gboolean cam_mm_unset_capturing_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_capturing_cb(g_mm_handle->hcam); + if (e != CAMERA_ERROR_NONE) { + DEBUG_TRACE("[ERROR] camera_unset_capturing_cb - error(%d)", e); + return FALSE; + } + return TRUE; +} + +gboolean cam_mm_set_capture_completed_cb(camera_capture_completed_cb capture_completed_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_capture_completed_cb(g_mm_handle->hcam, capture_completed_cb, data); + if (e != CAMERA_ERROR_NONE) { + DEBUG_TRACE("[ERROR] cam_mm_set_capture_completed_cb - error(%d)", e); + return FALSE; + } + return TRUE; +} + +gboolean cam_mm_unset_capture_completed_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_capture_completed_cb(g_mm_handle->hcam); + if (e != CAMERA_ERROR_NONE) { + DEBUG_TRACE("[ERROR] camera_unset_capture_completed_cb - error(%d)", e); + return FALSE; + } + return TRUE; +} + +#endif + +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; + } + + err = recorder_set_video_encoder(g_mm_handle->hrec, RECORDER_VIDEO_CODEC_H264); + if (err != RECORDER_ERROR_NONE) { + DEBUG_TRACE("recorder_set_video_encoder failed"); + return FALSE; + } + + err = recorder_attr_set_video_encoder_bitrate(g_mm_handle->hrec, 10000000); + if (err != RECORDER_ERROR_NONE) { + DEBUG_TRACE("recorder_attr_set_video_encoder_bitrate failed"); + return FALSE; + } + + err = recorder_set_file_format(g_mm_handle->hrec, RECORDER_FILE_FORMAT_3GP); + if (err < 0) { + cam_debug(LOG_MM, + "High speed recording. mm_camcorder_set_attributes fail. %d)", err); + 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_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; + } + } + 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_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; + 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_effect_cb(camera_attr_effect_mode_e effect, void *user_data) +{ + cam_retm_if(effect < CAMERA_ATTR_EFFECT_NONE|| 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++; + } +} + +//end of file diff --git a/src/cam_popup.c b/src/cam_popup.c new file mode 100644 index 0000000..a91ed7e --- /dev/null +++ b/src/cam_popup.c @@ -0,0 +1,290 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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; + +/* 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_orient_set(notify, ELM_NOTIFY_ORIENT_CENTER); + 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), "%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; +} + +// create popup with progress bar +gboolean cam_progress_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_progress_popup_delete(ad); + + // create popup + ad->progress_popup = cam_app_load_edj(ad->win_main, CAM_UTILS_EDJ_NAME, "progress_popup"); + cam_retvm_if(ad->progress_popup == NULL, FALSE, "progress_popup is NULL"); + + // create bar + ad->progress_popup_bar = elm_progressbar_add(ad->win_main); + 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); + + evas_object_show(ad->progress_popup); + + return TRUE; +} + +gboolean cam_progress_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; + + edje_object_part_text_set(_EDJ(ad->progress_popup), "progress_popup_text", text); + + return TRUE; +} + +gboolean cam_progress_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) { + elm_progressbar_value_set(ad->progress_popup_bar, value); + evas_object_raise(ad->progress_popup_bar); + } + else { + cam_debug(LOG_UI, "ad->progress_popup_bar is NULL"); + return FALSE; + } + + return TRUE; +} + +gboolean cam_progress_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; + } + + return TRUE; +} diff --git a/src/cam_rec.c b/src/cam_rec.c new file mode 100755 index 0000000..240d709 --- /dev/null +++ b/src/cam_rec.c @@ -0,0 +1,477 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include +#include + +#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_common_edc_callback.h" +#include "cam_toolbar_edc_callback.h" + +#define USE_TMP_FILE +#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 NULL; + } + + 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; + } + 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, _("IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"), + cam_app_popup_response_cb); + return TRUE; + } + +#ifdef USE_TMP_FILE + filename = __get_tmpfile_name(); +#else + filename = cam_app_get_next_filename(); +#endif + + 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; + } + + DEBUG_TRACE("camapp_handle->resolution value is %d ", + camapp->resolution); + if (camapp->resolution >= CAM_RESOLUTION(1280, 720)) { + ad->camcorder_rotate = CAMERA_ROTATION_NONE; + } + +/* flash on */ + if (camapp->flash > CAM_FLASH_OFF) { + GValue value = { 0 }; + CAM_GVALUE_SET_INT(value, CAM_FLASH_MOVIE_ON); + cam_handle_value_set(ad, PROP_FLASH, &value); + } + if (camapp->focus_state != CAM_FOCUS_STATUS_FOCUSED) { + if (!ad->camapp_handle->key_lock) { + ad->camapp_handle->key_lock = TRUE; + camapp->focus_mode = CAM_FOCUS_MODE_CONTINUOUS; + if (!cam_camera_key_half_press(ad)) { + DEBUG_TRACE("cam_camera_key_half_press failed"); + return FALSE; + } + ad->camapp_handle->key_lock = FALSE; + } + } +#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(); + +/* mm rec */ + if (!cam_mm_rec_start(NULL)) { + cam_critical(LOG_MM, "cam_mm_rec_start failed"); + cam_app_notice_popup(data, + "Recording is failed", + 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) + load_setting_values(ad); + else + cam_indicator_create(ad); + + if (cam_mm_get_state() == RECORDER_STATE_RECORDING + && (camapp->camera_mode == CAM_CAMCORDER_MODE) + ) { + cam_app_get_preview_offset_coordinate(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, + "Recording is failed", + 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"); + ad->is_recording = FALSE; + 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"); + cam_app_notice_popup(data, + "Recording is failed", + cam_app_timeout_notice_response_cb); + } + + if (camapp->flash > CAM_FLASH_OFF) { + GValue value = { 0 }; + CAM_GVALUE_SET_INT(value, CAM_FLASH_ON); + cam_handle_value_set(ad, PROP_FLASH, &value); + } + +/* 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"); + } + + unload_recording_edje(ad); + camapp->rec_elapsed = 0; + cam_toolbar_update(ad); + + if (ad->indicator_edje) + load_setting_values(ad); + else + cam_indicator_create(ad); + + + 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); +} + +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, ""); + + unload_recording_edje(ad); + camapp->rec_elapsed = 0; + cam_toolbar_update(ad); + + if (ad->indicator_edje) + load_setting_values(ad); + else + cam_indicator_create(ad); + + if (camapp->filename) { + GError *error = NULL; + + cam_debug(LOG_FILE, "tmp file : %s", camapp->filename); + +#ifdef USE_TMP_FILE + gchar *filename = NULL; + filename = cam_app_get_next_filename(); + + if (filename) { + cam_debug(LOG_UI, "FILE NAME : %s", filename); + + rename(camapp->filename, filename); + 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"); + return ECORE_CALLBACK_CANCEL; + } + } else { + cam_critical(LOG_MM, "cannot get filename"); + return ECORE_CALLBACK_CANCEL; + } +#endif + 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(); + ad->remained_count--; + } + + 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, _("IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"), + 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; + + if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) { + DEBUG_TRACE("appcore_state =%d ", ad->appcore_state); + if (ad->appcore_state == CAM_APPCORE_PAUSE_STATE) { + cam_app_exit(ad); + return ECORE_CALLBACK_CANCEL; + } + if(!((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "gallery") == 0))) { + cam_app_mouse_event_deinit(ad); + if (!cam_app_run_image_viewer_ug(ad, camapp->filename)) { + cam_app_mouse_event_init(ad); + return ECORE_CALLBACK_CANCEL; + } + } + } + + if (camapp->review) { + cam_app_black_screen_show(ad, -1); + DEBUG_TRACE(" review on in recording mode"); + cam_app_mouse_event_deinit(ad); + if (!cam_app_run_image_viewer_ug(ad, camapp->filename)) { + cam_app_mouse_event_init(ad); + + return ECORE_CALLBACK_CANCEL; + } + } + + return ECORE_CALLBACK_CANCEL; +} diff --git a/src/cam_sound.c b/src/cam_sound.c new file mode 100644 index 0000000..38c53aa --- /dev/null +++ b/src/cam_sound.c @@ -0,0 +1,263 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include +#include +#include +#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 (is_available != TRUE) { + cam_critical(LOG_SND, "sound_manager_is_route_available failed"); + return ret; + } + + /* If earphone mic is available, use earphone mic, otherwise use phone mic */ + cam_debug(LOG_SND, "SOUND_ROUTE_OUT_WIRED_ACCESSORY is available"); + route_to_active = (is_available)? SOUND_ROUTE_IN_WIRED_ACCESSORY : SOUND_ROUTE_IN_MIC; + + 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 100644 index 0000000..be94b34 --- /dev/null +++ b/src/cam_ta.c @@ -0,0 +1,620 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include +#include +#include /* time, ctime */ +#include /* gettimeofday */ +#include +#include +#include +#include + +#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 = 1; + +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, sizeof(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..8fdc961 --- /dev/null +++ b/src/cam_typeconverter.cpp @@ -0,0 +1,36 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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_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); +} + +} + diff --git a/src/cam_ui_effect_utils.c b/src/cam_ui_effect_utils.c new file mode 100644 index 0000000..bb235de --- /dev/null +++ b/src/cam_ui_effect_utils.c @@ -0,0 +1,167 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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; + +gboolean cam_ui_effect_utils_get_zoom_state() +{ + return __focus_zoom_origin_state; +} +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.*/ + Elm_Transit *transit_effect = elm_transit_add(); + if (transit_effect == NULL) + return; + if (to_rate < from_rate) + __focus_zoom_origin_state = TRUE; + else + __focus_zoom_origin_state = FALSE; + elm_transit_object_add(transit_effect, layout); + elm_transit_effect_zoom_add(transit_effect, from_rate, to_rate); + elm_transit_duration_set(transit_effect, duration); + elm_transit_objects_final_state_keep_set(transit_effect, TRUE); + + elm_transit_go(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 100644 index 0000000..ecc11b7 --- /dev/null +++ b/src/cam_ui_rotate_utils.c @@ -0,0 +1,602 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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; + Evas_Object *obj = rotate_obj_params->obj; + + ////TODO:add a function, to unset popup + struct appdata *ad = cam_appdata_get(); + 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; + 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"); + + /*note: if popup is showing, hide it*/ + cam_toolbar_and_setting_popup_del(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; + + + if (ad->toolbar_0_icon == NULL) { + cam_debug(LOG_UI, "toolbar_0_icon is null" ); + } else { + elm_transit_object_add(transit, ad->toolbar_0_icon); + } + if (ad->toolbar_1_icon == NULL) { + cam_debug(LOG_UI, "toolbar_1_icon is null" ); + } else { + elm_transit_object_add(transit, ad->toolbar_1_icon); + } + if (ad->toolbar_2_icon == NULL) { + cam_debug(LOG_UI, "toolbar_2_icon is null" ); + } else { + elm_transit_object_add(transit, ad->toolbar_2_icon); + } + if (ad->toolbar_3_icon == NULL) { + cam_debug(LOG_UI, "toolbar_3_icon is null" ); + } else { + elm_transit_object_add(transit, ad->toolbar_3_icon); + } + if (ad->toolbar_4_icon == NULL) { + cam_debug(LOG_UI, "toolbar_4_icon is null" ); + } else { + elm_transit_object_add(transit, ad->toolbar_4_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->toolbar.mode_item.camera_icon) { + elm_transit_object_add(transit, ad->toolbar.mode_item.camera_icon); + } + if (ad->toolbar.mode_item.camcorder_icon) { + elm_transit_object_add(transit, ad->toolbar.mode_item.camcorder_icon); + } + if (ad->shutterbtn_camera_icon) { + elm_transit_object_add(transit, ad->shutterbtn_camera_icon); + } + if (ad->shutterbtn_camcorder_icon) { + elm_transit_object_add(transit, ad->shutterbtn_camcorder_icon); + } + + if (ad->toolbar.quickview_item.thumbnail_image) + elm_transit_object_add(transit, ad->toolbar.quickview_item.thumbnail_image); +/* + 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; + + + if (ad->toolbar_0_icon == NULL) { + cam_debug(LOG_UI, "toolbar_0_icon is null" ); + } else { + elm_transit_object_add(transit, ad->toolbar_0_icon); + } + if (ad->toolbar_1_icon == NULL) { + cam_debug(LOG_UI, "toolbar_1_icon is null" ); + } else { + elm_transit_object_add(transit, ad->toolbar_1_icon); + } + if (ad->toolbar_2_icon == NULL) { + cam_debug(LOG_UI, "toolbar_2_icon is null" ); + } else { + elm_transit_object_add(transit, ad->toolbar_2_icon); + } + if (ad->toolbar_3_icon == NULL) { + cam_debug(LOG_UI, "toolbar_3_icon is null" ); + } else { + elm_transit_object_add(transit, ad->toolbar_3_icon); + } + if (ad->toolbar_4_icon == NULL) { + cam_debug(LOG_UI, "toolbar_4_icon is null" ); + } else { + elm_transit_object_add(transit, ad->toolbar_4_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/camera_utils.c b/src/camera_utils.c new file mode 100755 index 0000000..a33e293 --- /dev/null +++ b/src/camera_utils.c @@ -0,0 +1,1451 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#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_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 */ + +void static 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 FAKE_YUV_IMAGE_WIDTH 640 +#define FAKE_YUV_IMAGE_HEIGHT 480 +#define FAKE_YUV_IMAGE_PATH PREFIX"/share/camera/fake.yuv" + +/* #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; +} + + +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; + + if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + 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->resolution) { + case CAM_RESOLUTION_3264x2448: + 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_1920x1080: + case CAM_RESOLUTION_1600x1200: + 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: + critical_msg(LOG_CAM, "unhandled resolution:%dx%d", + HIWORD(camapp->resolution), + LOWORD(camapp->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; + + stat(filepath, &fileinfo); + + 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"); + cam_critical(LOG_CAM, "can't open file infomation"); + return NULL; + } + if (fread(data, filesize, 1, fp) != 1) { + perror("fread"); + fclose(fp); + 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 = _("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 = _("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, sizeof(strtemp))) + return CAM_STORAGE_INTERNAL; + } + + strtemp = (char *)cam_file_get_external_image_path(); + if (strtemp) { + if (!strncmp(filepath, strtemp, sizeof(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; + + 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 = _("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 = + _("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 */ + stat(src, &fileinfo); + + 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 = + _ + ("IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY"); + if (buff) { + free(buff); + buff = NULL; + } + goto ERROR; + } + + filesize -= copysize; + + } while (filesize > 0); + + } + + 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; +} + +int cam_utils_captured_image_select(void *data, const char *file_path) +{ + cam_retv_if(data == NULL, FALSE); + struct appdata *ad = (struct appdata *)data; + CamAppData *camapp = NULL; + camapp = ad->camapp_handle; + cam_retv_if(camapp == NULL, FALSE); + + return 0; +} + +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; + gdouble width_ratio = 0.0; + gdouble height_ratio = 0.0; + width_ratio = (gdouble) ad->camfw_video_width/ad->preview_w; + height_ratio = (gdouble) ad->camfw_video_height/ad->preview_h; + DEBUG_TRACE("result->x %d result->y %d",result->x, result->y); + switch (ad->camcorder_rotate) { + case CAMERA_ROTATION_NONE: + /* win: (x,y) -------->x (width) + * video:(x,y) - + * - + * - + * -y(height) + */ + result->x = width_ratio * (src.x - ad->preview_offset_x); + result->y = height_ratio * (src.y - ad->preview_offset_y); + /*notes:here,result->w: horizontal;result->h:vertical*/ + result->w = src.w * width_ratio; + result->h = src.h * height_ratio; + break; + case CAMERA_ROTATION_90: + /* win: (x,y) -------->x video:(x,y) (height)y<----- + * - - + * - - + * - - + * -y x(width) + */ + result->x = height_ratio * (ad->win_height - ad->preview_offset_y - src.x); + result->y = width_ratio * (src.y - ad->preview_offset_y); + /*notes:here,result->w: horizontal;result->h:vertical*/ + result->w = src.w * height_ratio; + result->h = src.h * width_ratio; + break; + case CAMERA_ROTATION_180: + /* win: (x,y) -------->x video:(x,y) y(height) + * - - + * - - + * - - + * -y (width)x<------ + */ + result->x = width_ratio * (ad->win_width - src.x - ad->preview_offset_x); + result->y = height_ratio * (ad->win_height - src.y - ad->preview_offset_y); + /*notes:here,result->w: horizontal;result->h:vertical*/ + result->w = src.w * width_ratio; + result->h = src.h * height_ratio; + break; + case CAMERA_ROTATION_270: + /* win: (x,y) -------->x video:(x,y) x(width) + * - - + * - - + * - - + * -y -------------y(height) + */ + result->x = height_ratio * (src.x - ad->preview_offset_y); + result->y = width_ratio * (ad->win_width - src.y - ad->preview_offset_x); + /*notes:here,result->w: horizontal;result->h:vertical*/ + result->w = src.w * height_ratio; + result->h = src.h * width_ratio; + 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; + gdouble width_ratio = 0.0; + gdouble height_ratio = 0.0; + width_ratio = (gdouble) ad->preview_w/ad->camfw_video_width; + height_ratio = (gdouble) ad->preview_h/ad->camfw_video_height; + + switch (ad->camcorder_rotate) { + case CAMERA_ROTATION_NONE: + /* + * win: (x,y) -------->x video:(x,y) -------->x(width) + * - - + * - - + * - - + * -y y(height) + */ + result->x = width_ratio * src.x + ad->preview_offset_x; + result->y = height_ratio * src.y + ad->preview_offset_y; + /*notes:here,result->w: horizontal;result->h:vertical*/ + result->w = src.w * width_ratio; + result->h = src.h * height_ratio; + break; + case CAMERA_ROTATION_90: + /* win: (x,y) -------->x video:(x,y) (height)y<----- + * - - + * - - + * - - + * -y x(width) + */ + result->x = ad->win_height - (height_ratio * src.y + ad->preview_offset_y + height_ratio * src.w); + result->y = width_ratio * src.x + ad->preview_offset_x; + /*notes:here,result->w: horizontal;result->h:vertical*/ + result->w = src.w * height_ratio; + result->h = src.h * width_ratio; + break; + case CAMERA_ROTATION_180: + /* win: (x,y) -------->x video:(x,y) y(height) + * - - + * - - + * - - + * -y (width)x<------ + */ + result->x = ad->win_width - (width_ratio * src.x + ad->preview_offset_x + width_ratio *src.w); + result->y = ad->win_height - (height_ratio * src.y + ad->preview_offset_y + height_ratio *src.h); + /*notes:here,result->w: horizontal;result->h:vertical*/ + result->w = src.w * width_ratio; + result->h = src.h * height_ratio; + break; + case CAMERA_ROTATION_270: + /* win: (x,y) -------->x video:(x,y) x(width) + * - - + * - - + * - - + * -y -------------y(height) + */ + result->x = height_ratio * src.y + ad->preview_offset_y; + result->y = ad->win_width - (width_ratio * src.x + ad->preview_offset_x + width_ratio * src.w); + /*notes:here,result->w: horizontal;result->h:vertical*/ + result->w = src.w * height_ratio; + result->h = src.h * width_ratio; + break; + default: + DEBUG_TRACE("REACHE UN-REACHED CODES"); + } + +} + 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..c3a1161 --- /dev/null +++ b/src/edc-callback/cam_common_edc_callback.c @@ -0,0 +1,573 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 "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_ui_effect_utils.h" +#include "cam_menu_composer.h" + +#define CAM_BEAT_UI_SHOT_MODE_NUMS 5 +static Evas_Coord mouse_down_x = 0; +static Evas_Coord mouse_down_y = 0; + +#ifdef PREVIEW_PINCH_ENALBE +static Evas_Coord mouse_multi_down_x = 0; +static Evas_Coord mouse_multi_down_y = 0; + + +static Evas_Coord mouse_move_x = 0; +static Evas_Coord mouse_move_y = 0; + +static Evas_Coord mouse_multi_move_x = 0; +static Evas_Coord mouse_multi_move_y = 0; + + +static double dist_start = 0.0; + +typedef enum { + MOUSE_DOWN_UNKNWON = 0, + MOUSE_DOWN_NONE, + MOUSE_DOWN_1, + MOUSE_DOWN_2, + MOUSE_DOWN_3, + MOUSE_DOWN_4, +} MouseState; + +static MouseState mouse_state = MOUSE_DOWN_NONE; + + + +static void __pinch_end() +{ + DEBUG_TRACE("__pinch_end"); + mouse_down_x = 0; + mouse_down_y = 0; + mouse_multi_down_x = 0; + mouse_multi_down_y = 0; + + mouse_move_x = 0; + mouse_move_y = 0; + mouse_multi_move_x = 0; + mouse_multi_move_x = 0; + + dist_start = 0.0; + + if (mouse_state == MOUSE_DOWN_UNKNWON) { + DEBUG_TRACE("state error,mouse_state = %d" ,mouse_state); + mouse_state = MOUSE_DOWN_NONE; + } + + struct appdata *ad = (struct appdata *)cam_appdata_get(); + if (ad) { + DEBUG_TRACE("__pinch_end"); + unload_zoom_edje(ad); + } else { + DEBUG_TRACE("appdata is NULL"); + } +} + +static void __pinch_start() +{ + mouse_down_x = 0; + mouse_down_y = 0; + mouse_multi_down_x = 0; + mouse_multi_down_y = 0; + + mouse_move_x = 0; + mouse_move_y = 0; + mouse_multi_move_x = 0; + mouse_multi_move_x = 0; + + dist_start = 0.0; + + if (mouse_state == MOUSE_DOWN_UNKNWON) { + DEBUG_TRACE("state error,mouse_state = %d" ,mouse_state); + mouse_state = MOUSE_DOWN_NONE; + } +} +#endif/*PREVIEW_PINCH_ENALBE*/ + +static void __mouse_up_cb(void *data, + Evas * evas, + Evas_Object *obj, + void *event_info) +{ + Evas_Coord minw = 0, minh = 0, diff_x = 0, diff_y = 0; + Evas_Event_Mouse_Up *mu = (Evas_Event_Mouse_Up *)event_info; + struct appdata *ad = (struct appdata *)cam_appdata_get(); + cam_retm_if(ad == NULL, "appdata is NULL"); + cam_retm_if(mu == NULL, "event_info is NULL"); + + if (mu->flags & EVAS_BUTTON_DOUBLE_CLICK) {/*double click*/ + DEBUG_TRACE("TEST:double click"); + goto double_click; + } + +#ifdef PREVIEW_PINCH_ENALBE + DEBUG_TRACE("__mouse_up_cb,mouse_state = %d",mouse_state); + mouse_state--; + DEBUG_TRACE("__mouse_up_cb,mouse_state = %d",mouse_state); +#endif + elm_coords_finger_size_adjust(1, &minw, 1, &minh); + + /* minw *= 2; */ + /* minh *= 2; */ + diff_x = mouse_down_x - mu->canvas.x; + diff_y = mouse_down_y - mu->canvas.y; + + /* CAM_UI_LOG("down[ %d, %d], diff [%d, %d]", mouse_down_x, mouse_down_y, diff_x, diff_y); */ + if ((ABS(diff_x) > minw) || (ABS(diff_y) > minh)) { /* dragging */ + if (diff_y < 0) { + if (ABS(diff_y) > ABS(diff_x)) { /* down */ + /* cam_debug(LOG_UI, "flicking down"); */ + goto flick_down; + } else { + if (diff_x < 0) { /* right */ + /* cam_debug(LOG_UI, "flicking right"); */ + goto flick_right; + } else { /* left */ + /* cam_debug(LOG_UI, "flicking left"); */ + goto flick_left; + } + } + } else { + if (ABS(diff_y) > ABS(diff_x)) { /* up */ + /* cam_debug(LOG_UI, "flicking up"); */ + goto flick_up; + } else { + if (diff_x < 0) { /* right */ + /* cam_debug(LOG_UI, "flicking right"); */ + goto flick_right; + } else { /* left */ + /* cam_debug(LOG_UI, "flicking left"); */ + goto flick_left; + } + } + } + } + + /* mouse_flick = CAM_MOUSE_FLICK_NONE; */ + evas_object_smart_callback_call((Evas_Object *)data, "mouse.click", + (void *)evas_object_name_get(obj)); + return; + double_click: + DEBUG_TRACE("TODO:if you have some thing to do while double click, you could add here"); + return; + flick_up: + /* mouse_flick = CAM_MOUSE_FLICK_UP; */ + evas_object_smart_callback_call((Evas_Object *)data, + "mouse.flick.up", NULL); + return; + flick_down: + /* mouse_flick = CAM_MOUSE_FLICK_DOWN; */ + evas_object_smart_callback_call((Evas_Object *)data, + "mouse.flick.down", NULL); + return; + flick_left: + /* mouse_flick = CAM_MOUSE_FLICK_LEFT; */ + evas_object_smart_callback_call((Evas_Object *)data, + "mouse.flick.left", NULL); + return; + flick_right: + /* mouse_flick = CAM_MOUSE_FLICK_RIGHT; */ + evas_object_smart_callback_call((Evas_Object *)data, + "mouse.flick.right", NULL); +#ifdef PREVIEW_PINCH_ENALBE + __pinch_end(); +#endif + 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_UI_LOG("mouse down :[%d, %d]", ev->canvas.x, ev->canvas.y); + + struct appdata *ad = (struct appdata *)cam_appdata_get(); + cam_retm_if(ad == NULL, "appdata is NULL"); + cam_retm_if(ev == NULL, "event_info is NULL"); + +/*calculate af_x*/ + + /* CAM_UI_LOG("mouse down :[%d, %d]", ev->canvas.x, ev->canvas.y); */ +#ifdef PREVIEW_PINCH_ENALBE + __pinch_start(); + + DEBUG_TRACE("__mouse_down_cb,mouse_state 01= %d",mouse_state); + mouse_state++; + DEBUG_TRACE("__mouse_down_cb,mouse_state 02= %d",mouse_state); + +#endif + mouse_down_x = ev->canvas.x; + mouse_down_y = ev->canvas.y; + return; +} + +#ifdef PREVIEW_PINCH_ENALBE +static void __mouse_move_cb(void *data, Evas * evas, Evas_Object *obj, + void *event_info) +{ + DEBUG_TRACE("__mouse_move_cb"); + Evas_Event_Mouse_Move *ev = (Evas_Event_Mouse_Move *) event_info; + + CAM_UI_LOG("mouse move :[%d, %d]", ev->cur.canvas.x, ev->cur.canvas.y); + DEBUG_TRACE("device id:%d",ev->buttons); + DEBUG_TRACE("X = %d,Y = %d",ev->cur.canvas.x, ev->cur.canvas.y); + mouse_move_x = ev->cur.canvas.x; + mouse_move_y = ev->cur.canvas.y; + + DEBUG_TRACE("__mouse_move_cb mouse_state = %d",mouse_state); + /*dist_start = sqrt(pow(mouse_multi_down_x-mouse_down_x,2) + pow(mouse_multi_down_y-mouse_down_y,2));*/ + + if (mouse_state == MOUSE_DOWN_2) { + dist_start = sqrt(pow(mouse_multi_move_x-mouse_move_x,2)+pow(mouse_multi_move_y-mouse_move_y,2)); + DEBUG_TRACE("mouse_state = %d",mouse_state); + DEBUG_TRACE("dist_start = %lf",dist_start); + } + return; +} + + +static void __mouse_multi_down_cb(void *data, Evas * evas, Evas_Object *obj, + void *event_info) +{ + DEBUG_TRACE("__mouse_multi_down_cb"); + Evas_Event_Multi_Down *ev = (Evas_Event_Multi_Down *)event_info; + DEBUG_TRACE("device id:%d", ev->device); + DEBUG_TRACE("X = %d,Y = %d", ev->canvas.x, ev->canvas.y); + mouse_state++; + DEBUG_TRACE("__mouse_multi_down_cb mouse_state = %d",mouse_state); + + mouse_multi_down_x = ev->canvas.x; + mouse_multi_down_y = ev->canvas.y; + + mouse_multi_move_x = mouse_multi_down_x; + mouse_multi_move_y = mouse_multi_down_y; + + /*dist_start = sqrt(pow(mouse_multi_down_x-mouse_down_x,2) + pow(mouse_multi_down_y-mouse_down_y,2));*/ + DEBUG_TRACE("__mouse_multi_down_cb dist_start = %lf ",dist_start); + + return; +} + +static void __mouse_multi_up_cb(void *data, Evas * evas, Evas_Object *obj, + void *event_info) +{ + DEBUG_TRACE("__mouse_multi_up_cb"); + Evas_Event_Multi_Up *ev = (Evas_Event_Multi_Up *)event_info; + + DEBUG_TRACE("device id:%d",ev->device); + DEBUG_TRACE("device id:%d",ev->device); + DEBUG_TRACE("X = %d,Y = %d",ev->canvas.x,ev->canvas.y); + if (mouse_state <= MOUSE_DOWN_2) { + __pinch_end(); + } + mouse_state--; + DEBUG_TRACE("__mouse_multi_up_cb mouse_state = %d",mouse_state); + + return; +} + +static Eina_Bool __pinch_move(void *data,gboolean is_zoom_in,int zoom_value) +{ + 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 state = 0; + debug_fenter(LOG_UI); + 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) { + + ad->show_menu = FALSE; + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; + cam_toolbar_and_setting_popup_del(ad); + + if (!camapp->zoom_lock + && camapp->recording_mode != CAM_RECORD_SLOW) { + cam_pinch_zoom_in(ad,is_zoom_in,zoom_value); + return EINA_TRUE; + } + } + }else if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + if (state == RECORDER_STATE_READY + || state == RECORDER_STATE_RECORDING + || state == RECORDER_STATE_PAUSED) { + + ad->show_menu = FALSE; + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; + cam_toolbar_and_setting_popup_del(ad); + + if (!camapp->zoom_lock + && camapp->recording_mode != CAM_RECORD_SLOW) { + cam_pinch_zoom_in(ad,is_zoom_in,zoom_value); + return EINA_TRUE; + } + } + + + } + + return EINA_TRUE; +} + +static void __mouse_multi_move_cb(void *data, Evas * evas, Evas_Object *obj, + void *event_info) +{ + DEBUG_TRACE("__mouse_multi_move_cb"); + Evas_Event_Multi_Move *ev = (Evas_Event_Multi_Move *)event_info; + + DEBUG_TRACE("device id:%d", ev->device); + DEBUG_TRACE("device id:%d", ev->device); + DEBUG_TRACE("X = %d,Y = %d", ev->cur.canvas.x, ev->cur.canvas.y); + DEBUG_TRACE("__mouse_multi_move_cb mouse_state = %d", mouse_state); + mouse_multi_move_x = ev->cur.canvas.x; + mouse_multi_move_y = ev->cur.canvas.y; + + double dist = sqrt(pow(mouse_multi_move_x-mouse_move_x,2)+pow(mouse_multi_move_y-mouse_move_y,2)); + DEBUG_TRACE("__mouse_multi_move_cb dist = %f,dist_start = %f ",dist,dist_start); + struct appdata *ad = (struct appdata *)cam_appdata_get(); + static int zoom_count = 0; + zoom_count++; + if(zoom_count%7 != 0) { + return; + } + zoom_count = 0; + /*int ratio = 0;*/ + int is_zoom_in = FALSE; + if (dist>dist_start) { + /*ratio = dist*2/dist_start;*/ + is_zoom_in = TRUE; + } else { + /*ratio = dist_start*2/dist;*/ + is_zoom_in = FALSE; + } + + switch(mouse_state) { + case MOUSE_DOWN_1: + break; + case MOUSE_DOWN_2: + { + DEBUG_TRACE("mouse_state = %d",mouse_state); + __pinch_move(ad,is_zoom_in,1); + } + break; + case MOUSE_DOWN_3: + break; + case MOUSE_DOWN_4: + break; + default: + break; + } + + return; +} +#endif /*PREVIEW_PINCH_ENALBE*/ + +void define_mouse_callback(Evas_Object *edje, Evas_Object *parent) +{ + mouse_down_x = 0; + mouse_down_y = 0; + + evas_object_event_callback_del(edje, EVAS_CALLBACK_MOUSE_DOWN, + __mouse_down_cb); + + evas_object_event_callback_del(edje, EVAS_CALLBACK_MOUSE_UP, + __mouse_up_cb); + evas_object_event_callback_add(edje, EVAS_CALLBACK_MOUSE_DOWN, + __mouse_down_cb, parent); + + evas_object_event_callback_add(edje, EVAS_CALLBACK_MOUSE_UP, + __mouse_up_cb, parent); + +#ifdef PREVIEW_PINCH_ENALBE + evas_object_event_callback_del(edje, EVAS_CALLBACK_MOUSE_MOVE, __mouse_move_cb); + evas_object_event_callback_add(edje, EVAS_CALLBACK_MOUSE_MOVE, __mouse_move_cb, parent); + + evas_object_event_callback_del(edje, EVAS_CALLBACK_MULTI_DOWN, __mouse_multi_down_cb); + evas_object_event_callback_add(edje, EVAS_CALLBACK_MULTI_DOWN, __mouse_multi_down_cb, parent); + + evas_object_event_callback_del(edje, EVAS_CALLBACK_MULTI_UP, __mouse_multi_up_cb); + evas_object_event_callback_add(edje, EVAS_CALLBACK_MULTI_UP, __mouse_multi_up_cb, parent); + + evas_object_event_callback_del(edje, EVAS_CALLBACK_MULTI_MOVE, __mouse_multi_move_cb); + evas_object_event_callback_add(edje, EVAS_CALLBACK_MULTI_MOVE, __mouse_multi_move_cb, parent); +#endif +} + +void cam_layout_del_all(void *data) +{ + CAM_UI_LOG(); + struct appdata *ad = (struct appdata *)data; + cam_toolbar_destroy(ad); + cam_indicator_destory(ad); + unload_zoom_edje(ad); + DEL_EVAS_OBJECT(ad->focus_edje); + DEL_EVAS_OBJECT(ad->layout_main); + DEL_EVAS_OBJECT(ad->black_screen); + DEL_EVAS_OBJECT(ad->recording_edje); + DEL_EVAS_OBJECT(ad->progressbar); + DEL_EVAS_OBJECT(ad->progress_popup); + DEL_EVAS_OBJECT(ad->progress_popup_bar); + DEL_EVAS_OBJECT(ad->timer_icon_edje); + ad->show_menu = FALSE; + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; +} + +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_menu_item_to_mmfw_value(int mode) +{ + switch(mode) + { + 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; + default: + return -1; + } +} + +int cam_get_menu_item_to_index(int menu_type, int item) +{ + cam_menu_composer* menu_composer = NULL; + menu_composer = malloc(sizeof(cam_menu_composer)); + + switch((CAM_MENU_ITEM)menu_type) + { + case CAM_MENU_EFFECTS: + cam_compose_menu_effect(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) + { + return index; + } + } + cam_compose_free(menu_composer); + return INVALID_INDEX; +} + + +int cam_get_value_to_index(int menu_type, int value) +{ + cam_menu_composer* menu_composer = NULL; + menu_composer = malloc(sizeof(cam_menu_composer)); + int item = 0; + + switch(menu_type) + { + case CAM_MENU_EFFECTS: + cam_compose_menu_effect(menu_composer); + item = cam_convert_effect_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) + { + 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 != ad->camapp_handle->shooting_mode) { + cam_handle_value_set(ad, PROP_SHOT_MODE, &value); + } + return 0; +} + + + 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..7ad1c47 --- /dev/null +++ b/src/edc-callback/cam_indicator_edc_callback.c @@ -0,0 +1,215 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 "camera_utils.h" + +#include "cam_indicator_edc_callback.h" +#include "cam_common_edc_callback.h" +#include "cam_image_name.h" +#include "edc_string.h" + +#define CHARGING_INTERVAL (0.5) + +#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 Evas_Object *indicator_image_obj_battery = NULL; + +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; + cam_retvm_if(camapp == NULL, 0, "camapp_handle is NULL"); + + 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 TRUE; +} + +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 (camapp->battery_ani_timer) { + cam_debug(LOG_UI, "battery_ani timer already exists! "); + return; + } + camapp->battery_ani_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->camapp_handle->battery_ani_timer) { + ecore_timer_del(ad->camapp_handle->battery_ani_timer); + ad->camapp_handle->battery_ani_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_icon_add(ad->indicator_edje); + } + cam_retm_if(indicator_image_obj_battery == NULL, "indicator_image_obj_battery is NULL"); + elm_icon_file_set(indicator_image_obj_battery, image_file, NULL); + 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 load_setting_values(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); +#endif + return; +} + +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) { + load_setting_values(ad); + evas_object_show(ad->indicator_edje); + return EXIT_SUCCESS; + } + + switch (ad->target_direction) { + case CAM_TARGET_DIRECTION_LANDSCAPE: + ad->indicator_edje = + cam_app_load_edj(ad->win_main, + CAM_INDICATOR_EDJ_NAME, + "indicator_landscape"); + break; + case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE: + ad->indicator_edje = + cam_app_load_edj(ad->win_main, + CAM_INDICATOR_EDJ_NAME, + "indicator_landscape_inverse"); + break; + case CAM_TARGET_DIRECTION_PORTRAIT: + ad->indicator_edje = + cam_app_load_edj(ad->win_main, + CAM_INDICATOR_EDJ_NAME, + "indicator_portrait"); + break; + case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE: + ad->indicator_edje = + cam_app_load_edj(ad->win_main, + 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 !!!"); + load_setting_values(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(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); +} + + diff --git a/src/edc-callback/cam_recording_edc_callback.c b/src/edc-callback/cam_recording_edc_callback.c new file mode 100644 index 0000000..8c77b43 --- /dev/null +++ b/src/edc-callback/cam_recording_edc_callback.c @@ -0,0 +1,449 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 "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); +/* edje_edit_state_visible_set(_EDJ(ad->recording_edje), REC_REC, EDC_DEFAULT_STATE, 0); */ +/* edje_edit_state_visible_set(_EDJ(ad->recording_edje), REC_PAUSE, EDC_DEFAULT_STATE, 0); */ + 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; + cam_retv_if(camapp == NULL, FALSE); + camapp = ad->camapp_handle; + + 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); + 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->recording_mode == CAM_RECORD_MMS) ||(camapp->recording_mode == CAM_RECORD_SELF_MMS)) { + + char str[10] = ""; + char str2[10] = ""; + char *filename = NULL; + int fname_size = 0;/*unused*/ + 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 / (gdouble) 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); + 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; +} + +static void __recording_cb(void *data, Evas_Object *o, const char *emission, + const char *source) +{ + CAM_UI_LOG(); + struct appdata *ad = (struct appdata *)data; + cam_ret_if(emission == NULL); + cam_ret_if(source == NULL); + cam_ret_if(ad == NULL); + + if (emission && source) + CAM_UI_LOG("emission signal: %s, comes from:%s", emission, + source); + if (!strcmp(emission, REC_REC_SIG)) { + /* todo: recording start */ + if (cam_video_record_resume(ad)) { + __recording_set_state(ad, CAM_REC_STATE_RECORDING); + } + } else if (!strcmp(emission, REC_PAUSE_SIG)) { + /* to do: recording pause */ + if (cam_video_record_pause(ad)) { + __recording_set_state(ad, CAM_REC_STATE_PAUSE); + } + } else if (!strcmp(emission, REC_STOP_SIG)) { + /* to do: recording stop */ + if (ad->rec_time_updater) + ecore_timer_del(ad->rec_time_updater); + ad->rec_time_updater = NULL; + if (ad->rec_icon_updater) + ecore_timer_del(ad->rec_icon_updater); + ad->rec_icon_updater = NULL; + recording_set_time(ad, 0, 0, 0); + ad->camapp_handle->rec_stop_type = CAM_REC_STOP_NORMAL; + cam_video_record_stop(ad); + } +} + +#if ENABLE_HAPTIC +void cam_app_haptic_cb(void *data, Evas_Object *o, const char *emission, + const char *source); + +#endif +static void _recording_edje_callback_define(Evas_Object *o, struct appdata *ad) +{ + CAM_UI_LOG(); + edje_object_signal_callback_del(o, "*", REC_SIG_SRC, __recording_cb); + edje_object_signal_callback_add(o, "*", REC_SIG_SRC, __recording_cb, + ad); + +#if ENABLE_HAPTIC + edje_object_signal_callback_del(o, "*", HAPTIC_SIG_SRC, + cam_app_haptic_cb); + edje_object_signal_callback_add(o, "*", HAPTIC_SIG_SRC, + cam_app_haptic_cb, ad); + +#endif +} +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); + + cam_retv_if(ad->recording_edje != NULL, -1); + if (ad->recording_edje) { + evas_object_del(ad->recording_edje); + ad->recording_edje = NULL; + } + + 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->win_main, CAM_RECORDING_EDJ_NAME, + "recording_layout"); + break; + case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE: + ad->recording_edje = cam_app_load_edj(ad->win_main, CAM_RECORDING_INVERSE_EDJ_NAME, + "recording_layout"); + break; + case CAM_TARGET_DIRECTION_PORTRAIT: + ad->recording_edje = cam_app_load_edj(ad->win_main, CAM_RECORDING_VERTICAL_EDJ_NAME, + "recording_layout"); + break; + case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE: + ad->recording_edje = cam_app_load_edj(ad->win_main, 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); + _recording_edje_callback_define(_EDJ(ad->recording_edje), ad); + if ((camapp->recording_mode == CAM_RECORD_MMS) ||(camapp->recording_mode == CAM_RECORD_SELF_MMS)) { + char str[10] = ""; + char str2[10] = ""; + camapp->rec_filesize =0; + snprintf(str, sizeof(str), "%dK", camapp->size_limit); + 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); + + + switch (ad->target_direction) { + case CAM_TARGET_DIRECTION_LANDSCAPE: + ad->recording_edje = cam_app_load_edj(ad->win_main, CAM_RECORDING_EDJ_NAME, + "recording_layout"); + break; + case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE: + ad->recording_edje = cam_app_load_edj(ad->win_main, CAM_RECORDING_INVERSE_EDJ_NAME, + "recording_layout"); + break; + case CAM_TARGET_DIRECTION_PORTRAIT: + ad->recording_edje = cam_app_load_edj(ad->win_main, CAM_RECORDING_VERTICAL_EDJ_NAME, + "recording_layout"); + break; + case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE: + ad->recording_edje = cam_app_load_edj(ad->win_main, 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); + _recording_edje_callback_define(_EDJ(ad->recording_edje), ad); + 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..5f93afe --- /dev/null +++ b/src/edc-callback/cam_toolbar_edc_callback.c @@ -0,0 +1,4439 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +/* +#include "camera_utils.h" +*/ +#include "cam.h" +#include "edc_string.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_image_name.h" +#include "edc_image_name.h" +#include "cam_long_press.h" +#include "cam_zoom_edc_callback.h" +#include "cam_ui_effect_utils.h" +#include "cam_menu_composer.h" +#include "cam_device_capacity.h" +#include "camera_utils.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 Evas_Coord shortcuts_canvas_prev_x; +static Evas_Coord shortcuts_canvas_prev_y; +static Eina_List *shortcuts_ele_list = NULL; + + +#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 309 +#define FLASH_POPUP_REC_HEIGHT 309 +#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 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 METERING_POPUP 743 +#define WB_POPUP 900 +#define MORE_POPUP 1067 + +#define SETTING_HOR_CTX_POPUP_X 554 +#define SETTING_VER_CTX_POPUP_X 202 +#define SCENE_MODE_POPUP_WIDTH 400 + +#define SCROLLER_POPUP_WIDTH 400 +#define SCROLLER_POPUP_HEIGHT 382 + + +#ifdef NEW_GUI +#define SETTING_POPUP_WIDTH 550 +#define SETTING_POPUP_HEIGHT 661 +#endif + +typedef enum { + BUTTON_STATE_NORMAL, + BUTTON_STATE_PRESS, + BUTTON_STATE_DIM, +} ButtonState; + +typedef enum { + TOOLBAR_ITEM_STATE_NORMAL, + TOOLBAR_ITEM_STATE_EDIT, + TOOLBAR_ITEM_STATE_DIM, + TOOLBAR_ITEM_STATE_INVISIBLE, +} ToolbarItemState; + +typedef struct __Setting_List_Callback { + CAM_MENU_ITEM index; + Evas_Smart_Cb func; +} Setting_List_Callback; + +static void __get_toolbar_shortcuts_file_func(void *data, int type, ButtonState state, + char **file_path, char **name_line_1, char **name_line_2, Evas_Object_Event_Cb *func); +static gboolean __is_shortcuts_on_menu_bar(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); + +Eina_Bool toolbar_create_setting_popup_cb(void *data); +int toolbar_create_setting_popup(struct appdata *ad); +void toolbar_show_setting_popup(struct appdata *ad); +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 __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 __setting_edit_shortcut_popup_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_guideline_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); + +/* 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 int __toolbar_mode_item_create(struct appdata *ad); +static void __toolbar_mode_item_destroy(struct appdata *ad); +static void __toolbar_mode_item_update(struct appdata *ad); +static void __toolbar_mode_item_hide(struct appdata *ad); +static int __toolbar_shutter_button_create(struct appdata *ad); +static void __toolbar_shutter_button_destroy(struct appdata *ad); +static void __toolbar_shutter_button_update(struct appdata *ad); +static void __toolbar_shutter_button_hide(struct appdata *ad); +static int __toolbar_quickview_item_create(struct appdata *ad); +static void __toolbar_quickview_item_destroy(struct appdata *ad); +static void __toolbar_quickview_item_update(struct appdata *ad); +static void __toolbar_quickview_item_hide(struct appdata *ad); +static int __toolbar_backbutton_create(struct appdata *ad); +static void __toolbar_backbutton_destroy(struct appdata *ad); +static int __toolbar_recording_capture_button_create(void *data); +static void __toolbar_recording_capture_button_destroy(void *data); + +static const char* __get_icon_image_name(CAM_MENU_ITEM item); +static const char* __get_text_name(CAM_MENU_ITEM item); + + +static void __toolbar_mode_item_cb(void *data, Evas_Object *obj, void *event_info) +{ + DEBUG_TRACE("START"); + + struct appdata *ad = (struct appdata *)cam_appdata_get(); + cam_retm_if(ad == NULL, " appdata is NULL"); + if (ad->is_rotating) return;/*note: now is rotating*/ + CamAppData *camapp = ad->camapp_handle; + cam_ret_if(camapp == NULL); + + unload_zoom_edje(ad); + + if(ad->battery_status == LOW_BATTERY_CRITICAL_STATUS) + return; + + if (!ad->enable_mode_change) { + DEBUG_TRACE("Can not change mode"); + return; + } + ad->enable_mode_change = FALSE; + static bool is_running = false; + int new_mode = 0; + if (is_running) { + DEBUG_TRACE("toolbar mode item click signal processing.... new singal cancelled."); + return; + } + is_running = true; + REMOVE_TIMER(ad->toolbar_toggle_timer); + if (ad->toolbar.mode_item.is_dimmed) { + ad->enable_mode_change = TRUE; + is_running = false; + return; + } + ad->show_menu = FALSE; + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; + cam_toolbar_and_setting_popup_del(ad); + toolbar_destroy_setting_popup(ad); + ad->toolbar_show_edit_shortcuts_popup = FALSE; + toolbar_destroy_shortcuts_popup(ad); + + if (data) { + new_mode = (int)data; + if (camapp->camera_mode == new_mode) { + DEBUG_TRACE("Do not need to change mode"); + ad->enable_mode_change = TRUE; + is_running = false; + return; + } + } else { + if (camapp->camera_mode == CAM_CAMERA_MODE) { + new_mode = CAM_CAMCORDER_MODE; + } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + new_mode = CAM_CAMERA_MODE; + } + } + + DEBUG_TRACE("mode change to %d", new_mode); + + GValue value = {0, }; + CAM_GVALUE_SET_INT(value, new_mode); + if (!cam_handle_value_set(ad, PROP_MODE, &value)) { + ad->enable_mode_change = TRUE; + is_running = false; + return; + } + + ad->is_recording = FALSE; + +#ifndef DISABLE_INDICATOR + if (ad->indicator_edje) { + + /* delete indicator */ + evas_object_hide(ad->indicator_edje); + cam_indicator_destory(ad); + } + cam_indicator_create(ad); + +#endif + cam_toolbar_setting_popup_delayed_create(ad); + is_running = false; + + DEBUG_TRACE("END"); +} + +static void __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"); + 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); + + unload_zoom_edje(ad); + + ad->show_menu = FALSE; + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; + ad->show_menu = FALSE; + ad->toolbar_show_setting_popup = FALSE; + cam_toolbar_and_setting_popup_del(ad); + + if (strcmp(emission, "press_shutter_sig") == 0) { + ad->is_showing_snapshot_popup = FALSE; /*initialize flag value*/ + DEBUG_TRACE("initialize : ad->is_showing_snapshot_popup = FALSE"); + ad->shutter_move = FALSE; + } else if ( strcmp(emission, "move_shutter_sig") == 0) { + ad->shutter_move = TRUE; + } else if ( strcmp(emission, "release_shutter_sig") == 0){ + ad->shutter_move = FALSE; + camapp->key_lock = FALSE; + + DEBUG_TRACE("camapp->key_lock is %d\n", camapp->key_lock); + if (!camapp->key_lock) { + camapp->key_lock = TRUE; + + if (!cam_camera_key_press(ad)) + cam_warning(LOG_UI, "cam_camera_key_press failed"); + + camapp->key_lock = FALSE; + } + } +} + +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); + + unload_zoom_edje(ad); + + if (ad->timer_activated) { + cam_app_cancel_timer(ad); + return; + } + cam_app_exit(ad); + + DEBUG_TRACE("END"); +} + +static Ecore_Idler *run_image_view_idler = NULL; +static Eina_Bool __cam_toolbar_run_image_viewer_idler(void *data) +{ + if (run_image_view_idler) { + ecore_idler_del(run_image_view_idler); + run_image_view_idler = NULL; + } + cam_retv_if(data == NULL, ECORE_CALLBACK_CANCEL); + struct appdata *ad = (struct appdata *)data; + cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL"); + if (ad->ug_is_deleting_process == TRUE) + return ECORE_CALLBACK_CANCEL; + + CamAppData *camapp = ad->camapp_handle; + cam_retv_if(camapp == NULL, ECORE_CALLBACK_CANCEL); + if (!cam_app_run_media_browser(ad, camapp->filename)) { + DEBUG_TRACE("cam_app_run_media_browser failed"); + if (toolbar_create_setting_popup(ad)) { + DEBUG_TRACE("created setting popup"); + } else { + DEBUG_TRACE("creating setting popup 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"); + 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; + unload_zoom_edje(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,press") == 0 + || strcmp(emission, "landscape,quickview,press") == 0) { + if (ad->camapp_handle->shooting_mode != CAM_SELF_MODE) { + ad->show_menu = FALSE; + ad->toolbar_show_edit_shortcuts_popup = FALSE; + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; + cam_toolbar_and_setting_popup_del(ad); + } + } else if (strcmp(emission, "portrait,quickview,release") == 0 + || strcmp(emission, "landscape,quickview,release") == 0) { + +#ifdef USE_FILE_REG_THREAD + pthread_mutex_lock(&ad->file_reg_mutex); + cam_debug(LOG_SYS, " lock file_reg_mutex"); + pthread_mutex_unlock(&ad->file_reg_mutex); + +#endif + run_image_view_idler = ecore_idler_add(__cam_toolbar_run_image_viewer_idler, + (void *)ad); + } +} + +static void __toolbar_capture_button_cb(void *data, Evas_Object *o, + const char *emission, const char *source) +{ + DEBUG_TRACE("START"); + cam_ret_if(data == NULL); + struct appdata *ad = (struct appdata *)data; + + if(ad->is_showing_snapshot_popup) { + DEBUG_TRACE("ad->is_showing_snapshot_popup == TRUE, can not capture"); + /*can not capture*/ + return; + } + if (emission && source) { + DEBUG_TRACE("signal: %s, comes from:%s", emission, source); + DEBUG_TRACE("start capture"); + if (!cam_image_capture_start(ad)) { + DEBUG_TRACE("capture failed"); + } + } + DEBUG_TRACE("END"); +} + +#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_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_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_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 __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 *part_name_1 = NULL; + char *part_name_2 = 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, &part_name_1, &part_name_2, func); + elm_icon_file_set(toolbar_icon, icon_name, NULL); + __update_menu_bar_shortcuts_state_by_index(ad, type, item_state); +} + +static void __get_toolbar_shortcuts_file_func(void *data, int type, ButtonState state, + char **file_path, char **name_line_1, char **name_line_2, 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); + + *name_line_1 = NULL; + *name_line_2 = NULL; + *file_path = NULL; + *func = NULL; + + int value_index = 0; + char icon_name[CAM_FILE_PATH_MAX] = { 0 }; + + switch(type) { + case CAM_MENU_EMPTY: + case CAM_MENU_SHORTCUTS: + break; + case CAM_MENU_TIMER: { + value_index = ad->camapp_handle->timer; + switch (value_index) { + case CAM_SETTINGS_TIMER_OFF: + if (state == BUTTON_STATE_PRESS) + *file_path = strdup(TIMER_OFF_RESS_ICON); + else if (state == BUTTON_STATE_DIM) + *file_path = strdup(TIMER_OFF_DIM_ICON); + else + *file_path = strdup(TIMER_OFF_NORMAL_ICON); + break; + case CAM_SETTINGS_TIMER_2SEC: + if (state == BUTTON_STATE_PRESS) + *file_path = strdup(TIMER_2SEC_RESS_ICON); + else + *file_path = strdup(TIMER_2SEC_NORMAL_ICON); + break; + case CAM_SETTINGS_TIMER_5SEC: + if (state == BUTTON_STATE_PRESS) + *file_path = strdup(TIMER_5SEC_RESS_ICON); + else + *file_path = strdup(TIMER_5SEC_NORMAL_ICON); + break; + case CAM_SETTINGS_TIMER_10SEC: + if (state == BUTTON_STATE_PRESS) + *file_path = strdup(TIMER_10SEC_RESS_ICON); + else + *file_path = strdup(TIMER_10SEC_NORMAL_ICON); + break; + default: + DEBUG_TRACE("Invalid timer!"); + *file_path = strdup(TIMER_OFF_NORMAL_ICON); + break; + } + + *name_line_1 = strdup("Timer"); + + if (state != BUTTON_STATE_DIM) + *func = __shortcuts_setting_timer_popup_cb; + + } + break; + case CAM_MENU_EFFECTS: { + value_index = cam_convert_effect_to_menu_item(ad->camapp_handle->effect); + + if (state == BUTTON_STATE_PRESS) + snprintf(icon_name, sizeof(icon_name), EFFECTS_ICON, __get_icon_image_name(value_index), "press"); + else if (state == BUTTON_STATE_DIM) + snprintf(icon_name, sizeof(icon_name), EFFECTS_ICON, __get_icon_image_name(value_index), "dim"); + else + snprintf(icon_name, sizeof(icon_name), EFFECTS_ICON, __get_icon_image_name(value_index), "nor"); + + *file_path = strdup(icon_name); + *name_line_1 = strdup("Effects"); + + if (state != BUTTON_STATE_DIM) + *func = __shortcuts_effects_popup_cb; + } + break; + + case CAM_MENU_GUIDELINES: { + if (ad->camapp_handle->guideline) { + if (state == BUTTON_STATE_PRESS) + *file_path = strdup(GUIDELINE_ON_PRESS_ICON); + else if (state == BUTTON_STATE_DIM) + *file_path = strdup(GUIDELINE_ON_DIM_ICON); + else + *file_path = strdup(GUIDELINE_ON_NORMAL_ICON); + } + else { + if (state == BUTTON_STATE_PRESS) + *file_path = strdup(GUIDELINE_OFF_PRESS_ICON); + else if (state == BUTTON_STATE_DIM) + *file_path = strdup(GUIDELINE_OFF_DIM_ICON); + else + *file_path = strdup(GUIDELINE_OFF_NORMAL_ICON); + } + + *name_line_1 = strdup("Guidelines"); + + if (state != BUTTON_STATE_DIM) + *func = __shortcuts_guideline_popup_cb; + } + break; + case CAM_MENU_RESET: { + if (state == BUTTON_STATE_PRESS) + *file_path = strdup(RESET_SETTING_PRESS_ICON); + else + *file_path = strdup(RESET_SETTING_NORMAL_ICON); + + *name_line_1 = strdup("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); + + __update_menubar_icon_by_index(ad, ad->toolbar_0_type); + __update_menubar_icon_by_index(ad, ad->toolbar_1_type); + __update_menubar_icon_by_index(ad, ad->toolbar_2_type); + __update_menubar_icon_by_index(ad, ad->toolbar_3_type); + __update_menubar_icon_by_index(ad, ad->toolbar_4_type); +} + +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); + +/* setting icon */ + if (ad->toolbar_0_icon) + evas_object_del(ad->toolbar_0_icon); + ad->toolbar_0_icon = elm_icon_add(ad->toolbar_edje); + elm_icon_file_set(ad->toolbar_0_icon, SETTING_NORMAL_ICON, NULL); + edje_object_part_swallow(_EDJ(ad->toolbar_edje), "toolbar_0_icon", ad->toolbar_0_icon); + +/* shortcut icon */ + if (ad->toolbar_1_icon) + evas_object_del(ad->toolbar_1_icon); + ad->toolbar_1_icon = elm_icon_add(ad->toolbar_edje); + edje_object_part_swallow(_EDJ(ad->toolbar_edje), "toolbar_1_icon", ad->toolbar_1_icon); + + if (ad->toolbar_2_icon) + evas_object_del(ad->toolbar_2_icon); + ad->toolbar_2_icon = elm_icon_add(ad->toolbar_edje); + edje_object_part_swallow(_EDJ(ad->toolbar_edje), "toolbar_2_icon", ad->toolbar_2_icon); + + if (ad->toolbar_3_icon) + evas_object_del(ad->toolbar_3_icon); + ad->toolbar_3_icon = elm_icon_add(ad->toolbar_edje); + edje_object_part_swallow(_EDJ(ad->toolbar_edje), "toolbar_3_icon", ad->toolbar_3_icon); + + if (ad->toolbar_4_icon) + evas_object_del(ad->toolbar_4_icon); + ad->toolbar_4_icon = elm_icon_add(ad->toolbar_edje); + edje_object_part_swallow(_EDJ(ad->toolbar_edje), "toolbar_4_icon", ad->toolbar_4_icon); + + return 0; +} + +static void __toolbar_menu_item_update(struct appdata *ad, ToolbarItemState state) +{ + cam_retm_if(ad == NULL, "appdata is null"); + + __update_menu_bar_shortcuts_state_by_index(ad, ad->toolbar_0_type, state); + __update_menu_bar_shortcuts_state_by_index(ad, ad->toolbar_1_type, state); + __update_menu_bar_shortcuts_state_by_index(ad, ad->toolbar_2_type, state); + __update_menu_bar_shortcuts_state_by_index(ad, ad->toolbar_3_type, state); + __update_menu_bar_shortcuts_state_by_index(ad, ad->toolbar_4_type, state); +} + +static int __toolbar_mode_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 *edje = NULL; + + switch (ad->target_direction) { + case CAM_TARGET_DIRECTION_LANDSCAPE: + if (ad->toolbar.mode_item.edje_landscape == NULL) { + ad->toolbar.mode_item.edje_landscape = cam_app_load_edj(ad->win_main, ad->toolbar_edj_file, "toolbar_mode_item"); + cam_retv_if(ad->toolbar.mode_item.edje_landscape == NULL, -1); + } + edje = ad->toolbar.mode_item.edje_landscape; + break; + case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE: + if (ad->toolbar.mode_item.edje_landscape_inverse == NULL) { + ad->toolbar.mode_item.edje_landscape_inverse = cam_app_load_edj(ad->win_main, ad->toolbar_edj_file, "toolbar_mode_item"); + cam_retv_if(ad->toolbar.mode_item.edje_landscape_inverse == NULL, -1); + } + edje = ad->toolbar.mode_item.edje_landscape_inverse; + break; + case CAM_TARGET_DIRECTION_PORTRAIT: + if (ad->toolbar.mode_item.edje_portrait == NULL) { + ad->toolbar.mode_item.edje_portrait = cam_app_load_edj(ad->win_main, ad->toolbar_edj_file, "toolbar_mode_item"); + cam_retv_if(ad->toolbar.mode_item.edje_portrait == NULL, -1); + } + edje = ad->toolbar.mode_item.edje_portrait; + break; + case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE: + if (ad->toolbar.mode_item.edje_portrait_inverse == NULL) { + ad->toolbar.mode_item.edje_portrait_inverse = cam_app_load_edj(ad->win_main, ad->toolbar_edj_file, "toolbar_mode_item"); + cam_retv_if(ad->toolbar.mode_item.edje_portrait_inverse == NULL, -1); + } + edje = ad->toolbar.mode_item.edje_portrait_inverse; + break; + default: + DEBUG_TRACE("note: run into un-reached codes"); + } + cam_retv_if(edje == NULL, -1); + ad->toolbar.mode_item.edje = edje; + ad->toolbar.mode_item.camera_icon = elm_icon_add(edje); + if (camapp->camera_mode == CAM_CAMERA_MODE) { + elm_icon_file_set(ad->toolbar.mode_item.camera_icon, MODE_CAMERA_ON_ICON, NULL); + } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + elm_icon_file_set(ad->toolbar.mode_item.camera_icon, MODE_CAMERA_OFF_ICON, NULL); + } + + + elm_object_part_content_set(edje, "camera_icon", ad->toolbar.mode_item.camera_icon); + + + + ad->toolbar.mode_item.camcorder_icon = elm_icon_add(edje); + if (camapp->camera_mode == CAM_CAMERA_MODE) { + elm_icon_file_set(ad->toolbar.mode_item.camcorder_icon, MODE_CAMCORDER_ON_ICON, NULL); + } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + elm_icon_file_set(ad->toolbar.mode_item.camcorder_icon, MODE_CAMCORDER_OFF_ICON, NULL); + } + + + elm_object_part_content_set(edje, "camcorder_icon", ad->toolbar.mode_item.camcorder_icon); + + evas_object_smart_callback_del(edje, "mouse.flick.up", __toolbar_mode_item_cb); + evas_object_smart_callback_del(edje, "mouse.flick.down", __toolbar_mode_item_cb); + evas_object_smart_callback_del(edje, "mouse.click", __toolbar_mode_item_cb); + evas_object_smart_callback_add(edje, "mouse.flick.up", __toolbar_mode_item_cb, (void *)CAM_CAMERA_MODE); + evas_object_smart_callback_add(edje, "mouse.flick.down", __toolbar_mode_item_cb, (void *)CAM_CAMCORDER_MODE); + evas_object_smart_callback_add(edje, "mouse.click", __toolbar_mode_item_cb, NULL); + + elm_object_part_content_set(ad->toolbar_edje, "mode_item", edje); + define_mouse_callback(edje, edje); + evas_object_show(edje); + return EXIT_SUCCESS; + +} + +static void __toolbar_mode_item_destroy(struct appdata *ad) +{ + cam_ret_if(ad == NULL); + DEL_EVAS_OBJECT(ad->toolbar.mode_item.edje_landscape); + DEL_EVAS_OBJECT(ad->toolbar.mode_item.edje_portrait); + DEL_EVAS_OBJECT(ad->toolbar.mode_item.edje_landscape_inverse); + DEL_EVAS_OBJECT(ad->toolbar.mode_item.edje_portrait_inverse); + ad->toolbar.mode_item.edje = NULL; + +} + +static void __toolbar_mode_item_update(struct appdata *ad) +{ + cam_ret_if(ad == NULL); + ad->toolbar.mode_item.is_dimmed = FALSE; + cam_ret_if(ad->camapp_handle == NULL); + cam_ret_if(ad->toolbar.mode_item.camera_icon == NULL); + cam_ret_if(ad->toolbar.mode_item.camcorder_icon == NULL); + Evas_Object *edje = NULL; + edje = ad->toolbar.mode_item.edje; + + cam_ret_if(edje == NULL); + edje_object_signal_emit(_EDJ(edje), "SET_DEFAULT", "prog"); + if (ad->camapp_handle->camera_mode == CAM_CAMERA_MODE) { + edje_object_signal_emit(_EDJ(edje), "SET_MODE_CAMERA", "prog"); + elm_icon_file_set(ad->toolbar.mode_item.camera_icon, MODE_CAMERA_ON_ICON, NULL); + elm_icon_file_set(ad->toolbar.mode_item.camcorder_icon, MODE_CAMCORDER_OFF_ICON, NULL); + } else { + edje_object_signal_emit(_EDJ(edje), "SET_MODE_CAMCORDER", "prog"); + elm_icon_file_set(ad->toolbar.mode_item.camera_icon, MODE_CAMERA_OFF_ICON, NULL); + elm_icon_file_set(ad->toolbar.mode_item.camcorder_icon, MODE_CAMCORDER_ON_ICON, NULL); + } + +} + + +static void __toolbar_mode_item_hide(struct appdata *ad) +{ + cam_ret_if(ad == NULL); + ad->toolbar.mode_item.is_dimmed = TRUE; + Evas_Object *edje = NULL; + edje = ad->toolbar.mode_item.edje; + + cam_ret_if(edje == NULL); + edje_object_signal_emit(_EDJ(edje), "SET_INVISIBLE", "prog"); +} + +static int __toolbar_shutter_button_create(struct appdata *ad) +{ + DEBUG_TRACE(""); + cam_retv_if(ad == NULL, -1); + Evas_Object *edje = NULL; + + 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_icon_add(edje); + elm_icon_file_set(ad->shutterbtn_camera_icon, CAMERA_SHUTTER_ICON, NULL); + elm_object_part_content_set(edje, "camera_icon", ad->shutterbtn_camera_icon); + + ad->shutterbtn_camcorder_icon = elm_icon_add(edje); + elm_icon_file_set(ad->shutterbtn_camcorder_icon, CAMCORDER_SHUTTER_ICON, NULL); + elm_object_part_content_set(edje, "camcorder_icon", ad->shutterbtn_camcorder_icon); + + edje_object_signal_callback_del(_EDJ(ad->shutterbtn), "*", "toolbar_signal", __toolbar_shutter_button_cb); + edje_object_signal_callback_add(_EDJ(ad->shutterbtn), "*", "toolbar_signal", __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; +} + +static void __toolbar_shutter_button_destroy(struct appdata *ad) +{ + cam_ret_if(ad == NULL); + DEL_EVAS_OBJECT(ad->shutterbtn); + DEL_EVAS_OBJECT(ad->shutterbtn_camera_icon); + DEL_EVAS_OBJECT(ad->shutterbtn_camcorder_icon); +} + +static void __toolbar_shutter_button_update(struct appdata *ad) +{ + cam_ret_if(ad == NULL); + CamAppData *camapp = ad->camapp_handle; + cam_ret_if(camapp == NULL); + + edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,normal", "prog"); + edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,invisible", "prog"); + edje_object_signal_emit(_EDJ(ad->shutterbtn), "camcorder_icon,invisible", "prog"); + + if (camapp->camera_mode == CAM_CAMERA_MODE) { + edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,normal", "prog"); + } else { + edje_object_signal_emit(_EDJ(ad->shutterbtn), "camcorder_icon,normal", "prog"); + } +} + +static void __toolbar_shutter_button_hide(struct appdata *ad) +{ + cam_ret_if(ad == NULL); + cam_ret_if(ad->shutterbtn == NULL); + edje_object_signal_emit(_EDJ(ad->shutterbtn), "capture_button,invisible", "prog"); + edje_object_signal_emit(_EDJ(ad->shutterbtn), "camera_icon,invisible", "prog"); + edje_object_signal_emit(_EDJ(ad->shutterbtn), "camcorder_icon,invisible", "prog"); +} + +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_destroy(struct appdata *ad) +{ + cam_ret_if(ad == NULL); + DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image); + DEL_EVAS_OBJECT(ad->toolbar.quickview_item.edje); +} + +static void __toolbar_quickview_item_update(struct appdata *ad) +{ + cam_ret_if(ad == NULL); + + Evas_Object *edje = NULL; + edje = ad->toolbar.quickview_item.edje; + + cam_ret_if(edje == NULL); + edje_object_signal_emit(_EDJ(edje), "SET_DEFAULT", "prog"); +} + +static void __toolbar_quickview_item_hide(struct appdata *ad) +{ + cam_ret_if(ad == NULL); + + Evas_Object *edje = NULL; + edje = ad->toolbar.quickview_item.edje; + + cam_ret_if(edje == NULL); + edje_object_signal_emit(_EDJ(edje), "SET_INVISIBLE", "prog"); +} + +static int __toolbar_backbutton_create(struct appdata *ad) +{ + DEBUG_TRACE("START"); + cam_retv_if(ad == NULL, -1); + Evas_Object *edje = 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_destroy(struct appdata *ad) +{ + cam_ret_if(ad == NULL); + DEL_EVAS_OBJECT(ad->backbtn); +} + +static int __toolbar_recording_capture_button_create(void *data) +{ + struct appdata *ad = (struct appdata *)data; + cam_retv_if(ad == NULL, -1); + Evas_Object *edje = NULL; + + if (ad->capturebtn_edje) { + evas_object_del(ad->capturebtn_edje); + ad->capturebtn_edje = NULL; + } + if (ad->capturebtn_edje == NULL) { + ad->capturebtn_edje = + cam_app_load_edj(ad->toolbar_edje, ad->toolbar_edj_file, "toolbar_capture_button_item"); + edje_object_signal_callback_del(_EDJ(ad->capturebtn_edje), + "capture_button_click", "capture_button_click", __toolbar_capture_button_cb); + edje_object_signal_callback_add(_EDJ(ad->capturebtn_edje), + "capture_button_click", "capture_button_click", __toolbar_capture_button_cb, ad); + } + edje = ad->capturebtn_edje; + + cam_retv_if(edje == NULL, -1); + elm_object_part_content_set(ad->toolbar_edje, "capture_button_item", edje); + evas_object_show(edje); + + return EXIT_SUCCESS; +} + +static void __toolbar_recording_capture_button_destroy(void *data) +{ + struct appdata *ad = (struct appdata *)data; + cam_ret_if(ad == NULL); + DEL_EVAS_OBJECT(ad->capturebtn_edje); +} + +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); + 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); + + unload_zoom_edje(ad); + + REMOVE_TIMER(ad->toolbar_toggle_timer); + ad->show_menu = FALSE; + /*ad->toolbar_show_edit_shortcuts_popup = FALSE;*/ + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; + ad->toolbar_show_setting_popup = FALSE; + + /** + if (ad->toolbar_show_edit_shortcuts_popup == TRUE) { + toolbar_destroy_shortcuts_popup(ad); + } + */ /*block it: this is another logic for shotcust edit*/ + + if(ad->battery_status == LOW_BATTERY_CRITICAL_STATUS) + return; + + cam_toolbar_and_setting_popup_del(ad); + + 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_icon_file_set(ad->toolbar_0_icon, SETTING_PRESS_ICON, NULL); + } else if (strcmp(emission, "toolbar_0_release_sig") == 0) { + elm_icon_file_set(ad->toolbar_0_icon, SETTING_NORMAL_ICON, NULL); + } else if (strcmp(emission, "toolbar_0_click_sig") == 0) { + ad->show_menu = TRUE; + toolbar_show_setting_popup(ad); + toolbar_shot_guide_popup_destory(ad); + elm_icon_file_set(ad->toolbar_0_icon, SETTING_NORMAL_ICON, NULL); + } else if (strcmp(emission, "toolbar_1_press_sig") == 0) { + __toolbar_menu_type_update(ad->toolbar_1_icon, ad->toolbar_1_type, ad, BUTTON_STATE_PRESS, &func); + } else if (strcmp(emission, "toolbar_1_release_sig") == 0) { + __toolbar_menu_type_update(ad->toolbar_1_icon, ad->toolbar_1_type, ad, BUTTON_STATE_NORMAL, &func); + } else if (strcmp(emission, "toolbar_1_click_sig") == 0) { + if (ad->toolbar_show_edit_shortcuts_popup == TRUE) /*when edit mode, could not using shortcuts*/ + return; + DEBUG_TRACE("ad->toolbar_1_type = %d", ad->toolbar_1_type); + __toolbar_menu_type_update(ad->toolbar_1_icon, ad->toolbar_1_type, ad, BUTTON_STATE_NORMAL, &func); + if (func) { + (*func)((void *)ad, NULL, o, NULL); + } + } else if (strcmp(emission, "toolbar_2_press_sig") == 0) { + __toolbar_menu_type_update(ad->toolbar_2_icon, ad->toolbar_2_type, ad, BUTTON_STATE_PRESS, &func); + } else if (strcmp(emission, "toolbar_2_release_sig") == 0) { + __toolbar_menu_type_update(ad->toolbar_2_icon, ad->toolbar_2_type, ad, BUTTON_STATE_NORMAL, &func); + } else if (strcmp(emission, "toolbar_2_click_sig") == 0) { + if (ad->toolbar_show_edit_shortcuts_popup == TRUE) /*when edit mode, could not using shortcuts*/ + return; + __toolbar_menu_type_update(ad->toolbar_2_icon, ad->toolbar_2_type, ad, BUTTON_STATE_NORMAL, &func); + DEBUG_TRACE("ad->toolbar_2_type = %d", ad->toolbar_2_type); + if (func) { + (*func)((void *)ad, NULL, o, NULL); + } + } else if (strcmp(emission, "toolbar_3_press_sig") == 0) { + __toolbar_menu_type_update(ad->toolbar_3_icon, ad->toolbar_3_type, ad, BUTTON_STATE_PRESS, &func); + } else if (strcmp(emission, "toolbar_3_release_sig") == 0) { + __toolbar_menu_type_update(ad->toolbar_3_icon, ad->toolbar_3_type, ad, BUTTON_STATE_NORMAL, &func); + } else if (strcmp(emission, "toolbar_3_click_sig") == 0) { + DEBUG_TRACE("ad->toolbar_3_type = %d", ad->toolbar_3_type); + if (ad->toolbar_show_edit_shortcuts_popup == TRUE) /*when edit mode, could not using shortcuts*/ + return; + __toolbar_menu_type_update(ad->toolbar_3_icon, ad->toolbar_3_type, ad, BUTTON_STATE_NORMAL, &func); + if (func) { + (*func)((void *)ad, NULL, o, NULL); + } + } else if (strcmp(emission, "toolbar_4_press_sig") == 0) { + __toolbar_menu_type_update(ad->toolbar_4_icon, ad->toolbar_4_type, ad, BUTTON_STATE_PRESS, &func); + } else if (strcmp(emission, "toolbar_4_release_sig") == 0) { + __toolbar_menu_type_update(ad->toolbar_4_icon, ad->toolbar_4_type, ad, BUTTON_STATE_NORMAL, &func); + } else if (strcmp(emission, "toolbar_4_click_sig") == 0) { + DEBUG_TRACE("ad->toolbar_4_type = %d", ad->toolbar_4_type); + if (ad->toolbar_show_edit_shortcuts_popup == TRUE) /*when edit mode, could not using shortcuts*/ + return; + __toolbar_menu_type_update(ad->toolbar_4_icon, ad->toolbar_4_type, ad, BUTTON_STATE_NORMAL, &func); + if (func) { + (*func)((void *)ad, NULL, o, NULL); + } + } else { + if (ad->toolbar_show_edit_shortcuts_popup == TRUE) { + toolbar_destroy_shortcuts_popup(ad); + } + } +} + +static void __cam_toolbar_edje_del_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info) +{ + DEBUG_TRACE(); + struct appdata *ad = (struct appdata *)data; + cam_ret_if(ad == NULL); + DEBUG_TRACE(); + /*NOTE:shortcuts sub-obj*/ + ad->toolbar_0_icon = NULL; + ad->toolbar_1_icon = NULL; + ad->toolbar_2_icon = NULL; + ad->toolbar_3_icon = NULL; + ad->toolbar_4_icon = NULL; + /*NOTE:action sub-obj: mode item*/ + ad->toolbar.mode_item.edje_landscape = NULL; + ad->toolbar.mode_item.edje_portrait = NULL; + ad->toolbar.mode_item.edje_landscape_inverse = NULL; + ad->toolbar.mode_item.edje_portrait_inverse = NULL; + ad->toolbar.mode_item.camera_icon = NULL; + ad->toolbar.mode_item.camcorder_icon = NULL; + /*NOTE: sub-obj:quickview item*/ + ad->toolbar.quickview_item.thumbnail_image = NULL; + ad->toolbar.quickview_item.edje = NULL; + ad->toolbar.quickview_item.edje_landscape = NULL; + ad->toolbar.quickview_item.edje_portrait = NULL; + ad->toolbar.quickview_item.edje_landscape_inverse = NULL; + ad->toolbar.quickview_item.edje_portrait_inverse = NULL; + /*NOTE:sub-obj: shutter button*/ + ad->shutterbtn = NULL; + ad->shutterbtn_camera_icon = NULL; + ad->shutterbtn_camcorder_icon = NULL; + /*NOTE:sub-obj: popup*/ + ad->toolbar_setting_ctxpopup = NULL; + ad->toolbar_setting_popup = NULL; + ad->setting_ctxpopup = NULL; + ad->setting_ctxpopup_area = NULL; + /*NOTE:popu timer*/ + REMOVE_TIMER(ad->setting_toolbar_hide_timer); + REMOVE_TIMER(ad->toolbar.conti_shot_timer); + +} + +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); + +/*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->win_main, 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->win_main, 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->win_main, 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->win_main, 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); + + /*note: before toolbar_edje deleted, the sub-obj of toolbar, will set to null*/ + evas_object_event_callback_del(ad->toolbar_edje, EVAS_CALLBACK_DEL, __cam_toolbar_edje_del_cb); + evas_object_event_callback_add(ad->toolbar_edje, EVAS_CALLBACK_DEL, __cam_toolbar_edje_del_cb, ad); + + __toolbar_menu_item_create(ad); + + edje_object_signal_callback_del(_EDJ(ad->toolbar_edje), "*", "toolbar_signal", __toolbar_edje_signal_cb); + edje_object_signal_callback_add(_EDJ(ad->toolbar_edje), "*", "toolbar_signal", __toolbar_edje_signal_cb, ad); + + __toolbar_mode_item_create(ad); + __toolbar_shutter_button_create(ad); + + if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) { + __toolbar_quickview_item_create(ad); + } else if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) { + __toolbar_backbutton_create(ad); + } + + cam_toolbar_update(ad); + + return EXIT_SUCCESS; +} + +void cam_toolbar_destroy(struct appdata *ad) +{ + + cam_retm_if(ad == NULL, "appdata is NULL"); + + /*NOTE: all sub obj of toolbar will be deleted auto whild toolar is deleted*/ + edje_object_signal_callback_del(_EDJ(ad->toolbar_edje), "*", "toolbar_signal", __toolbar_edje_signal_cb); + DEL_EVAS_OBJECT(ad->toolbar_edje); + + ad->toolbar_edje = NULL; + ad->toolbar_edje_landscape = ad->toolbar_edje_landscape_inverse = NULL; + ad->toolbar_edje_portrait = ad->toolbar_edje_portrait_inverse = NULL; + REMOVE_TIMER(ad->toolbar.conti_shot_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"); + + __toolbar_menu_icon_update(ad); + + if (ad->timer_activated) { + __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE); + __toolbar_mode_item_hide(ad); + __toolbar_shutter_button_hide(ad); + + if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) { + __toolbar_quickview_item_hide(ad); + __toolbar_backbutton_create(ad); + } + } else { + if (camapp->camera_mode == CAM_CAMERA_MODE) { + __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL); + __toolbar_mode_item_update(ad); + __toolbar_shutter_button_update(ad); + + if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) { + __toolbar_quickview_item_update(ad); + __toolbar_backbutton_destroy(ad); + } + } else { + if (ad->is_recording) { + edje_object_signal_emit(_EDJ(ad->toolbar_edje), "toolbar_bg,hide", "program"); + __toolbar_recording_capture_button_create(ad); + __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_INVISIBLE); + __toolbar_mode_item_hide(ad); + __toolbar_shutter_button_hide(ad); + + if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) { + __toolbar_quickview_item_hide(ad); + } else { + __toolbar_backbutton_destroy(ad); + } + } else { + edje_object_signal_emit(_EDJ(ad->toolbar_edje), "toolbar_bg,show", "program"); + __toolbar_recording_capture_button_destroy(ad); + __toolbar_menu_item_update(ad, TOOLBAR_ITEM_STATE_NORMAL); + __toolbar_mode_item_update(ad); + __toolbar_shutter_button_update(ad); + + if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) { + __toolbar_quickview_item_update(ad); + __toolbar_backbutton_destroy(ad); + } else { + __toolbar_backbutton_create(ad); + } + } + } + } + + if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) { + if(ad->exe_args) { + if(!((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "gallery") == 0))) { + __toolbar_mode_item_hide(ad); + } + } + } +} + +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_and_setting_popup_del(ad); + cam_toolbar_destroy(ad); + elm_win_rotation_with_resize_set(ad->win_main, ad->angle); + + 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"); + } +/* + __toolbar_menu_item_update(ad); + __toolbar_mode_item_update(ad); + cam_toolbar_update(ad);*/ + + 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_setting_popup_create(ad); + 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; +} + +#ifdef ENABLE_CAPTURE_ANIMATION +int toolbar_update_quickview_thumbnail_by_screennail(struct appdata *ad) +{ + cam_retv_if(ad == NULL, -1); + DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image); + if (ad->shutter_move_image) { + int img_width, img_height; + evas_object_image_size_get(ad->shutter_move_image, + &img_width, &img_height); + ad->toolbar.quickview_item.thumbnail_image = + evas_object_image_add(ad->evas); + cam_retv_if(ad->toolbar.quickview_item.thumbnail_image == NULL, + -1); + evas_object_image_smooth_scale_set(ad->toolbar.quickview_item. + thumbnail_image, 1); + evas_object_image_filled_set(ad->toolbar.quickview_item. + thumbnail_image, 1); + evas_object_image_alpha_set(ad->toolbar.quickview_item. + thumbnail_image, 0); + evas_object_image_size_set(ad->toolbar.quickview_item. + thumbnail_image, img_width, + img_height); + evas_object_image_data_copy_set(ad->toolbar.quickview_item. + thumbnail_image, + evas_object_image_data_get + (ad->shutter_move_image, 0)); + evas_object_image_data_update_add(ad->toolbar.quickview_item. + thumbnail_image, 0, 0, + img_width, img_height); + + if (ad->toolbar.quickview_item.edje) { + elm_object_part_content_set(ad->toolbar.quickview_item.edje_landscape, + "thumbnail", ad->toolbar.quickview_item.thumbnail_image); + evas_object_show(ad->toolbar.quickview_item.edje); + } + return 0; + } + + return -1; +} + +#endif + +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_icon_add(ad->toolbar.quickview_item.edje); + cam_retv_if(ad->toolbar.quickview_item.thumbnail_image == NULL, FALSE); + elm_icon_file_set(ad->toolbar.quickview_item.thumbnail_image, camapp->thumbnail_name, NULL); + elm_icon_aspect_fixed_set(ad->toolbar.quickview_item.thumbnail_image, EINA_FALSE); + elm_icon_resizable_set(ad->toolbar.quickview_item.thumbnail_image, EINA_TRUE, EINA_TRUE); + 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); + + unsigned int *main_pipe_op_type = NULL; + main_pipe_op_type = (unsigned int *)calloc(1, sizeof(unsigned int)); + if (main_pipe_op_type) + *main_pipe_op_type = CAM_MAIN_PIPE_OP_TYPE_UPDATE_THUMBNAIL; + return ecore_pipe_write(ad->main_pipe, (void *)main_pipe_op_type, sizeof(unsigned int)); +} + +void delete_ctxpopup_cb(struct appdata *ad) +{ + cam_retm_if(ad == NULL, "appdata is NULL"); + if (ad->setting_ctxpopup) { + evas_object_del(ad->setting_ctxpopup); + } + ad->setting_ctxpopup = NULL; + ad->radio = NULL; + ad->guideline_radio = NULL; + ad->timer_radio = NULL; + ad->ctxpopup_area = NULL; +} + +static int setting_ctxpopup_create(struct appdata *ad, gboolean bNoArrow) +{ + cam_retvm_if(ad == NULL, -1, "appdata is NULL"); + delete_ctxpopup_cb(ad); + toolbar_shot_guide_popup_destory(ad); + if (ad->toolbar_edje == NULL) + DEBUG_TRACE("error occur"); + + /*hide focus guide*/ + edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program"); + + 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"); + delete_ctxpopup_cb(ad); + toolbar_shot_guide_popup_destory(ad); + if (ad->toolbar_edje == NULL) + DEBUG_TRACE("error occur"); + + ad->setting_ctxpopup_area = (Evas_Object *) + edje_object_part_object_get(elm_layout_edje_get + (ad->toolbar_edje), "setting_popup"); + ad->toolbar_setting_ctxpopup = elm_ctxpopup_add(ad->setting_ctxpopup_area); + elm_object_scroll_hold_push(ad->toolbar_setting_ctxpopup); + elm_object_style_set(ad->toolbar_setting_ctxpopup, "beat_winset_test/camera"); + /*elm_ctxpopup_hover_parent_set(ad->setting_ctxpopup, ad->ctxpopup_area);*/ + return EXIT_SUCCESS; +} + +static int setting_shotcuts_popup_create(struct appdata *ad) +{ + cam_retvm_if(ad == NULL, -1, "appdata is NULL"); + delete_ctxpopup_cb(ad); + toolbar_shot_guide_popup_destory(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"); + elm_object_scroll_hold_push(ad->edit_shortcuts_popup); + return EXIT_SUCCESS; +} + + +#ifdef GUIDE_LINE_ENALBE +int cam_guideline_rotate(struct appdata *ad) +{ + cam_retv_if(ad == NULL, -1); + cam_retv_if(ad->camapp_handle == NULL, -1); + + if (ad->guideline_edje == NULL) { + ad->guideline_edje = + cam_app_load_edj(ad->win_main, CAM_MAIN_LAYOUT_EDJ_NAME, + "guideline"); + } + cam_retv_if(ad->guideline_edje == NULL, -1); + 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); + DEBUG_TRACE("p_width == %d" ,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 (wide_mode) { + DEBUG_TRACE("hor,wide_mode"); + 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"); + + } else { + DEBUG_TRACE("hor,normal mode"); + 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"); + } + + /*evas_object_lower(ad->guideline_edje);*/ + evas_object_show(ad->guideline_edje); + + DEBUG_TRACE("over"); + return 0; +} + +#endif + +static void _timer_popup_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + cam_ret_if(obj == NULL); + int index = (int)data; + UI_TEST_LOG("index : [%d]", index); + cam_ret_if(index < 0 || index >= CAM_SETTINGS_TIMER_NUMS); + struct appdata *ad = (struct appdata *)cam_appdata_get(); + cam_retm_if(ad == NULL, "appdata is NULL"); + ad->timer_radio_index = index; + elm_radio_value_set(ad->timer_radio, index); + + /* 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); + } + DEL_EVAS_OBJECT(ad->setting_ctxpopup); + ad->ctxpopup_area = NULL; +} + +static void __reset_settings_launch(void) +{ + /*Evas_Object *notify = 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"); + + 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); + + /* Effect */ + g_value_set_int(&i_value, EFFECT_DEFAULT); + cam_handle_value_set(ad, PROP_EFFECT, &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); +#ifdef GUIDE_LINE_ENALBE + settings_guideline_refresh(ad); +#endif + + /* 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); + + /* Resolution */ + if (camapp->camera_mode == CAM_CAMERA_MODE) { + g_value_set_int(&i_value, IMAGE_RESOLUTION_DEFAULT); + } else { + g_value_set_int(&i_value, REC_RESOLUTION_DEFAULT); + } + + cam_handle_value_set(ad, PROP_RESOLUTION, &i_value); +#ifndef DISABLE_INDICATOR + if (ad->indicator_edje) { + /* delete indicator */ + evas_object_hide(ad->indicator_edje); + cam_indicator_destory(ad); + } + cam_indicator_create(ad); +#endif + + /* 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); + +#if 0 + /*shot mode*/ + if (camapp->camera_mode == CAM_CAMERA_MODE) { + g_value_set_int(&i_value, SHOTMODE_DEFAULT); + cam_handle_value_set(ad, PROP_SHOT_MODE, &i_value); + } else { + g_value_set_int(&i_value, RECMODE_DEFAULT); + cam_handle_value_set(ad, PROP_REC_MODE, &i_value); + } +#endif + +} + +static gboolean __do_start_restore_items(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_info(LOG_UI, "camera_mode = %d ", camapp->camera_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); */ +#ifdef USE_CAM_STORAGE_SETTING + camapp->storage = cam_config_get_int( PROP_STORAGE_NAME, CAM_STORAGE_INTERNAL); +#else + vconf_get_int(VCONFKEY_SETAPPL_DEFAULT_MEM_CAMERA_INT, &(camapp->storage)); +#endif + + camapp->af_mode = AF_DEFAULT; + + if (camapp->camera_mode == CAM_CAMERA_MODE) { + if (camapp->shooting_mode == CAM_SINGLE_MODE) { + camapp->flash = cam_config_get_int(PROP_FLASH_NAME, FLASH_DEFAULT); + } + } else { + camapp->flash = cam_config_get_int(PROP_FLASH_NAME, REC_FLASH_DEFAULT); + } +#ifdef GUIDE_LINE_ENALBE + camapp->guideline = cam_config_get_boolean(PROP_GUIDELINE_NAME, GUIDE_LINE_DEFAULT); + DEBUG_TRACE("camapp->guideline = %d" ,camapp->guideline); +#endif + /* camapp->effect =cam_config_get_int(PROP_EFFECT_NAME, EFFECT_DEFAULT); */ + camapp->effect = EFFECT_DEFAULT; + + if (camapp->camera_mode == CAM_CAMERA_MODE) { + int width = 0; + int height = 0; + cam_mm_get_image_size(&width, &height); + camapp->resolution = CAM_RESOLUTION(width, height); + } else { + camapp->resolution = + cam_config_get_int(PROP_RESOLUTION_NAME, + REC_RESOLUTION_DEFAULT); + } + + camapp->image_quality = + cam_config_get_int(PROP_IMAGE_QUALITY_NAME, QUALITY_DEFAULT); + camapp->video_quality = + cam_config_get_int(PROP_VIDEO_QUALITY_NAME, QUALITY_DEFAULT); + /* camapp->audio_recording = cam_config_get_int(PROP_AUDIO_REC_NAME, AUDIOREC_DEFAULT); */ + camapp->audio_recording = AUDIOREC_DEFAULT; + camapp->review = cam_config_get_boolean(PROP_REVIEW_NAME, FALSE); + /*just reget batter_level state*/ + 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 = + cam_config_get_int(PROP_SHUTTER_SOUND_NAME, SHUTTER_SOUND_DEFAULT); +#endif + ad->camapp_handle->shutter_sound = SHUTTER_SOUND_DEFAULT; /* on */ + + /*below item had been saved in ini file */ + camapp->zoom_mode = 1; + 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->enable_touch_af = TRUE; + + return TRUE; +} + +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"); + + evas_object_del(ad->restore_default_popup); + ad->restore_default_popup = NULL; + hide_toolbar_edje(ad); + cam_app_preview_stop(); + __reset_settings_launch(); + if (!__do_start_restore_items(ad, ad->camapp_handle->camera_mode)) { + cam_critical(LOG_CAM, "cam_handle_init faild"); + cam_app_notice_popup(data, "cam_handle_init faild ", + cam_app_timeout_notice_response_cb); + show_toolbar_edje(ad); + cam_app_preview_start(ad); + return; + } + show_toolbar_edje(ad); + cam_app_preview_start(ad); + +} + +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"); + if (ad->restore_default_popup) + evas_object_del(ad->restore_default_popup); + ad->restore_default_popup = NULL; + +} + +static void __effects_selected_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + struct appdata *ad = (struct appdata *)cam_appdata_get(); + cam_retm_if(ad == NULL, "appdata is NULL"); + UI_TEST_LOG(" "); + if (obj) { + int index = cam_get_menu_item_to_index(CAM_MENU_EFFECTS, (int)data); + + UI_TEST_LOG("selected shot mode index : [%d]", index); + ad->effect_radio_index = index; + elm_radio_value_set(ad->radio, index); + GValue value = { + 0, + }; + int effect = CAM_SETTINGS_EFFECTS_NOR; + 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); + } + } else { + return; + } + if (ad->setting_select_item) + elm_genlist_item_update(ad->setting_select_item); + __update_menubar_icon_by_index(ad, CAM_MENU_EFFECTS); + + DEL_EVAS_OBJECT(ad->setting_ctxpopup); + ad->ctxpopup_area = NULL; +} + +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); + + Evas_Object *icon = NULL; + switch(menubar_no) { + case CAM_MENU_BAR_LEFT_0: + icon = ad->toolbar_0_icon; + break; + case CAM_MENU_BAR_LEFT_1: + icon = ad->toolbar_1_icon; + break; + case CAM_MENU_BAR_LEFT_2: + icon = ad->toolbar_2_icon; + break; + case CAM_MENU_BAR_LEFT_3: + icon = ad->toolbar_3_icon; + break; + case CAM_MENU_BAR_LEFT_4: + icon = ad->toolbar_4_icon; + break; + default: + DEBUG_TRACE("%d is not in menubar", index); + } + if (icon) + __toolbar_menu_type_update(icon, index, ad, BUTTON_STATE_NORMAL, &func); +} + +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()); +} + +static Evas_Object *_create_camera_popup_item(Evas_Object *parent, + char *icon_path, char *label, gboolean from_setting) +{ + Evas_Object *layout = NULL; + Evas_Object *icon = NULL; + + /* layout */ + layout = elm_layout_add(parent); + if (from_setting) + elm_layout_file_set(layout, + CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME, + "camera/item/setting"); + else + elm_layout_file_set(layout, + CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME, + "camera/item"); + + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_show(layout); + if (icon_path == NULL) { + /* text */ + edje_object_part_text_set(elm_layout_edje_get(layout), + "elm.title_text", label); + return layout; + } + /* icon */ + icon = elm_icon_add(layout); + elm_icon_file_set(icon, icon_path, NULL); + evas_object_show(icon); + elm_object_part_content_set(layout, "elm.swallow.icon", icon); + + /* text */ + edje_object_part_text_set(elm_layout_edje_get(layout), + "elm.text", label); + return layout; +} + +/*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 - 80) * 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"); + + } +} + +/*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, h_x, h_y; + ver_x = ver_y = h_x = h_y = 0; + switch (menu_bar_no) { + case CAM_MENU_BAR_LEFT_0: + ver_x = 77; + ver_y = 109; + h_x = 109; + h_y = 643; + break; + case CAM_MENU_BAR_LEFT_1: + ver_x = 217; + ver_y = 109; + h_x = 109; + h_y = 503; + break; + case CAM_MENU_BAR_LEFT_2: + ver_x = 347; + ver_y = 109; + h_x = 109; + h_y = 373; + break; + case CAM_MENU_BAR_LEFT_3: + ver_x = 507; + ver_y = 109; + h_x = 109; + h_y = 213; + break; + case CAM_MENU_BAR_LEFT_4: + ver_x = 647; + ver_y = 109; + h_x = 109; + h_y = 73; + break; + default: + DEBUG_TRACE("input para,error!"); + } + + switch (target_direction) { + case CAM_TARGET_DIRECTION_LANDSCAPE: + *x = h_x; + *y = h_y; + break; + case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE: + *x = 1280 - h_x; + *y = 720 - h_y; + break; + case CAM_TARGET_DIRECTION_PORTRAIT: + *x = ver_x; + *y = ver_y; + break; + case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE: + *x = 720 - ver_x; + *y = 1280 - ver_y; + break; + default: + DEBUG_TRACE("REACHED UN-ABLE REACHED CODES"); + + } +} + +static int __get_menubar_no_by_index(struct appdata *ad, int index) +{ + + if (index == ad->toolbar_0_type) + return CAM_MENU_BAR_LEFT_0; + if (index == ad->toolbar_1_type) + return CAM_MENU_BAR_LEFT_1; + if (index == ad->toolbar_2_type) + return CAM_MENU_BAR_LEFT_2; + if (index == ad->toolbar_3_type) + return CAM_MENU_BAR_LEFT_3; + if (index == ad->toolbar_4_type) + return CAM_MENU_BAR_LEFT_4; + 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 __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; + } + + toolbar_create_shortcuts_popup(ad); + /*TODO:*/ +} + +static int __toolbar_create_timer_popup(struct appdata *ad, gboolean from_setting) +{ + /*struct appdata *ad = (struct appdata *)cam_appdata_get();*/ + CamAppData *camapp = NULL; + cam_retv_if(ad == NULL,-1); + + if (from_setting) { + if(ad->toolbar_show_setting_popup == FALSE) + return -1; + } + camapp = ad->camapp_handle; + cam_retv_if(camapp == NULL,-1); + Evas_Object *layout; + Evas_Object *box; + Evas_Object *item; + Evas_Object *timer_group = NULL; + ad->displayed_setting_popup = DISPLAY_TIMER_POPUP; + + int menu_bar_no; + int x, y; + if (!from_setting) { + /*check menubar_no*/ + menu_bar_no = __get_menubar_no_by_index(ad, CAM_MENU_TIMER); + __get_option_coord_by_menubar_no(menu_bar_no, ad->target_direction, &x, &y); + } + + /* create ctxpopup */ + 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", + dgettext("sys_string", "IDS_COM_BODY_TIMER")); + evas_object_size_hint_min_set(layout, POPUP_WIDTH * elm_config_scale_get(), + TIMER_POPUP_CAM_HEIGHT * elm_config_scale_get()); + + evas_object_show(layout); + + /* Box */ + box = elm_box_add(layout); + + guint index = -1; + /* timer*/ + + /* Timer ITEM */ + index = CAM_SETTINGS_TIMER_OFF; + item = _create_camera_popup_item(box, TIMER_OFF_NORMAL_ICON, _("IDS_CAM_BODY_OFF"), from_setting); + + /* radio */ + timer_group = ad->timer_radio = elm_radio_add(item); + elm_object_style_set(ad->timer_radio, "beat_winset_test/camera"); + elm_radio_state_value_set(ad->timer_radio, index); + evas_object_data_set(ad->timer_radio, "idx", (void *)(index)); + evas_object_show(ad->timer_radio); + elm_object_part_content_set(item, "elm.swallow.radio", ad->timer_radio); + edje_object_signal_callback_del(elm_layout_edje_get(item), "elm.action.mouse.clicked", "", _timer_popup_cb); + edje_object_signal_callback_add(elm_layout_edje_get(item), "elm.action.mouse.clicked", "", _timer_popup_cb,(void *)index); + elm_box_pack_end(box, item); + index = CAM_SETTINGS_TIMER_2SEC; + item = _create_camera_popup_item(box, TIMER_2SEC_NORMAL_ICON, _("IDS_CAM_BODY_2_SEC"), from_setting); + ad->timer_radio = elm_radio_add(item); + elm_object_style_set(ad->timer_radio, "beat_winset_test/camera"); + elm_radio_state_value_set(ad->timer_radio, index); + evas_object_data_set(ad->timer_radio, "idx", (void *)(index)); + elm_radio_group_add(ad->timer_radio, timer_group); + evas_object_show(ad->timer_radio); + elm_object_part_content_set(item, "elm.swallow.radio", ad->timer_radio); + edje_object_signal_callback_del(elm_layout_edje_get(item), "elm.action.mouse.clicked", "", _timer_popup_cb); + edje_object_signal_callback_add(elm_layout_edje_get(item), "elm.action.mouse.clicked", "", _timer_popup_cb,(void *)index); + elm_box_pack_end(box, item); + index = CAM_SETTINGS_TIMER_5SEC; + item = _create_camera_popup_item(box, TIMER_5SEC_NORMAL_ICON, _("IDS_CAM_BODY_5_SEC"), from_setting); + ad->timer_radio = elm_radio_add(item); + elm_object_style_set(ad->timer_radio, "beat_winset_test/camera"); + elm_radio_state_value_set(ad->timer_radio, index); + evas_object_data_set(ad->timer_radio, "idx", (void *)(index)); + elm_radio_group_add(ad->timer_radio, timer_group); + evas_object_show(ad->timer_radio); + elm_object_part_content_set(item, "elm.swallow.radio", ad->timer_radio); + edje_object_signal_callback_del(elm_layout_edje_get(item), "elm.action.mouse.clicked", "", _timer_popup_cb); + edje_object_signal_callback_add(elm_layout_edje_get(item), "elm.action.mouse.clicked", "", _timer_popup_cb,(void *)index); + elm_box_pack_end(box, item); + index = CAM_SETTINGS_TIMER_10SEC; + item = + _create_camera_popup_item(box, TIMER_10SEC_NORMAL_ICON, _("IDS_CAM_BODY_10_SEC"), from_setting); + ad->timer_radio = elm_radio_add(item); + elm_object_style_set(ad->timer_radio, "beat_winset_test/camera"); + elm_radio_state_value_set(ad->timer_radio, index); + evas_object_data_set(ad->timer_radio, "idx", (void *)(index)); + elm_radio_group_add(ad->timer_radio, timer_group); + evas_object_show(ad->timer_radio); + elm_object_part_content_set(item, "elm.swallow.radio", ad->timer_radio); + edje_object_signal_callback_del(elm_layout_edje_get(item), "elm.action.mouse.clicked", "", _timer_popup_cb); + edje_object_signal_callback_add(elm_layout_edje_get(item), "elm.action.mouse.clicked", "", _timer_popup_cb,(void *)index); + elm_box_pack_end(box, item); + + + elm_radio_value_set(ad->timer_radio, camapp->timer); + /*elm_radio_value_set(ad->radio, ad->resolution_radio_index);*/ + elm_object_part_content_set(layout, "elm.swallow.box", box); + elm_object_content_set(ad->setting_ctxpopup, layout); + if (from_setting) { + int output_x, output_y; + __cam_get_ctxpopup_coord_in_setting_toolbar(ad->target_direction, + setting_gl_y, + &output_x, + &output_y); + __cam_toolbar_move_sub_menu(ad->setting_ctxpopup, ad->target_direction, output_x, output_y); + } else { + __cam_toolbar_move_ctxpopup(ad->setting_ctxpopup, ad->target_direction, x, y); + } + evas_object_show(ad->setting_ctxpopup); + return TRUE; +} + +static void __setting_timer_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"); + + 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; + if (ad->toolbar_show_setting_popup == FALSE) + return; + } else { /*call by click icon*/ + from_setting = FALSE; + ad->displayed_setting_popup = DISPLAY_TIMER_POPUP; + } + + toolbar_shot_guide_popup_destory(ad);/*note: this guide is not guideline*/ + __toolbar_create_timer_popup(ad, from_setting); + if (ad->setting_select_item) + elm_genlist_item_update(ad->setting_select_item); + __update_menubar_icon_by_index(ad, CAM_MENU_TIMER); +} + +static void __setting_effects_popup_cb(void *data, Evas_Object *obj, + void *event_info) +{ + struct appdata *ad = (struct appdata *)data; + cam_ret_if(ad == NULL); + + CamAppData *cam_handle = ad->camapp_handle; + cam_ret_if(cam_handle == NULL); + if (event_info) + elm_genlist_item_selected_set(event_info, EINA_FALSE); + Evas_Object *layout; + Evas_Object *box; + Evas_Object *item; + Evas_Object *group = NULL; + int group_init = 0; + int index = 0; + 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; + if (ad->toolbar_show_setting_popup == FALSE) + return; + } else { /*call by click icon*/ + from_setting = FALSE; + ad->displayed_setting_popup = DISPLAY_EFFECTS_POPUP; + } + + int menu_bar_no; + int x, y; + if (!from_setting) { + /*check menubar_no*/ + menu_bar_no = __get_menubar_no_by_index(ad, CAM_MENU_EFFECTS); + __get_option_coord_by_menubar_no(menu_bar_no, ad->target_direction, &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", _("IDS_CAM_BODY_EFFECTS")); + if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) + evas_object_size_hint_min_set(layout, + POPUP_WIDTH * elm_config_scale_get(), + SHOT_MODE_POPUP_NORMAL_HEIGHT * elm_config_scale_get()); + + else + evas_object_size_hint_min_set(layout, + POPUP_WIDTH * elm_config_scale_get(), + SHOT_MODE_POPUP_EXTERNAL_HEIGHT * elm_config_scale_get()); + + evas_object_show(layout); + + + cam_menu_composer* menu_composer = NULL; + menu_composer = malloc(sizeof(cam_menu_composer)); + cam_compose_menu_effect(menu_composer); + + CAM_MENU_ITEM* menu_item = NULL; + int size = eina_array_count(menu_composer->array); + + + + /* Box */ + box = elm_box_add(layout); + char icon_name[CAM_FILE_PATH_MAX] = { 0 }; + for (index = 0; index < size; index++) { + menu_item = (CAM_MENU_ITEM*)eina_array_data_get(menu_composer->array, index); + snprintf(icon_name, sizeof(icon_name), EFFECTS_ICON, __get_icon_image_name(*menu_item), "nor"); + item = _create_camera_popup_item(box, icon_name, _(__get_text_name(*menu_item)), from_setting); + + /* radio */ + if (index == group_init) + group = ad->radio = elm_radio_add(item); + + else + ad->radio = elm_radio_add(item); + elm_object_style_set(ad->radio, "beat_winset_test/camera"); + elm_radio_state_value_set(ad->radio, index); + evas_object_data_set(ad->radio, "idx", (void *)(index)); + if (index != group_init) + elm_radio_group_add(ad->radio, group); + evas_object_show(ad->radio); + elm_object_part_content_set(item, "elm.swallow.radio", ad->radio); + edje_object_signal_callback_del(elm_layout_edje_get(item), "elm.action.mouse.clicked", "", __effects_selected_cb); + edje_object_signal_callback_add(elm_layout_edje_get(item), "elm.action.mouse.clicked", "", __effects_selected_cb,(void *)*menu_item); + elm_box_pack_end(box, item); + } + elm_radio_value_set(ad->radio, ad->effect_radio_index); + elm_object_part_content_set(layout, "elm.swallow.box", box); + + elm_object_content_set(ad->setting_ctxpopup, layout); + if (from_setting) { + int output_x, output_y; + __cam_get_ctxpopup_coord_in_setting_toolbar(ad->target_direction, + setting_gl_y, + &output_x, + &output_y); + __cam_toolbar_move_sub_menu(ad->setting_ctxpopup, ad->target_direction, output_x, output_y); + } else { + __cam_toolbar_move_ctxpopup(ad->setting_ctxpopup, ad->target_direction, x, y); + } + evas_object_show(ad->setting_ctxpopup); + cam_compose_free(menu_composer); +} + +#ifdef GUIDE_LINE_ENALBE +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); + if (ad->guideline_edje && ad->toolbar_show_setting_popup && ad->toolbar_setting_popup) { + /*setting popup should be on top of guideline*/ + evas_object_raise(ad->toolbar_setting_popup); + } + + __update_menubar_icon_by_index(ad, CAM_MENU_GUIDELINES); + cam_setting_toolbar_execution_time_checker_start(ad); +} +#endif + +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; + } + + /*const char *msg;*/ + if (ad->restore_default_popup) { + evas_object_del(ad->restore_default_popup); + ad->restore_default_popup = NULL; + } + ad->restore_default_popup = elm_popup_add(ad->win_main); + evas_object_size_hint_weight_set(ad->restore_default_popup, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_popup_timeout_set(ad->restore_default_popup, 9.0); + elm_object_text_set(ad->restore_default_popup, _("IDS_CAM_POP_RESET_SETTINGS_Q")); + Evas_Object *btn1 = elm_button_add(ad->restore_default_popup); + elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_OK")); + elm_object_part_content_set(ad->restore_default_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->restore_default_popup); + elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_CANCEL")); + elm_object_part_content_set(ad->restore_default_popup, "button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", __restore_defaults_popup_cb_cancel_cb, (void*)ad); + + evas_object_show(ad->restore_default_popup); + +} + +#ifdef GUIDE_LINE_ENALBE +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 (camapp->camera_mode == CAM_CAMERA_MODE) { + if( ad->camapp_handle->guideline == TRUE && + ad->camapp_handle->shooting_mode != CAM_SELF_MODE) { + DEBUG_TRACE(""); + cam_guideline_rotate(ad); + } else { + DEL_EVAS_OBJECT(ad->guideline_edje); + } + } + if (camapp->camera_mode == CAM_CAMCORDER_MODE) { + if( ad->camapp_handle->guideline == TRUE + &&!(ad->camapp_handle->recording_mode == CAM_RECORD_SELF + ||ad->camapp_handle->recording_mode == CAM_RECORD_SELF_MMS) + ) { + DEBUG_TRACE(""); + cam_guideline_rotate(ad); + } else { + DEL_EVAS_OBJECT(ad->guideline_edje); + } + + } +} +#endif + +gboolean cam_setting_toolbar_execution_time_checker_remove(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; + } + camapp->start_time = 0.0; + DEBUG_TRACE("END"); + return TRUE; +} + +Eina_Bool cam_setting_toolbar_execution_time_checker_cb(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, "cam_handle is 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("hide Setting pupup"); + if (ad->setting_toolbar_hide_timer) { + if (ad->setting_ctxpopup || ad->toolbar_popup) { + ad->show_menu = FALSE; + ad->displayed_setting_popup = DISPLAY_NONE_POPUP; + cam_toolbar_and_setting_popup_del(ad); + if (ad->shot_mode_guide_popup) + toolbar_shot_guide_popup_create + (ad, + ad->camapp_handle->shooting_mode); + } else if (ad->toolbar_show_setting_popup == true) { + toolbar_hide_setting_popup(ad); + } + + if (ad->edit_shortcuts_popup_scroll) { + toolbar_destroy_shortcuts_popup(ad); + } + } + cam_setting_toolbar_execution_time_checker_remove(ad); + } + return TRUE; +} + +gboolean cam_setting_toolbar_execution_time_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 / 2, + cam_setting_toolbar_execution_time_checker_cb, ad); + camapp->start_time = _get_current_time(); + DEBUG_TRACE("END"); + return TRUE; +} + +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"); + #if 0 + if (ad->displayed_setting_popup != DISPLAY_FLASH_POPUP) { + do { + usleep(1000); + } while (ad->toolbar_show_setting_popup == FALSE) ; + } + #endif + + 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_EFFECTS_POPUP: + __setting_effects_popup_cb(ad, NULL, NULL); + break; + case DISPLAY_GUIDELINES_POPUP: + __setting_guideline_popup_cb(ad, NULL, NULL); + break; + case DISPLAY_RESET_POPUP: + __setting_restore_defaults_popup_cb(ad, NULL, NULL); + break; + case DISPLAY_TIMER_POPUP: + __setting_timer_popup_cb(ad,NULL,NULL); + } + + return ECORE_CALLBACK_CANCEL; + +} + +Eina_Bool cam_show_setting_menu(void *data) +{ + struct appdata *ad = (struct appdata *)data; + + cam_retvm_if(ad == NULL, FALSE, "appdata is NULL"); + + if (ad->show_menu == TRUE + || ad->toolbar_show_setting_popup == TRUE) { + ad->toolbar_show_setting_popup = TRUE; + if (ad->camapp_handle->shooting_mode != CAM_SELF_MODE) + toolbar_show_setting_popup(ad); + } else if (ad->toolbar_show_edit_shortcuts_popup == 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; +} + +gboolean cam_setting_toolbar_execution_time_checker_update(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"); + gdouble current_time = 0.0; + if (ad->setting_toolbar_hide_timer) { + current_time = _get_current_time(); + ecore_timer_delay(ad->setting_toolbar_hide_timer, + (current_time - camapp->start_time)); + camapp->start_time = current_time; + } + DEBUG_TRACE("END"); + return TRUE; +} + +void toolbar_show_setting_popup(struct appdata *ad) +{ + DEBUG_TRACE(); + cam_retm_if(ad == NULL, "appdata is null"); + cam_retm_if(ad->toolbar_edje == NULL, "ad->toolbar_edje is null"); + ad->toolbar_show_setting_popup = TRUE; + edje_object_signal_emit(_EDJ(ad->toolbar_edje), + "toolbar_0_button,invisible", "prog"); + toolbar_create_setting_popup(ad); + cam_setting_toolbar_execution_time_checker_start(ad); +} + +void toolbar_hide_setting_popup(struct appdata *ad) +{ + cam_retm_if(ad == NULL, "appdata is null"); + cam_retm_if(ad->toolbar_edje == NULL, "ad->toolbar_edje is null"); + ad->toolbar_show_setting_popup = FALSE; + cam_retm_if(ad->toolbar_setting_popup == NULL, + "ad->toolbar_setting_popup is null"); + /*get selected item of toolbar,and unselected it*/ + Elm_Object_Item *selected_item = + elm_toolbar_selected_item_get(ad->toolbar_setting_popup); + if (selected_item) + elm_toolbar_item_selected_set(selected_item, EINA_FALSE); + + if (!(ad->is_recording + || ad->camapp_handle->shooting_mode == CAM_SELF_MODE + || ad->camapp_handle->recording_mode == CAM_RECORD_SELF_MMS + || ad->camapp_handle->recording_mode == CAM_RECORD_SELF)) { + edje_object_signal_emit(_EDJ(ad->toolbar_edje), + "toolbar_0_button,normal", "prog"); + edje_object_signal_emit(_EDJ(ad->toolbar_edje), + "toolbar_0_icon,normal", "prog"); + } + toolbar_destroy_setting_popup(ad); + cam_setting_toolbar_execution_time_checker_remove(ad); + +} + +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"); + + cam_app_focus_guide_update((void *)ad); + + /*ad->toolbar_show_edit_shortcuts_popup = FALSE;*/ + int i = 0; + for (i = CAM_MENU_EMPTY + 1; i < CAM_MENU_MAX_NUMS; i++) { + __update_menubar_icon_by_index(ad, i); + } + +} +void toolbar_destroy_setting_popup(struct appdata *ad) +{ + cam_retm_if(ad == NULL, "appdata is null"); + cam_retm_if(ad->toolbar_setting_popup == NULL, + "ad->toolbar_setting_popup is null"); + DEBUG_TRACE("toolbar_destroy_setting_popup"); + /*ad->toolbar_show_setting_popup = FALSE;*/ + + evas_object_del(ad->toolbar_setting_popup); + ad->toolbar_setting_popup = NULL; + + ad->timer_item= NULL; + ad->setting_select_item = NULL; /*select item*/ + /*delete setting contex popup*/ + delete_ctxpopup_cb(ad); + /*elm_all_flush();*/ + cam_elm_cache_flush(); + if (ad->toolbar_edje) + evas_object_raise(ad->toolbar_edje); + + cam_app_focus_guide_update(ad); +} + +int cam_toolbar_setting_popup_create(struct appdata *ad) +{ + cam_retv_if(ad == NULL, -1); + toolbar_create_setting_popup(ad); + return 0; +} + +int cam_toolbar_setting_popup_delayed_create(struct appdata *ad) +{ + DEBUG_TRACE("###################### cam_toolbar_setting_popup_delayed_create\n"); + cam_retv_if(ad == NULL, -1); + +#ifndef CAMERA_MACHINE_I686 + if (ad->toolbar_setting_popup_idler == NULL) { + ad->toolbar_setting_popup_idler = + ecore_idler_add(toolbar_create_setting_popup_cb, ad); + } + +#endif + return 0; +} + +Eina_Bool toolbar_create_setting_popup_cb(void *data) +{ + + struct appdata *ad = (struct appdata *)data; + cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL); + REMOVE_IDLER(ad->toolbar_setting_popup_idler); + if (( ad->camapp_handle->shooting_mode == CAM_SELF_MODE) + ||( ad->camapp_handle->recording_mode == CAM_RECORD_SELF) + ||( ad->camapp_handle->recording_mode == CAM_RECORD_SELF_MMS)) + return ECORE_CALLBACK_CANCEL; + DEBUG_TRACE("######################## toolbar_create_setting_popup_cb\n"); + toolbar_create_setting_popup(ad); + REMOVE_IDLER(ad->toolbar_setting_popup_idler); + return ECORE_CALLBACK_CANCEL; +} + + +static Evas_Object *_setting_gl_icon_get(void *data, Evas_Object *obj, const char *part) +{ + struct appdata *ad = (struct appdata *)cam_appdata_get(); + if (!ad) + return NULL; + CamAppData *camapp = ad->camapp_handle; + cam_retv_if(camapp == NULL, NULL); + Evas_Object *icon = NULL; + DEBUG_TRACE(); + int index = (int)data; + DEBUG_TRACE("index = %d" , index); + switch(index) { + case CAM_MENU_SHORTCUTS: + icon = NULL; + break; + case CAM_MENU_TIMER: + { + int value_index = 0; + icon = elm_icon_add(obj); + /* set timer value */ + value_index = ad->camapp_handle->timer; + switch (value_index) { + case CAM_SETTINGS_TIMER_2SEC: + elm_icon_file_set(icon, TIMER_2SEC_NORMAL_ICON, NULL); + break; + case CAM_SETTINGS_TIMER_5SEC: + elm_icon_file_set(icon, TIMER_5SEC_NORMAL_ICON, NULL); + break; + case CAM_SETTINGS_TIMER_10SEC: + elm_icon_file_set(icon, TIMER_10SEC_NORMAL_ICON, NULL); + break; + case CAM_SETTINGS_TIMER_OFF: + default: + elm_icon_file_set(icon, TIMER_OFF_NORMAL_ICON, NULL); + } + } + break; + case CAM_MENU_EFFECTS: + { + int value_index = 0; + icon = elm_icon_add(obj); + value_index = cam_get_value_to_index(CAM_MENU_EFFECTS, ad->camapp_handle->effect); + ad->effect_radio_index = value_index; + char icon_name[CAM_FILE_PATH_MAX] = { 0 }; + snprintf(icon_name, sizeof(icon_name), EFFECTS_ICON, __get_icon_image_name(cam_convert_effect_to_menu_item(ad->camapp_handle->effect)), "nor"); + elm_icon_file_set(icon, icon_name, NULL); + } + 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_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(_("IDS_CAM_OPT_EDIT_SHORTCUTS")); + break; + case CAM_MENU_TIMER: + return strdup(_("IDS_CAM_BODY_TIMER")); + break; + case CAM_MENU_EFFECTS: + return strdup(_("IDS_CAM_BODY_EFFECTS")); + break; + case CAM_MENU_GUIDELINES: + return strdup(_("IDS_CAM_BODY_GUIDELINE")); + break; + case CAM_MENU_RESET: + return strdup(_("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) { + /*delete_ctxpopup_cb(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); + + cam_setting_toolbar_execution_time_checker_start(ad); +} + +/*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) { + /*delete_ctxpopup_cb(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); + + cam_setting_toolbar_execution_time_checker_start(ad); +} + +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; + 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; + + cam_long_press_cancel(LONG_PRESS_ID_EDIT); + +} + +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; + } +} + +bool 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); + /*do:ele_layout*/ + + switch (cur_ele->menu_bar_no) { + case 0: { + ad->toolbar_0_type = cur_ele->setting_type; + update_menubar_shortcuts_mouse_event(ad, 0, FALSE); + + } + break; + case 1: { + ad->toolbar_1_type = cur_ele->setting_type; + update_menubar_shortcuts_mouse_event(ad, 1, FALSE); + } + break; + case 2: { + ad->toolbar_2_type = cur_ele->setting_type; + update_menubar_shortcuts_mouse_event(ad, 2, FALSE); + } + break; + case 3: { + ad->toolbar_3_type = cur_ele->setting_type; + update_menubar_shortcuts_mouse_event(ad, 3, FALSE); + } + break; + case 4: { + ad->toolbar_4_type = cur_ele->setting_type; + update_menubar_shortcuts_mouse_event(ad, 4, FALSE); + } + break; + default: + DEBUG_TRACE("wow, I think there must be some issue when set menu_bar_no,check!"); + } + + DEBUG_TRACE("cur_ele->setting_type = %d", (int)cur_ele->setting_type); + DEBUG_TRACE("ad->toolbar_4_type = %d", (int)ad->toolbar_4_type); + 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); + +} + +gboolean check_with_menubar_empty_shortcuts(struct appdata *ad, ShortCutData *cur_ele, int *menubar_no) +{ + if (!ad || !cur_ele || !menubar_no) + return FALSE; + Evas_Coord cur_x=0, cur_y=0, cur_w=0, cur_h=0; + evas_object_geometry_get(cur_ele->icon, &cur_x, &cur_y, &cur_w, &cur_h); + + if (ad->toolbar_1_type < 0) { + /*check space menu*/ + Evas_Coord temp_x = 0, temp_y = 0, temp_w = 0, temp_h = 0; + evas_object_geometry_get(ad->toolbar_1_icon, &temp_x, &temp_y, &temp_w, &temp_h); + if (shortcuts_rect_contain_check(temp_x, + temp_y, + temp_w, + temp_h, + cur_x, + cur_y, + cur_w, + cur_h, + cur_w/4, + cur_w/4)) { + cur_ele->is_on_menu_bar = TRUE; + cur_ele->menu_bar_no = CAM_MENU_BAR_LEFT_1; + cur_ele->part_index = -1; + ad->toolbar_1_type = cur_ele->setting_type; + cam_toolbar_menu_config_update((void *)ad); + + update_menubar_shortcuts_mouse_event(ad, CAM_MENU_BAR_LEFT_1, FALSE); + + evas_object_hide(cur_ele->icon); + cam_long_press_cancel(LONG_PRESS_ID_EDIT); + *menubar_no = CAM_MENU_BAR_LEFT_1; + return TRUE; + + } + } + if (ad->toolbar_2_type < 0) { + /*check space menu*/ + Evas_Coord temp_x = 0, temp_y = 0, temp_w = 0, temp_h = 0; + evas_object_geometry_get(ad->toolbar_2_icon, &temp_x, &temp_y, &temp_w, &temp_h); + DEBUG_TRACE("2, %d,%d,%d,%d", temp_x, temp_y, temp_w, temp_h); + if (shortcuts_rect_contain_check(temp_x, + temp_y, + temp_w, + temp_h, + cur_x, + cur_y, + cur_w, + cur_h, + cur_w/4, + cur_w/4) + ) { + /*update cur_ele ctx and sort eina list*/ + /*int temp_part_index;*/ + cur_ele->is_on_menu_bar = TRUE; + cur_ele->menu_bar_no = CAM_MENU_BAR_LEFT_2; + cur_ele->part_index = -1; + ad->toolbar_2_type = cur_ele->setting_type; + cam_toolbar_menu_config_update((void *)ad); + + update_menubar_shortcuts_mouse_event(ad, CAM_MENU_BAR_LEFT_2, FALSE); + + evas_object_hide(cur_ele->icon); + cam_long_press_cancel(LONG_PRESS_ID_EDIT); + *menubar_no = CAM_MENU_BAR_LEFT_2; + return TRUE; + + } + } + + if (ad->toolbar_3_type < 0) { + /*check space menu*/ + Evas_Coord temp_x = 0, temp_y = 0, temp_w = 0, temp_h = 0; + evas_object_geometry_get(ad->toolbar_3_icon, &temp_x, &temp_y, &temp_w, &temp_h); + DEBUG_TRACE("3, %d,%d,%d,%d", temp_x, temp_y, temp_w, temp_h); + if (shortcuts_rect_contain_check(temp_x, + temp_y, + temp_w, + temp_h, + cur_x, + cur_y, + cur_w, + cur_h, + cur_w/4, + cur_w/4) + ) { + cur_ele->is_on_menu_bar = TRUE; + cur_ele->menu_bar_no = CAM_MENU_BAR_LEFT_3; + cur_ele->part_index = -1; + ad->toolbar_3_type = cur_ele->setting_type; + cam_toolbar_menu_config_update((void *)ad); + + update_menubar_shortcuts_mouse_event(ad, CAM_MENU_BAR_LEFT_3, FALSE); + + evas_object_hide(cur_ele->icon); + cam_long_press_cancel(LONG_PRESS_ID_EDIT); + *menubar_no = CAM_MENU_BAR_LEFT_3; + return TRUE; + + } + } + + + if (ad->toolbar_4_type < 0) { + /*check space menu*/ + Evas_Coord temp_x = 0, temp_y = 0, temp_w = 0, temp_h = 0; + evas_object_geometry_get(ad->toolbar_4_icon, &temp_x, &temp_y, &temp_w, &temp_h); + DEBUG_TRACE("4, %d,%d,%d,%d", temp_x, temp_y, temp_w, temp_h); + if (shortcuts_rect_contain_check(temp_x, + temp_y, + temp_w, + temp_h, + cur_x, + cur_y, + cur_w, + cur_h, + cur_w/4, + cur_w/4) + ) { + cur_ele->is_on_menu_bar = TRUE; + cur_ele->menu_bar_no = CAM_MENU_BAR_LEFT_4; + cur_ele->part_index = -1; + ad->toolbar_4_type = cur_ele->setting_type; + cam_toolbar_menu_config_update((void *)ad); + + update_menubar_shortcuts_mouse_event(ad, CAM_MENU_BAR_LEFT_4, FALSE); + + evas_object_hide(cur_ele->icon); + cam_long_press_cancel(LONG_PRESS_ID_EDIT); + *menubar_no = CAM_MENU_BAR_LEFT_4; + 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; + + if (obj == ad->toolbar_0_icon) { + *menubar_no = 0; + return TRUE; + } + if (obj == ad->toolbar_1_icon) { + *menubar_no = 1; + return TRUE; + } + if (obj == ad->toolbar_2_icon) { + *menubar_no = 2; + return TRUE; + } + if (obj == ad->toolbar_3_icon) { + *menubar_no = 3; + return TRUE; + } + if (obj == ad->toolbar_4_icon) { + *menubar_no = 4; + return TRUE; + } + + return FALSE; +} + +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; + DEBUG_TRACE(); + Evas_Event_Mouse_Move *mu = (Evas_Event_Mouse_Move *)event_info; + Evas_Coord cur_x=0, cur_y=0, cur_w=0, cur_h=0; + 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; + Evas_Coord x=0, y=0; + Evas_Coord dx, dy; + + 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; + } + + 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; + /*move*/ + /*begin:find obj shortcuts ele:*/ + Eina_List *l; + ShortCutData *shortcuts_ele; + ShortCutData *cur_ele; + ShortCutData *swap_ele = NULL; + char buf[SHORTCUTS_PART_ARRAY_MAX_LEN] = { 0 }; + + cur_ele = ad->shortcut_data; + int menubar_no; + + /*check if obj is from menubar*/ + if (cur_ele->is_on_menu_bar) { + /**/ + EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) { + if (shortcuts_ele == NULL) + continue; + Evas_Coord temp_x=0, temp_y=0, temp_w=0, temp_h=0; + evas_object_geometry_get(shortcuts_ele->icon, &temp_x, &temp_y, &temp_w, &temp_h); + if (shortcuts_ele->icon == cur_ele->icon) { + DEBUG_TRACE("find self"); + continue; + } + if (shortcuts_ele->is_on_menu_bar) { + DEBUG_TRACE("do not support menubar_ele swap"); + continue; + } + if (shortcuts_rect_contain_check(temp_x, + temp_y, + temp_w, + temp_h, + cur_x, + cur_y, + cur_w, + cur_h, + cur_w/4, + cur_w/4) + ) { + swap_ele = shortcuts_ele; + /*evas_object_event_callback_del(obj, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move);*/ + break; + } + } + if (swap_ele) { + cur_ele->is_on_menu_bar = FALSE; + int tmp_menub_bar_no = cur_ele->menu_bar_no; + cur_ele->menu_bar_no = -1; + evas_object_del(obj); + switch (tmp_menub_bar_no) { + case CAM_MENU_BAR_LEFT_0: + ad->toolbar_0_type = -1; + ad->toolbar_0_icon = elm_icon_add(ad->toolbar_edje); + edje_object_part_swallow(_EDJ(ad->toolbar_edje), "toolbar_0_icon", ad->toolbar_0_icon); + break; + case CAM_MENU_BAR_LEFT_1: + ad->toolbar_1_type = -1; + ad->toolbar_1_icon = elm_icon_add(ad->toolbar_edje); + edje_object_part_swallow(_EDJ(ad->toolbar_edje), "toolbar_1_icon", ad->toolbar_1_icon); + break; + case CAM_MENU_BAR_LEFT_2: + ad->toolbar_2_type = -1; + ad->toolbar_2_icon = elm_icon_add(ad->toolbar_edje); + edje_object_part_swallow(_EDJ(ad->toolbar_edje), "toolbar_2_icon", ad->toolbar_2_icon); + break; + case CAM_MENU_BAR_LEFT_3: + ad->toolbar_3_type = -1; + ad->toolbar_3_icon = elm_icon_add(ad->toolbar_edje); + edje_object_part_swallow(_EDJ(ad->toolbar_edje), "toolbar_3_icon", ad->toolbar_3_icon); + break; + case CAM_MENU_BAR_LEFT_4: + ad->toolbar_4_type = -1; + ad->toolbar_4_icon = elm_icon_add(ad->toolbar_edje); + edje_object_part_swallow(_EDJ(ad->toolbar_edje), "toolbar_4_icon", ad->toolbar_4_icon); + break; + default: + DEBUG_TRACE("error occur!"); + } + 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); + } else { + evas_object_move(obj, x , y); + } + return; + } + /*check with menubar empty shortcuts*/ + menubar_no = -1; + if (check_with_menubar_empty_shortcuts(ad, cur_ele, &menubar_no)) { + DEBUG_TRACE("find empty meunbar shortcuts, and replace it!"); + + return; + } + + EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) { + if (shortcuts_ele == NULL) + continue; + Evas_Coord temp_x=0, temp_y=0, temp_w=0, temp_h=0; + if (shortcuts_ele->is_on_menu_bar) { + Evas_Object *temp_icon = NULL; + switch(shortcuts_ele->menu_bar_no) { + case CAM_MENU_BAR_LEFT_0: + temp_icon = ad->toolbar_0_icon; + break; + case CAM_MENU_BAR_LEFT_1: + temp_icon = ad->toolbar_1_icon; + break; + case CAM_MENU_BAR_LEFT_2: + temp_icon = ad->toolbar_2_icon; + break; + case CAM_MENU_BAR_LEFT_3: + temp_icon = ad->toolbar_3_icon; + break; + case CAM_MENU_BAR_LEFT_4: + temp_icon = ad->toolbar_4_icon; + break; + default: + DEBUG_TRACE("error occur,check shortcuts init"); + } + evas_object_geometry_get(temp_icon, &temp_x, &temp_y, &temp_w, &temp_h); + + }else { + evas_object_geometry_get(shortcuts_ele->icon, &temp_x, &temp_y, &temp_w, &temp_h); + } + DEBUG_TRACE("index:%d %d, %d, %d, %d,name:%s", shortcuts_ele->part_index, temp_x, temp_y, temp_w, temp_h, shortcuts_ele->name_line_1); + DEBUG_TRACE("index:%d %d, %d, %d, %d,name:%s", cur_ele->part_index, cur_x, cur_y, cur_w, cur_h, cur_ele->name_line_1); + if (shortcuts_ele->icon == obj) { + DEBUG_TRACE("find self"); + continue; + } + + if (shortcuts_rect_contain_check(temp_x, + temp_y, + temp_w, + temp_h, + cur_x, + cur_y, + cur_w, + cur_h, + cur_w/4, + cur_w/4) + ) { + swap_ele = shortcuts_ele; + break; + } + } + + if (!swap_ele) { + DEBUG_TRACE("not find swap ele"); + evas_object_move(obj, x , y); + return; + } else { + DEBUG_TRACE("find swap ele:index", swap_ele->part_index); + + } + + Eina_List *cur_item = NULL; + Eina_List *prev_item = NULL; + Eina_List *next_item = NULL; + cur_item = eina_list_data_find_list (shortcuts_ele_list, cur_ele); + + if (!cur_item) + return; + if (swap_ele->is_on_menu_bar) { + DEBUG_TRACE("find swap ele on menu bar:%d", swap_ele->menu_bar_no); + evas_object_event_callback_del(obj, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move); + } + + 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); + } + } + + 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; + snprintf(buf, sizeof(buf),"row.%d", shortcuts_ele->part_index); + if (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); + } + if (!cur_ele->is_on_menu_bar) + evas_object_move(obj, x , y); + + return; + +} + +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; +} + +/*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(); + + 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"); + + if (ad->shortcut_data) { + edje_object_part_unswallow(_EDJ(ad->edit_shortcuts_popup_ctx), ad->shortcut_data->icon); + } + evas_object_freeze_events_set(ad->edit_shortcuts_popup_scroll, TRUE); + evas_object_event_callback_add(ad->shortcut_data->icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move, + (void *)ad); + 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*/ + 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; + temp_index++; + DEBUG_TRACE("shortcuts_ele->index %d" , shortcuts_ele->part_index); + } + /*change menubar shortcuts to normoal mode*/ + 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"); + /*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*/ + __update_menubar_icon_by_index(ad, ad->toolbar_0_type); + __update_menubar_icon_by_index(ad, ad->toolbar_1_type); + __update_menubar_icon_by_index(ad, ad->toolbar_2_type); + __update_menubar_icon_by_index(ad, ad->toolbar_3_type); + __update_menubar_icon_by_index(ad, ad->toolbar_4_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; + 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); + } + + 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; + evas_object_freeze_events_set(ad->edit_shortcuts_popup_scroll, FALSE); + return 0; +} + +static gboolean __is_shortcuts_on_menu_bar(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 FALSE; + } + if (index == ad->toolbar_0_type) { + *menu_bar_no = CAM_MENU_BAR_LEFT_0; + *icon = ad->toolbar_0_icon; + return TRUE; + } + + if (index == ad->toolbar_1_type) { + *menu_bar_no = CAM_MENU_BAR_LEFT_1; + *icon = ad->toolbar_1_icon; + return TRUE; + } + + if (index == ad->toolbar_2_type) { + *menu_bar_no = CAM_MENU_BAR_LEFT_2; + *icon = ad->toolbar_2_icon; + return TRUE; + } + + if (index == ad->toolbar_3_type) { + *menu_bar_no = CAM_MENU_BAR_LEFT_3; + *icon = ad->toolbar_3_icon; + return TRUE; + } + + if (index == ad->toolbar_4_type) { + *menu_bar_no = CAM_MENU_BAR_LEFT_4; + *icon = ad->toolbar_4_icon; + return TRUE; + } + *icon = NULL; + *menu_bar_no = CAM_MENU_BAR_LEFT_INVALID; + + return FALSE; +} + +void create_menubar_shortcuts_mouse_event(struct appdata *ad) +{ + if (!ad) + return; + if (ad->toolbar_0_type >= 0) { + evas_object_event_callback_add(ad->toolbar_0_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_0_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_0_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up, + (void *)ad); + } + if (ad->toolbar_1_type >= 0) { + + evas_object_event_callback_add(ad->toolbar_1_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_1_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_1_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up, + (void *)ad); + } + if (ad->toolbar_2_type >= 0) { + evas_object_event_callback_add(ad->toolbar_2_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_2_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_2_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up, + (void *)ad); + } + if (ad->toolbar_3_type >= 0) { + + evas_object_event_callback_add(ad->toolbar_3_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_3_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_3_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up, + (void *)ad); + } + if (ad->toolbar_4_type >= 0) { + + evas_object_event_callback_add(ad->toolbar_4_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_4_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_4_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; + if (menubar_no == CAM_MENU_BAR_LEFT_0 || all_menubar) { + evas_object_event_callback_add(ad->toolbar_0_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_0_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_0_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up, + (void *)ad); + } + if (menubar_no == CAM_MENU_BAR_LEFT_1 || all_menubar) { + + evas_object_event_callback_add(ad->toolbar_1_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_1_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_1_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up, + (void *)ad); + } + if (menubar_no == CAM_MENU_BAR_LEFT_2 || all_menubar) { + evas_object_event_callback_add(ad->toolbar_2_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_2_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_2_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up, + (void *)ad); + } + if (menubar_no == CAM_MENU_BAR_LEFT_3 || all_menubar) { + + evas_object_event_callback_add(ad->toolbar_3_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_3_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_3_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up, + (void *)ad); + } + if (menubar_no == CAM_MENU_BAR_LEFT_4 || all_menubar) { + + evas_object_event_callback_add(ad->toolbar_4_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_4_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move, + (void *)ad); + evas_object_event_callback_add(ad->toolbar_4_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; + + if (menubar_no == CAM_MENU_BAR_LEFT_0 || all_menubar) { + evas_object_event_callback_del(ad->toolbar_0_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down); + evas_object_event_callback_del(ad->toolbar_0_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move); + evas_object_event_callback_del(ad->toolbar_0_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up); + } + if (menubar_no == CAM_MENU_BAR_LEFT_1 || all_menubar) { + evas_object_event_callback_del(ad->toolbar_1_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down); + evas_object_event_callback_del(ad->toolbar_1_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move); + evas_object_event_callback_del(ad->toolbar_1_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up); + } + if (menubar_no == CAM_MENU_BAR_LEFT_2 || all_menubar) { + evas_object_event_callback_del(ad->toolbar_2_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down); + evas_object_event_callback_del(ad->toolbar_2_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move); + evas_object_event_callback_del(ad->toolbar_2_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up); + } + if (menubar_no == CAM_MENU_BAR_LEFT_3 || all_menubar) { + + evas_object_event_callback_del(ad->toolbar_3_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down); + evas_object_event_callback_del(ad->toolbar_3_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move); + evas_object_event_callback_del(ad->toolbar_3_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up); + } + if (menubar_no == CAM_MENU_BAR_LEFT_4 || all_menubar) { + evas_object_event_callback_del(ad->toolbar_4_icon, + EVAS_CALLBACK_MOUSE_DOWN, + __setting_shortcuts_mouse_down); + evas_object_event_callback_del(ad->toolbar_4_icon, + EVAS_CALLBACK_MOUSE_MOVE, + __setting_shortcuts_mouse_move); + evas_object_event_callback_del(ad->toolbar_4_icon, + EVAS_CALLBACK_MOUSE_UP, + __setting_shortcuts_mouse_up); + } +} + +/*free all memory for shortcuts*/ +static void __cam_toolbar_edit_shortcuts_data_clean() +{ + Eina_List *l = NULL; + ShortCutData *shortcuts_ele = NULL; + + EINA_LIST_FOREACH(shortcuts_ele_list, l, shortcuts_ele) { + if (shortcuts_ele) { + if (shortcuts_ele->icon_filepath) { + free(shortcuts_ele->icon_filepath); + shortcuts_ele->icon_filepath = NULL; + } + if (shortcuts_ele->name_line_1) { + free(shortcuts_ele->name_line_1); + shortcuts_ele->name_line_1 = NULL; + } + if (shortcuts_ele->name_line_2) { + free(shortcuts_ele->name_line_2); + shortcuts_ele->name_line_2 = NULL; + } + } + } + + /*clear eina_list*/ + if (NULL != shortcuts_ele_list) { + eina_list_free(shortcuts_ele_list); + shortcuts_ele_list = NULL; + } + +} + +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); + + if (ad->toolbar_setting_popup) { + toolbar_hide_setting_popup(ad); + } + if (ad->edit_shortcuts_popup_scroll) { + toolbar_destroy_shortcuts_popup(ad); + } + ad->show_menu = FALSE; + ad->toolbar_show_edit_shortcuts_popup = TRUE; + int index = 0; + Evas_Object *icon = NULL; + Evas_Object *setting_popup = NULL; + Evas_Object *ele_layout = NULL; + + #define LONG_PRESS_TIME (0.50) + 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_shotcuts_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 *part_name_1 = NULL; + char *part_name_2 = 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); + + /*hide focus guide*/ + edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program"); + + /*clear eina_list*/ + __cam_toolbar_edit_shortcuts_data_clean(); + + for (index = CAM_MENU_TIMER; index < CAM_MENU_MAX_NUMS; index++) { + is_on_toolbar = __is_shortcuts_on_menu_bar(ad, index, &menu_bar_no, &ele_layout); + __get_toolbar_shortcuts_file_func((void *)ad, index, BUTTON_STATE_NORMAL, &icon_name, &part_name_1, &part_name_2, &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_icon_add(ele_layout); + elm_icon_file_set(icon, icon_name, NULL); + /*free(icon_name); + icon_name = NULL;*/ + } else { + DEBUG_TRACE("index = %d, no icon file path or file path error, please check!", index); + + if (part_name_1) + free(part_name_1); + if (part_name_2) + free(part_name_2); + part_name_1 = part_name_2 = NULL; + continue; + } + + if (part_name_1) { + edje_object_part_text_set(elm_layout_edje_get(ele_layout), "ele.txt.1", part_name_1); + DEBUG_TRACE("part_name_1 %s", part_name_1); + } + if (part_name_2) { + edje_object_part_text_set(elm_layout_edje_get(ele_layout), "ele.txt.2", part_name_2); + DEBUG_TRACE("part_name_1 %s", part_name_2); + } + 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); + + snprintf(part_name, sizeof(part_name),"row.%d",(part_index)); + edje_object_part_swallow(_EDJ(setting_popup), part_name, ele_layout); + } + shortcuts_ele = (ShortCutData *)malloc(sizeof(ShortCutData)); + shortcuts_ele->icon = ele_layout; + if (is_on_toolbar) + shortcuts_ele->part_index = -1; + else + shortcuts_ele->part_index = part_index; + shortcuts_ele->list_index = list_index; + shortcuts_ele->setting_type = index; + shortcuts_ele->icon_filepath = icon_name; + shortcuts_ele->name_line_1 = part_name_1; + shortcuts_ele->name_line_2 = part_name_2; + shortcuts_ele->func = callback; + shortcuts_ele->menu_bar_no = menu_bar_no; + shortcuts_ele->is_on_menu_bar = is_on_toolbar; + + 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++; + + + } + + 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); + + int cur_width, cur_height; + cur_width = cur_height = 0; + cam_mm_get_image_size(&cur_width, &cur_height); + gboolean cur_is_wide = cam_utils_check_wide_resolution(cur_width, cur_height); + DEBUG_TRACE("cur_is_wide = %d", cur_is_wide); + if (cur_is_wide) { + edje_object_signal_emit(_EDJ(ad->toolbar_edje), "shortcuts,wide", "prog"); + } else { + edje_object_signal_emit(_EDJ(ad->toolbar_edje), "shortcuts,normal", "prog"); + } + + ad->edit_shortcuts_popup_ctx = setting_popup; + ad->edit_shortcuts_popup_scroll = scroller; + + evas_object_show(ad->toolbar_edje); + + cam_setting_toolbar_execution_time_checker_start(ad); + 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_TIMER: + return __setting_timer_popup_cb; + case CAM_MENU_EFFECTS: + return __setting_effects_popup_cb; + case CAM_MENU_GUIDELINES: + return __setting_guideline_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 toolbar_create_setting_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); + DEBUG_TRACE("%d", ad->toolbar_show_setting_popup); + if (!ad->toolbar_show_setting_popup) + return -1; + if (ad->toolbar_setting_popup) { + toolbar_destroy_setting_popup(ad); + } + if (ad->edit_shortcuts_popup_scroll) { + toolbar_destroy_shortcuts_popup(ad); + } + ad->toolbar_show_setting_popup = TRUE; + + Evas_Object *setting_popup = NULL; + + /*hide focus guide*/ + edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program"); + + setting_toolbar_popup_create(ad); + + setting_popup = elm_layout_add(ad->toolbar_setting_ctxpopup); + 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", _("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_ctxpopup, setting_popup); + ad->toolbar_setting_popup = ad->toolbar_setting_ctxpopup; + + 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); + cam_setting_toolbar_execution_time_checker_start(ad); + + + return EXIT_SUCCESS; +} + +void cam_toolbar_and_setting_popup_del(void *data) +{ + struct appdata *ad = data; + cam_retm_if(ad == NULL, "appdata is NULL"); + + /* destroy toolbar popup and setting popup */ + DEBUG_TRACE("DESTORY toolbar_popup\n"); + if (ad->toolbar_popup) { + evas_object_del(ad->toolbar_popup); + ad->toolbar_popup = NULL; + } + DEBUG_TRACE("DESTORY setting_ctxpopup\n"); + if (ad->setting_ctxpopup) { + evas_object_del(ad->setting_ctxpopup); + ad->setting_ctxpopup = NULL; + ad->radio = NULL; + ad->guideline_radio = NULL; + ad->timer_radio = NULL; + } + DEBUG_TRACE("DESTORY ctxpopup_area\n"); + if (ad->ctxpopup_area) { + ad->ctxpopup_area = NULL; + } + toolbar_destroy_setting_popup(ad); + cam_app_focus_guide_update(ad); + +} + +int toolbar_shot_guide_popup_create(struct appdata *ad, int shot_mode) +{ + cam_retvm_if(ad == NULL, -1, "appdata is NULL"); + + /* remove guide popup */ + if (ad->shot_mode_guide_popup) { + /* remove ctx popup */ + toolbar_shot_guide_popup_destory(ad); + } + + 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); + Evas_Coord w, h; + if (ad->shot_mode_guide_popup) { + Evas_Object *ctxpopup = ad->shot_mode_guide_popup; + Eina_Bool setting_ctxpopup_is_visible = false; + evas_object_geometry_get(ad->win_main, NULL, NULL, &w, &h); + if (ad->setting_ctxpopup) + setting_ctxpopup_is_visible = evas_object_visible_get(ad->setting_ctxpopup); + cam_debug(LOG_UI, "ad->toolbar_show_setting_popup=%d", ad->toolbar_show_setting_popup); + cam_debug(LOG_UI, "evas_object_visible_get(ad->setting_ctxpopup) =%d", setting_ctxpopup_is_visible); + cam_debug(LOG_UI, "width = %d, height= %d", w, h); + if (ad->toolbar_show_setting_popup) { + elm_ctxpopup_direction_priority_set + (ctxpopup, + ELM_CTXPOPUP_DIRECTION_RIGHT, + ELM_CTXPOPUP_DIRECTION_LEFT, + ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_UP); + toolbar_move_with_scale(ctxpopup, 650, 360); + } else { + elm_ctxpopup_direction_priority_set + (ctxpopup, + ELM_CTXPOPUP_DIRECTION_RIGHT, + ELM_CTXPOPUP_DIRECTION_LEFT, + ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_UP); + toolbar_move_with_scale(ctxpopup, 650, 360); + } + } + return 0; +} + +static const char* __get_icon_image_name(CAM_MENU_ITEM item) +{ + switch(item){ + case CAM_MENU_EFFECT_NONE: + return "none"; + case CAM_MENU_EFFECT_NEGATIVE: + return "negative"; + case CAM_MENU_EFFECT_BLACKANDWHITE: + return "Black and white"; + case CAM_MENU_EFFECT_SEPIA: + return "sepia"; + default: + return NULL; + } +} + +static const char* __get_text_name(CAM_MENU_ITEM item) +{ + switch(item){ + 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"; + default: + return NULL; + } +} + + +//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..6d0c9ac --- /dev/null +++ b/src/edc-callback/cam_zoom_edc_callback.c @@ -0,0 +1,307 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 "camera_utils.h" +#include "edc_string.h" +#include "edc_image_name.h" +#include "cam_zoom_edc_callback.h" +#include "cam_common_edc_callback.h" + + +#define ZOOM_TIMEOUT (5.0) + + +static Evas_Object *slider = NULL; +static Ecore_Timer *zoom_timer = NULL; +static int zoom_value[CAM_ZOOM_VALUE_MAX] = { 0 }; + +static gboolean __init_zoom_value(struct appdata *ad); +static Eina_Bool __zoom_hide_timer_cb(void *data); +static void __set_zoom_value(struct appdata *data, int zoom_level); +static void __zoom_slider_cb(void *data, Evas_Object *obj, void *event_info); + + +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"); + + CamCapsRange *zoom_range = NULL; + + zoom_range = g_new0(CamCapsRange, 1); + cam_retv_if(zoom_range == NULL, EXIT_FAILURE); + zoom_range->min = ad->camapp_handle->zoom_min; + zoom_range->max = ad->camapp_handle->zoom_max; + zoom_range->def_val = 10; + zoom_range->step = 1; + + int i = 0; + double gap = (double)(zoom_range->max - zoom_range->min) / (CAM_ZOOM_VALUE_MAX - 2); + for (i = 2; i < CAM_ZOOM_VALUE_MAX - 1; i++) { + zoom_value[i] = (int)(0.5 + zoom_range->min + (i - 1) * gap); + DEBUG_TRACE("zoom_value[%d] =%d", i, zoom_value[i]); + } + zoom_value[1] = zoom_range->min; + DEBUG_TRACE("zoom_value[%d] =%d", 1, zoom_value[1]); + zoom_value[CAM_ZOOM_VALUE_MAX - 1] = zoom_range->max; + DEBUG_TRACE("zoom_value[%d] =%d", (CAM_ZOOM_VALUE_MAX - 1), zoom_value[CAM_ZOOM_VALUE_MAX - 1]); + + if (zoom_range != NULL) { + g_free(zoom_range); + zoom_range = NULL; + } + + return TRUE; +} + +static Eina_Bool __zoom_hide_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); + + return ECORE_CALLBACK_CANCEL; +} + +static void __set_zoom_value(struct appdata *data, int zoom_level) +{ + CAM_UI_LOG(); + + 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)) { + DEBUG_TRACE("cam_handle_value_set failed"); + if(!ad->zoom_warring_popup) + cam_app_zoom_warring_popup(data, "zooming is not supported in this resolution.", cam_app_zoom_warring_popup_response_cb); + } +} + +static void __zoom_slider_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct appdata *ad = (struct appdata *)data; + cam_retm_if(ad == NULL, "appdata is NULL"); + + REMOVE_TIMER(zoom_timer); + + if (obj) { + Evas_Object *slider = (Evas_Object *)obj; + int slider_value = (int)elm_slider_value_get(slider); + __set_zoom_value(ad, slider_value); + } else { + cam_critical(LOG_UI, "Error : slider is NULL"); + } + + zoom_timer = ecore_timer_add(ZOOM_TIMEOUT, __zoom_hide_timer_cb, ad); +} + +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"); + + /* 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->win_main, 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->win_main, 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->win_main, 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->win_main, 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"); + + /* 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); + elm_slider_inverted_set(slider, EINA_FALSE); + } else { + elm_slider_horizontal_set(slider, EINA_FALSE); + elm_slider_inverted_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); + 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_add(slider, "changed", __zoom_slider_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"); + + 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_timer); + + return TRUE; +} + +gboolean zoom_in(struct appdata *ad, gboolean is_zoom_in) +{ + 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; + + REMOVE_TIMER(zoom_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++; + } else { + if (zoom_value > CAM_ZOOM_VALUE_MIN + 1) + zoom_value--; + } + 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_timer = ecore_timer_add(ZOOM_TIMEOUT, __zoom_hide_timer_cb, ad); + + return TRUE; +} + +#ifdef PREVIEW_PINCH_ENALBE +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"); + + REMOVE_TIMER(zoom_timer); + + if (ad->zoom_edje == NULL) { + load_zoom_edje(ad); + } + cam_retv_if(ad->zoom_edje == NULL, FALSE); + + /* set zoom value */ + DEBUG_TRACE("zoom_in camapp->zoom_mode = %d",camapp->zoom_mode); + 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; + } + } + DEBUG_TRACE("zoom_in camapp->zoom_mode = %d",camapp->zoom_mode); + +/* __set_gauge_focus(ad);*/ + /*zoom_timer = ecore_timer_add(ZOOM_TIMEOUT, __zoom_hide_timer_cb, ad);*/ + + return TRUE; +} +#endif +//endfile \ No newline at end of file -- 2.7.4

    -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 X4SVrdNN3}@t-nbm!UkRh^@{jEGEdAu literal 0 HcmV?d00001 diff --git a/images/vertical/camera_mode_button_ver.png b/images/vertical/camera_mode_button_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..b2540df3373b41817b51db06350a8c31068b93ff GIT binary patch literal 7937 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 literal 0 HcmV?d00001 diff --git a/images/vertical/camera_mode_option_bg_ver.PNG b/images/vertical/camera_mode_option_bg_ver.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3d38f85e68ae77fbcfc31d035bdf8c36ea4d2258 GIT binary patch literal 2804 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 XPV^=tdi5zM69Y42Yoi*tYt+91Q_@gO literal 0 HcmV?d00001 diff --git a/images/vertical/camera_mode_shutter_normal_ver.png b/images/vertical/camera_mode_shutter_normal_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..0cea4b3315492b6f0329ad5dd2673d7749708cf8 GIT binary patch literal 21672 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 N002ovPDHLkV1j6LBzFJ+ literal 0 HcmV?d00001 diff --git a/images/vertical/camera_normal_bg_ver.png b/images/vertical/camera_normal_bg_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..313e962a77180f965b4aeee6a10da1ce97d98847 GIT binary patch literal 1647 zcmeHGJ#W)M7``M0N>NZ3gy?i~VI%%Z6W3Nvo5Tr?giDnKH4-3j?Q3JT_8I%yIGrjs z1}6SMe*psmgp`4qjR7%q=0ifDO0Xa?z&VZ6(h`0E!h?PH_<5iAxqILD!Q#Tz^w`80 z03cnR*J=PHU(@x@=t=s%^ywy{p9`eiBz3$(+J=un!NSW3Rvlv%)sSIz?!7`Y0HmPZ zXp*LWO);^<8WD#L9gju>Ff$u^hPj3aTt=(5t1^4tmkhKmm08N^yzZ4y%bwrzQGIKn zVQ#INvc=3^fis~(1sp^S7&_~2poA*Z(^cp?f;k5EC}d4#_DwbQMOeZ`wv62`PPb3(<=R3bf+>cLOg}z+U+*m&a&8F z9umVz?%%YAQqHS=+XhN|Db>xk@>omnA_c3vyPT*7Bud zc}kSBqC6ePYS`RxkW1oN>mar=G&X7k$D^4wyD?Jp*XAqiE00dC=F56n-29uo2tm)NyUalq61QBwR&Fq()+?YhN2Hwa=U{#O(rw ziG=})y^Ji(2nLXt*g7#(f{6hEqGDy@oF-`p!pu+)z8}B$zVE(!pC8v&Z_Q56PXhpE zt1DI=fQbV>-@h=$-`Bp~VSJclDEnLTrw{!Oc&I2$B{bq}` z?AwM*0?|n^ViH804M2W5i5$0s8Qj2IerO6uZ{7;f_e^0;wPiah;kLiBOL1d&wdwA5 zT-_6vZ@_$FaDf0b2PVOG7#oQx^mPqBPq!rj_93ie3dc#c>>4Z)ilHjX8CTB9Fo#5x zUDPz~I#gsNOR^#%C4)30s~EBj2amv`QE$_zTa`g9zA}Y2W04_AyyD2A#;*U7%vPJEF8PkkC;zFm?}COq{~c!XL@{uAR5Vr@t{n+U{c~l5)$R~ zNJF4){~Ha$QGvlJ?vE|31I)ghCey6JPJC-Z)WTf<3 zPhInHi+d-Xj!erJBirMUd!2Gquf3uP@37BRtI$jie|#*Q190a3yS;t=#eIGK`NYqw zU!G;NbG-lP(|kHy`T9xa{aAZ_34jNCyeB7T0hpQxU}h13%WVMUgR?JZHTZ9QaP#P* Y3?BVD|NAic{v`ePSIeu`%i{XOKam7`tN;K2 literal 0 HcmV?d00001 diff --git a/images/vertical/camera_normal_bg_ver2_01.png b/images/vertical/camera_normal_bg_ver2_01.png new file mode 100644 index 0000000000000000000000000000000000000000..03714499db46ad10ad287ca93e801dab2e059aa5 GIT binary patch literal 625 zcmeAS@N?(olHy`uVBq!ia0y~yV7dTg7jUovN%Jf2(LhSF#5JNMI6tkVJh3R1!7(L2 zDOJHUH!(dmC^a#qvhZZ84N#Y`r;B4q#jQ8j9C;ZOMVt>hU6cEFUgPJQ7OokdSqqkL zpEL((($xI4JwPhg;s5SD28M=nWsD3A92pD@0zf+z7BDh6I50CbGytt;e9MGQlox2x zEmm~3AW29_<{3`i!xL`^_ehy!f{n~Nd}vO*8&9!3mNkQK2&8L+uv6Of&=8z{qq mAqsN(sE432bfKDwhe6>4E59h?w&%d$V(@hJb6Mw<&;$T1o^U<@ literal 0 HcmV?d00001 diff --git a/images/vertical/camera_normal_bg_ver_01.png b/images/vertical/camera_normal_bg_ver_01.png new file mode 100644 index 0000000000000000000000000000000000000000..edac7f73e9c6a4b7e1ba272409bffce68fedf0a8 GIT binary patch literal 625 zcmeAS@N?(olHy`uVBq!ia0y~yV7dTg7jUovN%Jf2(LhSF#5JNMI6tkVJh3R1!7(L2 zDOJHUH!(dmC^a#qvhZZ84N#Y`r;B4q#jQ8j9C;ZOMVt@5Ws|o!uzxqdkXC})%Eozd zY0qjH7#yCKGcqu6WH2xY0BuoNz{ud>z|7Fl0JMzpEfY3TUZBypSkcvjM5P!QShjEj z&4il(6Ey)@AQ4c|4=t6Y< nZD6Pdu$2hu17qbSmjOfDEfz!j%;GL!;4yf*`njxgN@xNA*UfFK literal 0 HcmV?d00001 diff --git a/images/vertical/camera_option_popup_anker_vertical.png b/images/vertical/camera_option_popup_anker_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..71b4154e2156a1348c4a215d86880d6191985cbe GIT binary patch literal 3154 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 literal 0 HcmV?d00001 diff --git a/images/vertical/camera_popup_ex_bar_ver.png b/images/vertical/camera_popup_ex_bar_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..8e5ea750e59968620624b59a60cffcbe89a61543 GIT binary patch literal 3111 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 B%k}^O literal 0 HcmV?d00001 diff --git a/images/vertical/camera_popup_ex_line_ver.png b/images/vertical/camera_popup_ex_line_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..331aacd09722603d957c5aa374ace9b37fee75ca GIT binary patch literal 1094 zcmb7DJ#W)M7`7A%Xr-=5WjeV`Rb!u>CU&g2#h)~QOGzU&V;%dNn8ZGFz7V$y6$?V@ zg!mgEb_N(&_zMhd3`|w`O68m;X@{y3mhAiR`#jJ4`F>~n@zUahMULZ^np<{@t#{b# z-YdSRAOAdL%QAI3bQd4cu}=_Zgt&`9GxmF^h5YdF)lbymxYDPn-Ju=tnHJz!@CzFu zk5h)`xW;Cl`oREE&_%r{(fQM_-*^y(I=@%-pqE;xA8j2Gw0pGO4vq#vJ>)kxKqJ=} zL5!#m@_3kJTCVdGUXAUGYmo;N6FSiOOQ$;C4zMsmpen#}0BaD`BtfdID~hrPWGF!q z%AzEfB}J>q8iZi_@Jx+_2U^Q^r&{c!^Ljc@`AM!$2 zP@Z=?B97f-KqlZ3X~jqhHWMp^^*V%5SApigX literal 0 HcmV?d00001 diff --git a/images/vertical/camera_popup_exposure_vertical_bg.png b/images/vertical/camera_popup_exposure_vertical_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..117d401d23b6cad1838788bb8919060476ac4cae GIT binary patch literal 592 zcmeAS@N?(olHy`uVBq!ia0y~yU~&MmOE}noWbV7(B|u8D#5JNMI6tkVJh3R1!7(L2 zDOJHUH!(dmC^a#qvhZZ84Fdz?Cr=m0kcwMxZaDHb81Oh;oSM-5xh9cC{l~0XMkfRg zR_JF|y??oU;>@MDf4!;AVq};R-7VUy|(a&iNe$f(!{+-#@1pvN1f!XAxjf zXkcIfQVk4D3<3^7S8*^nFfcN3C;+Wu!7WLQ8cYL7v;<}VK8L{6V0wW_pP(6lX%3;F zfEhrkD;wTNAJ41JO54T3V6gW)b4ecu6T^(y-7FFel{baz7&MLBfk}kH)78&qol`;+ E0D2o@`v3p{ literal 0 HcmV?d00001 diff --git a/images/vertical/camera_popup_zoom_bar_ver.png b/images/vertical/camera_popup_zoom_bar_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..269a3d32f81cd552de19c4f4d4bd481443bc173d GIT binary patch literal 1292 zcmb7EZEO=|9DfEVuw+rQ8o_CDIlvLLy_c@Lm-QUiyDK!=)uwA?7>V5Op0#IpFT1PoO=?w$1D@MN~2PnLDgzz1K(k~JO)STNAAnl*0wd`-Zcx;$Ek#{`ZwAwgNd zA2>Cl<}k_eAeM-cQJw53v3@E>#rqhBc?qLQiX=#ypy(*Y@Nt?aNv!qY$eL%2@p(Dj zvW0d6UJ3%2Cx~jb8mq=*j#nfoj^jcNnvNnw)UVrtR*TyHwzh%{ecdzNz;tXZRMbYD zN+96K(+43~Zr&`G0)Iu^_FKt9X(MWyOHeVA@S2z~zBWr$*JfDO3fd3y@S*dM)b|T@ z7ZQ2sI~7kyRUF&4%GBD1LSQQfUe&xZL{&^{<34QuP*wgFk5 z)8HAIQDlx~C0a@;Bt?lSQIgWM!f*;YlHzTF)kI_~W+1M_NeIl+ipWY7rH~>^GZK|h zu67t>;!o3Z^svvn964Y}q+F103?mprHij#qG;@pd=mN>1STCCA02;RLqNv<;`~ zhlNJUC{P)C=3CH6dya)QbIzNOur5lnOeqw{a*7y6ol3JJn-WPeC8zt81dF%0#{W(i zfjl9?9$VFO?IYC4;c{hy&}L-@p^ZxBp$S`PSQRv#_cO9ss4e|@gUWupJF+3yyXC2q zCxfnhkJH48tWn-eZ1f8+>Sr@+HXg{D_@_VqL#iNc=7aHpX$%f z?bz4_eoemc`9kDw#g5IKJ_g<%p85940Q15>CFS*uwZKW z2X$h8=IbGF=9#-k>tJYsJ9jU+fBT-_zj)*3)+heHIY9qXzC3mCb>{f_YljY9>=|rK lU-~;^urmMv literal 0 HcmV?d00001 diff --git a/images/vertical/camera_popup_zoom_ver.png b/images/vertical/camera_popup_zoom_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..e6bf63811e2f55c511ba657196d53ddf94006a6e GIT binary patch literal 515 zcmeAS@N?(olHy`uVBq!ia0y~yV3Gr}6FAs_WKc=-L1;Fyx1 zl&avFo0y&&l$w}QS$HzlhJk@`si%u$NX4x;H#YLN7znsJ>M!C=`tGWHowIi5tW@1X zRSCf}9`WbQtBO*dU5v8M-pk0a#xN^9q~ebYJHrRJnm7MnbZ|UpV3>B|%+D`pH5nSV zbMP}bR4_0cVn(9`fbIhdBB+KB3?Lp7)xr+uAt(i)3xPZ&>LDYThd}{tWdI5yD3BYV zPNBd>Q1>BR1ad8^i=aGmT!iYd``fR(txaE+&A_1D`}1+3?MFt24LVk7#dnx^7#1uL W&5pnKW*;zC89ZJ6T-G@yGywpmx`GV= literal 0 HcmV?d00001 diff --git a/images/vertical/camera_shrtcut_edit_bg_02_ver.png b/images/vertical/camera_shrtcut_edit_bg_02_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..0a0e510a31d67613a2e60a3cc1162f15dd39feec GIT binary patch literal 3682 zcmeHKy>HV%6u-7mRTUi=7=XocCnOU4?8c6*hLZS$n&MKWfkrIUwJ(WD>@)U-xSa|c z6Mp~;GZIW}3{WQ6U;&9gfC-5mF>p?kv_n;i8C$Y^AMf{j@7}%l?)-FP{l>!lrFj6r zg0-sG0hs$J>4Q2`vLK^U7~D zNz=Zix;Q90nM^SaB8moJc_ob;w~Gj~gW7&rVSl}S$1=WGVYf;)Z$}#H_^W#{+T2@j zxO-h!@z|AX%yOzyf&dYRNrPUPsA+{A@~X6*4Rb6r6d~OTduUYC-e5EwBc@d33obA5 zj0B5NT#{w^DkJca=XimGLIKLED5yNoj2@P1i@law*UgbG+N-b~LL!yp27^IyAQo}l z=Afb|8HXSgs6-*z4T+N$!envGprgc%{fPKDWHLr)2lq*ZrIsEpA&BaJyF-!*d6gdS$6Zwvjoec#E!7uKf8;gmT*~&9gDf~5Dnz4ImsZ}ndBe} z>6XPb!#;|u1pwyPEWO%DzyJIS&jWt$%)z;5)}PA9ZHQ SFXw(|e|?s*uD`BrKluxj1`=@q literal 0 HcmV?d00001 diff --git a/images/vertical/camera_shrtcut_edit_bg_ver.png b/images/vertical/camera_shrtcut_edit_bg_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..ed7dd127e7da5a2bf9ff83d7c1d945b3f5dbdd30 GIT binary patch literal 4250 zcmeHKTTC2P7(NS#D}{C-`!DCrcV>FK57gD{u0aUZ#Se-}geq3a*INye3j+sE!e4{kIcWFk!**ISF=|Wc zLzs%I(g;psDK&ZYDsDljl2ZBy?ZL#0f~>2IM0A*pYJfFDEv*?tlE<)34dD?*i_&*L zTcjx^6{QE76I{aRz@y5+DHHcib@$6tV{#-#x9+D}G6FbIu`N*<^@wH(nJDe}72ukP zS(r1fRSVjdoy0}F|LWN4 zpENL=#Fjp8%FwvsMiR;pI!r9ty4kPmNAgwd9o22!8r2P|qpz77P_&euwjAw5LWpaY zEom~2i%}Zv8AVA6?One1NTe$i3`W{{zLReY`@?Mkj^_hGuCp^B=50k?9#^qu=WSC( z+wiuwWDryXB8%8mCUC0D)K$t!SWvdd(!8xd*EY31mf*IwEP!E2TT9xU7s2e1%fisY zO=0Y@2D5I$P@hizEWtvnkBe>nnOnbne@%U^tycW}EHlehpVO_kcU}B)`s3KEdpOS% zZ_IFedma~$A9`uy??(|@IJ^&5lBW*V=5BFEtQhMx2j0Atx^JK;W6a;B_1|`+=U?8LsAl=oKU$#xzQ+( zTzL(-`&oHYC~peoO`-4#Ex%aHOu^+`|Ch_%K6B?Apoyy=o+>i8?DDri9D5Ha;MCy~ zK9^nob0-kXsvG_sH+=U;{{)oZn0D!#|9ayyhk(xQd%8e9J!tLdde4ddGEme617Yg# zJ+%|8KXpiEHOe-e*M`AlPu_&PG7tt9xmE!r(Q}-x0&=*6#B8Y~f}++7C)~){>^okM zYcTyv2%yE@+G62-;J_xSP-_i<%?Te{@)JBo^k02&$%E!r9s$ByvF@MfCPn$l!O@!Z zr#IRJcp@5#MxXRC@h$nk-@;*`2~1!{GA++T^%?N!?_ZKi#3 R7LF?@-q|gF)c*RL{{R%7BhUZ< literal 0 HcmV?d00001 diff --git a/images/vertical/camera_shrtcut_menubar_bg_ver.png b/images/vertical/camera_shrtcut_menubar_bg_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..19b343c076c7f8f319768c31a575369d70c9f57f GIT binary patch literal 1783 zcmeHIyKmD#9KJLHp-SB;3&s^2v3*Wr$5um0{AeTLQl&wS#8TJ3BvxXdu`k5!!ee7W zNQi;0{{Re#4G9=vsKmg85E2p-1FGl%BSM_hB<)aDVq>U>^F4mw_j}*nUs+z9nLalS z0GO#Q>2(06KG6C0nbUN<`27Z;Qe9bbRTV~gamSBY%>Uc|A5nA0^ zZa7F8{|10 zwRxy0O3ERMIVzEhHv?iPxgee!Gw3LGA}=H!4w#hD-oSlQW~rt7F8E>HYj;RIArInF zuxQx$#147L34An^N&Oq6EbDlL?@y#-Qbz~IAITp#HbcbMQH=YML$lbLJEZD(MXBJ( z2i3BpE}~g9?Ou$A2bQH?qsDuI-P5tt_fbG`*B1r~>P%%tJfmJQ9nMFuFVnMZ_tyvKXK9JH7T-Rih1q%qvf%cE?4NhLJ8JqA M)r@8RS#|y1U%bE7g#Z8m literal 0 HcmV?d00001 diff --git a/images/vertical/camera_shrtcut_text_bg_ver.png b/images/vertical/camera_shrtcut_text_bg_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..5d58a2f3f6686412b0781096ce997b300d01f174 GIT binary patch literal 1618 zcmeHHJ#5oJ7`+myprT5&0}?D)?n+{x-8ivnD2{(<5H3|3sTD|2*SD9@av%2KSE<1jf8A}vO;3Hx)iQfofB`L9OUWKmHV~%CoCS<9^?l?7TO)(md5R=dG zS%;T+MuIsgjur}q(~Q7Fp5p}$3RzfCL_y(srt`2=Epiu>s&00)=&r=p2?-UBYqeUr zmYBoQA_rwzPB{c2OD(eTN?BTeiQ>;+P-oJ+C!(V{4evL;EY384Xt#j(3vb zR{>bNJ97vCo?Z}h5BtE@xeQplN$-iwAOQWB|Nr@?bMWcu@u4fU*qdMOueh`o9$Z`N Y1NW8>uipuNJxOo*iZQ7_F3;Wi1Erz3&Hw-a literal 0 HcmV?d00001 diff --git a/include/CamDeviceCapacity.h b/include/CamDeviceCapacity.h new file mode 100755 index 0000000..0053bd2 --- /dev/null +++ b/include/CamDeviceCapacity.h @@ -0,0 +1,82 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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_Effect; + DevCapsMinMax m_Zoom; + + unsigned int m_uFuncCaps; + //=========================================================================== + // Interfaces +public: + + static CCamDeviceCapacity* GetInstance(); + void Destroy(); + void ResetCaps(); + + void GetCamDevFuncCaps(unsigned int *eType, void *user_data); + bool GetCamDevEffectCaps(unsigned int *uCapacity, void *user_data); + bool GetCamDevZoomCaps(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..5d3bb47 --- /dev/null +++ b/include/CamTypeConverter.h @@ -0,0 +1,33 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 CamEffectDevConvertCaps(camera_attr_effect_mode_e effect); +static unsigned int CamEffectCamConvertCaps(CamSettingsEffects effect); + +}; + +#endif /* CAM_TYPECONVERTER_H_ */ + diff --git a/include/cam.h b/include/cam.h new file mode 100755 index 0000000..ab12bb8 --- /dev/null +++ b/include/cam.h @@ -0,0 +1,411 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include +#include +#include + +#include "cam_property.h" +#include "cam_app.h" +#include "edc_string.h" +#include + +#include +#include +#include +#include + + +#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 + +#ifndef PREFIX +# define PREFIX "/opt/apps/org.tizen.camera-app/" +#endif + +#define PACKAGE "camera" +#define GRP_MAIN "main" +#define LOCALEDIR PREFIX"/res/locale" + +#define EDJ_PATH PREFIX"/res/edje" +#define CAM_IMAGE_PATH PREFIX"/res/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_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_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 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_UG_NAME "image-viewer-efl" + +#define AF_FAIL PREFIX"/share/camera/sounds/af_fail.wav" +#define SHUTTER PREFIX"/share/camera/sounds/Shutter_02.wav" +#define RECORD_START_SOUND PREFIX"/share/camera/sounds/cam_start_01.wav" +#define RECORD_STOP_SOUND PREFIX"/share/camera/sounds/cam_stop_01.wav" + +#define PICTURE_PATH PREFIX"/share/camera/pictures" +#define VIDEO_PATH PREFIX"/share/camera/videos" + +#define PREVIEW_WIDTH 640 +#define PREVIEW_HEIGHT 480 + +#define WINDOW_W 640 /* 400 */ /*1280*/ +#define WINDOW_H 480 /* 240 */ /*720*/ + +#define AUL_SERVICE_MIME_TYPE_IMAGE "image/jpg" +#define AUL_SERVICE_MIME_TYPE_VIDEO "video/3gp" +#define APP_SERVICE_DEFAULT_CALLER_NAME "3rd_Party_App" +#define APP_SERVICE_MESSAGE_APP "message" + +#define FAKE_IMAGE_PKG_NAME "org.tizen.camera" + +#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 *win_main; + Ecore_X_Window main_xid; + Ecore_Pipe *main_pipe; + CamLaunchType launch_type; + CamAppCoreState appcore_state; + + + app_device_orientation_e rot_current; + app_device_orientation_e rot_previous; + + + int angle_pre; + int angle; + int rotate_angle; + int previous_win_rotate_angle; + gboolean is_rotating; + + int camcorder_rotate; + + Evas_Object *layout_main; /* layout widget based on EDJ */ + Evas_Object *black_screen; + +#ifdef ENABLE_CAPTURE_ANIMATION + Evas_Object *shutter_screen; + Evas_Object *shutter_move_image; + + CamRectangle shutter_src_rect; + CamRectangle shutter_des_rect; +#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_outside; + 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_landscape; + Evas_Object *edje_portrait; + Evas_Object *edje_landscape_inverse; + Evas_Object *edje_portrait_inverse; + + Evas_Object *edje; + Evas_Object *camera_icon; + Evas_Object *camcorder_icon; + bool is_dimmed; + } mode_item; + + 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; + + Ecore_Timer *conti_shot_timer; + } toolbar; + + Evas_Object *toolbar_0_icon; /*setting icon*/ + Evas_Object *toolbar_1_icon; + Evas_Object *toolbar_2_icon; + Evas_Object *toolbar_3_icon; + Evas_Object *toolbar_4_icon; + + int toolbar_0_type; + int toolbar_1_type; + int toolbar_2_type; + int toolbar_3_type; + int toolbar_4_type; + + Evas_Object *shutterbtn; + Evas_Object *shutterbtn_camera_icon; + Evas_Object *shutterbtn_camcorder_icon; + + Evas_Object *backbtn; + + Evas_Object *focus_edje; + Evas_Object *indicator_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; + + +#ifdef GUIDE_LINE_ENALBE + Evas_Object *guideline_edje; +#endif + + Evas_Object *progressbar_edje; + Evas_Object *progressbar; + + Elm_Object_Item *timer_item; + Elm_Object_Item *setting_select_item; + + Evas_Object *radio; /* radio button */ + Evas_Object *guideline_radio; /* radio button */ + Evas_Object *timer_radio; + Evas_Object *genlist; + + int effect_radio_index; + int timer_radio_index; + + Evas_Object *toolbar_popup; /*I think this evas_object have no use,fix me*/ + Evas_Object *toolbar_setting_popup; + Evas_Object *toolbar_setting_ctxpopup; + Evas_Object *toolbar_setting_popup_content; + bool toolbar_show_setting_popup; + Ecore_Idler *toolbar_setting_popup_idler; + + bool toolbar_show_edit_shortcuts_popup; + + Evas_Object *setting_ctxpopup; + Evas_Object *ctxpopup_area; + Evas_Object *setting_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*/ + /* continous */ + struct { + Evas_Object *layout_edje; + Evas_Object *gengrid; + Eina_List *item_list; + } conti_review; + + 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_Event_Handler *mouse_move; + + 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; +#ifdef ENABLE_CAPTURE_ANIMATION + MMCamcorderCaptureDataType capture_datatype; +#endif + + Ecore_Timer *rec_icon_updater; + Ecore_Timer *rec_time_updater; + Ecore_Timer *rec_pause_timer; + + Ecore_Timer *popup_timer; + Evas_Object *waring_popup; + Evas_Object *confirm_popup; + int recording_state; + + /* auto shot */ + Ecore_Idler *auto_shot_idle; + + /* general */ + Ecore_Timer *timeout_checker; + Ecore_Timer *auto_close_timer; + Ecore_Timer *setting_toolbar_hide_timer; + + Ecore_Timer *continuous_af_timer; + + Ecore_Timer *toolbar_toggle_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*/ + + /* Launching Mode */ + int launching_mode; + /*app service mime type*/ + char *aul_service_mime; + /*camera app is called by this app using app service */ + char *appsvc_caller; + /* exe args */ + CamExeArgs *exe_args; + + /* Thread for file register */ +#ifdef USE_FILE_REG_THREAD + pthread_t file_reg_thread; + pthread_mutex_t file_reg_mutex; + pthread_cond_t file_reg_cond; + GQueue *file_reg_queue; +#endif + + pthread_t camera_start_thread; + + 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; + + int mm_state; + gboolean isGrabed; + + Ecore_Idler *update_thumbnail_idler; + Ecore_Timer *thumbnail_hide_timer; + + Ecore_Timer *longpress_timer; + gboolean up_key; + gboolean shutter_move; + /*checking exist result snapshot popup*/ + gboolean is_showing_snapshot_popup; + + int cancel_key_press; + int is_recording; + + gboolean path_in_return; + int show_menu; + 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; + + /* during the call */ + int is_calling; + int foucs_out_from_quickview; +#ifdef USE_CAMERA_APP_SHUTTER_SOUND + int play_rec_sound; +#endif + Evas_Object *auto_close_popup; + Evas_Object *restore_default_popup; + Evas_Object *zoom_warring_popup; + int auto_close_count; + + int last_camera_zoom_mode; + + /* guide screen */ + Evas_Object *shot_mode_guide_popup; + + service_h service_handle; + cam_menu_composer* setting_menu_composer; + + /*note: remained_count*/ + int remained_count; +}; + + + +extern void *handle; +gboolean open_cam_ext_handle(); +gboolean open_cam_handle(void* data); +void close_cam_ext_handle(); +gboolean cam_toolbar_menu_config_init(void *data, int mode); +gboolean cam_toolbar_menu_config_update(void *data); + +int update_ts_main(void *data); + +#endif /* __DEF_CAM_H__ */ diff --git a/include/cam_animation.h b/include/cam_animation.h new file mode 100644 index 0000000..0bfc155 --- /dev/null +++ b/include/cam_animation.h @@ -0,0 +1,24 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 + +static gboolean cam_app_create_screennail_and_start_animation(void *data); +static gboolean __cam_save_captured_file(void *data); +static gboolean cam_app_shutter_screen_show(void *data); +#endif diff --git a/include/cam_app.h b/include/cam_app.h new file mode 100755 index 0000000..711c7a5 --- /dev/null +++ b/include/cam_app.h @@ -0,0 +1,438 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "cam_property.h" +#include "cam_debug.h" + +#include + +#define ENABLE_MOUSE_CONTROL 1 + +#define USE_FIFO_THREAD +#define USE_FILE_REG_THREAD +#define EFL_TEMP_CODE +#ifdef USE_FILE_REG_THREAD +#define REG_THREAD_EXIT "REG_THREAD_EXIT" +#endif + +#define USE_VCONF_CAMERA_KEY +/* next define statement will be deleted */ +#define TODO_SURRPORT +#include +#define BEAT_UI +#ifdef BEAT_UI +#define DISABLE_TOOLBAR_TOGGLE +/* #define DISABLE_INDICATOR */ +#endif + + +struct text_part { + char *part; + char *msgid; +}; + +/* + * 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) + +#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_TIMER_POPUP, + DISPLAY_EFFECTS_POPUP, + DISPLAY_GUIDELINES_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 struct _CamApp CamAppData; + +struct _CamApp { + gint camera_mode; + gint shooting_mode; + gint recording_mode; + gint focus_mode; + gint resolution; + gint fps; + gint effect; + gint af_mode; + 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; + Ecore_Timer *battery_ani_timer; + + gint zoom; + gint zoom_min; + gint zoom_max; + gint zoom_mode; + gint storage; + + gboolean audio_recording; + gboolean guideline; + gboolean review; + gboolean enable_touch_af; + + 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 */ + + gulong guide_rect_color; + + /* 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; + + /*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; + +}; + +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); + +Eina_Bool cam_app_real_exit(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); +Eina_Bool 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_app_quit(void *data); + +gboolean cam_handle_create(void *data); +gboolean cam_handle_free(void *data); +gboolean cam_handle_init(void *data, int mode); +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); + +#if ENABLE_MOUSE_CONTROL +Eina_Bool cam_mouse_button_down(void *data, int type, void *event_info); +Eina_Bool cam_mouse_button_up(void *data, int type, void *event_info); +Eina_Bool cam_mouse_move(void *data, int type, void *event_info); +#endif + +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(void); +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(); + +void cam_app_stop_video_stream(); + +void cam_app_run_video_stream(); + +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); + +#if ENABLE_HAPTIC +void cam_app_haptic_cb(void *data, Evas_Object *o, const char *emission, + const char *source); +#endif + +#ifdef USE_FIFO_THREAD +void *cam_app_FIFO_thread_run(void *data); +void cam_app_FIFO_thread_exit(); +#endif + +#ifdef USE_FILE_REG_THREAD +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); +#endif + +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_app_mouse_event_init(void *data); +gboolean cam_app_mouse_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_black_screen_show(void *data, int mode); +gboolean cam_app_black_screen_hide(void *data); + +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_resolution(int *width, int *height); +gboolean cam_app_reset_resolution(void *data, int width, int height); +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_snapshot_popup_response_cb(void *data, Evas_Object *obj, void *event_info); +void cam_app_popup_response_cb(void *data, Evas_Object *obj, void *event_info); +void cam_app_zoom_warring_popup_response_cb(void *data, Evas_Object *obj, void *event_info); + +Evas_Object *cam_app_create_win(const char *name); + +Evas_Object *cam_app_load_edj(Evas_Object *parent, const char *file, + const char *group); + +void cam_app_update_ts(Evas_Object *eo, struct text_part *tp); + +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_zoom_warring_popup(void *data, const char *msg, + void (*func) (void *data, Evas_Object *obj, void *event_info)); +void cam_app_notice_popup(void *data, const char *msg, + void (*func) (void *data, + Evas_Object *obj, + void *event_info) + ); +void cam_app_snapshot_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 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); + +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); + +#endif diff --git a/include/cam_capacity_type.h b/include/cam_capacity_type.h new file mode 100755 index 0000000..9538f1b --- /dev/null +++ b/include/cam_capacity_type.h @@ -0,0 +1,66 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 + +// EFFECT +#define CAM_CP_EFFECT_NONE 0x00000001 +#define CAM_CP_EFFECT_BW 0x00000002 +#define CAM_CP_EFFECT_SEPIA 0x00000004 +#define CAM_CP_EFFECT_SHARPEN 0x00000008 +#define CAM_CP_EFFECT_NEGATIVE 0x00000010 +#define CAM_CP_EFFECT_RED 0x00000020 +#define CAM_CP_EFFECT_PINK 0x00000040 +#define CAM_CP_EFFECT_YELLOW 0x00000080 +#define CAM_CP_EFFECT_GREEN 0x00000100 +#define CAM_CP_EFFECT_PURPLE 0x00000200 +#define CAM_CP_EFFECT_INVERT 0x00000400 +#define CAM_CP_EFFECT_GRAY 0x00000800 +#define CAM_CP_EFFECT_AQUA 0x00001000 +#define CAM_CP_EFFECT_EMBOSS 0x00002000 +#define CAM_CP_EFFECT_OUTLINE 0x00004000 +#define CAM_CP_EFFECT_ANTIQUE 0x00008000 +#define CAM_CP_EFFECT_MONO 0x00010000 + +// FUNCTION +#define CAM_CP_FUNC_EDIR_SHORTCUT 0x00000001 +#define CAM_CP_FUNC_TIMER 0x00000002 +#define CAM_CP_FUNC_EFFECT_MODE 0x00000004 +#define CAM_CP_FUNC_GUIDE_LINE 0x00000008 +#define CAM_CP_FUNC_RESET 0x00000010 +#define CAM_CP_FUNC_ZOOM 0x00000020 +#define CAM_CP_FUNC_COUNT 6 + +// 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 100644 index 0000000..0590b56 --- /dev/null +++ b/include/cam_config.h @@ -0,0 +1,84 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +/* +#include "cam_property.h" +*/ +#define CONFIG_PATH "/opt/apps/org.tizen.camera-app/data/.camera.ini" + +#define EXTERNAL_MODE_SAVE_PATH "/tmp" + +typedef enum { + CAM_CONFIG_TYPE_COMMON = 0, + CAM_CONFIG_TYPE_PREVIEW, + 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_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_debug.h b/include/cam_debug.h new file mode 100644 index 0000000..731ed1e --- /dev/null +++ b/include/cam_debug.h @@ -0,0 +1,296 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include + +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 +struct mallinfo g_mem_info; +#endif + +#ifdef USE_DLOG_MESSAGE + +#include +#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 +#include + 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..1158a70 --- /dev/null +++ b/include/cam_device_capacity.h @@ -0,0 +1,39 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 GetCamDevEffectCaps(unsigned int *uCapacity, void *user_data); +bool GetCamDevZoomCaps(int *min, int *max); + + +#ifdef _cplusplus +} +#endif + +#endif + + diff --git a/include/cam_devman.h b/include/cam_devman.h new file mode 100644 index 0000000..2438189 --- /dev/null +++ b/include/cam_devman.h @@ -0,0 +1,27 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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_DEVMAN_H_ +#define CAM_DEVMAN_H_ + +#include + +gboolean cam_devman_init(void); +gboolean cam_devman_deinit(void); +gboolean cam_devman_haptic_play(int milisec); + +#endif diff --git a/include/cam_error.h b/include/cam_error.h new file mode 100755 index 0000000..b048be9 --- /dev/null +++ b/include/cam_error.h @@ -0,0 +1,66 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 + +#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_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_file.h b/include/cam_file.h new file mode 100644 index 0000000..e8b4d6f --- /dev/null +++ b/include/cam_file.h @@ -0,0 +1,88 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include "cam.h" +#define INTERNAL_FILE_PATH "/opt/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 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_image_name.h b/include/cam_image_name.h new file mode 100755 index 0000000..e50ee7c --- /dev/null +++ b/include/cam_image_name.h @@ -0,0 +1,77 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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_image_name_H_ +#define __DEF_cam_image_name_H_ +#include "cam_app.h" + + +/* Timer */ +#define TIMER_OFF_NORMAL_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_off_nor.png" +#define TIMER_OFF_RESS_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_off_press.png" +#define TIMER_OFF_DIM_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_off_dim.png" +#define TIMER_2SEC_NORMAL_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_2_nor.png" +#define TIMER_2SEC_RESS_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_2_press.png" +#define TIMER_2SEC_DIM_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_2_dim.png" +#define TIMER_5SEC_NORMAL_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_5_nor.png" +#define TIMER_5SEC_RESS_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_5_press.png" +#define TIMER_5SEC_DIM_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_5_dim.png" +#define TIMER_10SEC_NORMAL_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_10_nor.png" +#define TIMER_10SEC_RESS_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_10_press.png" +#define TIMER_10SEC_DIM_ICON CAM_IMAGE_PATH"short cut/camera_mode_timer_10_dim.png" + +/* Effect */ +#define EFFECTS_ICON CAM_IMAGE_PATH"short cut/camera_mode_effect_%s_%s.png" + +/* Guide lines */ +#define GUIDELINE_ON_NORMAL_ICON CAM_IMAGE_PATH"short cut/camera_mode_guidelines_on_nor.png" +#define GUIDELINE_ON_PRESS_ICON CAM_IMAGE_PATH"short cut/camera_mode_guidelines_on_press.png" +#define GUIDELINE_ON_DIM_ICON CAM_IMAGE_PATH"short cut/camera_mode_guidelines_on_dim.png" +#define GUIDELINE_OFF_NORMAL_ICON CAM_IMAGE_PATH"short cut/camera_mode_guidelines_off_nor.png" +#define GUIDELINE_OFF_PRESS_ICON CAM_IMAGE_PATH"short cut/camera_mode_guidelines_off_press.png" +#define GUIDELINE_OFF_DIM_ICON CAM_IMAGE_PATH"short cut/camera_mode_guidelines_off_dim.png" + +/* Reset setting */ +#define RESET_SETTING_NORMAL_ICON CAM_IMAGE_PATH"short cut/camera_mode_reset_nor.png" +#define RESET_SETTING_PRESS_ICON CAM_IMAGE_PATH"short cut/camera_mode_reset_press.png" + +/* Setting */ +#define SETTING_NORMAL_ICON CAM_IMAGE_PATH"short cut/camera_mode_setting_nor.png" +#define SETTING_PRESS_ICON CAM_IMAGE_PATH"short cut/camera_mode_setting_press.png" + +/* Indicator */ +#define INDICATOR_BATTERY_LEVEL_00_ICON CAM_IMAGE_PATH"indicator/camera_indicator_battery_00.png" +#define INDICATOR_BATTERY_LEVEL_01_ICON CAM_IMAGE_PATH"indicator/camera_indicator_battery_01.png" +#define INDICATOR_BATTERY_LEVEL_02_ICON CAM_IMAGE_PATH"indicator/camera_indicator_battery_02.png" +#define INDICATOR_BATTERY_LEVEL_03_ICON CAM_IMAGE_PATH"indicator/camera_indicator_battery_03.png" +#define INDICATOR_BATTERY_LEVEL_04_ICON CAM_IMAGE_PATH"indicator/camera_indicator_battery_04.png" +#define INDICATOR_BATTERY_LEVEL_05_ICON CAM_IMAGE_PATH"indicator/camera_indicator_battery_05.png" +#define INDICATOR_BATTERY_FULL_ICON CAM_IMAGE_PATH"indicator/camera_indicator_battery_full.png" +#define INDICATOR_BATTERY_CHARGE_ICON CAM_IMAGE_PATH"indicator/camera_indicator_battery_charge.png" + +/* Shutter icon */ +#define CAMERA_SHUTTER_ICON CAM_IMAGE_PATH"camera_mode_shutter_icon.png" +#define CAMCORDER_SHUTTER_ICON CAM_IMAGE_PATH"camcorder_standby_shutter.png" + +/* Mode icon */ +#define MODE_CAMERA_ON_ICON CAM_IMAGE_PATH"tmp/11_camera_mode_camera_on.png" +#define MODE_CAMERA_OFF_ICON CAM_IMAGE_PATH"tmp/11_camera_mode_camera_off.png" +#define MODE_CAMCORDER_ON_ICON CAM_IMAGE_PATH"tmp/11_camera_mode_camcorder_on.png" +#define MODE_CAMCORDER_OFF_ICON CAM_IMAGE_PATH"tmp/11_camera_mode_camcorder_off.png" + + +#endif diff --git a/include/cam_long_press.h b/include/cam_long_press.h new file mode 100644 index 0000000..e852c17 --- /dev/null +++ b/include/cam_long_press.h @@ -0,0 +1,42 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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..8869c22 --- /dev/null +++ b/include/cam_menu_composer.h @@ -0,0 +1,30 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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(cam_menu_composer* composer); +void cam_compose_menu_effect(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..2543dc3 --- /dev/null +++ b/include/cam_mm.h @@ -0,0 +1,170 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include +#include +#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) {\ + printf("[%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_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); + +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_set_fps(camera_attr_fps_e 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_effect(int *value); +gboolean cam_mm_set_effect(int value); +gboolean cam_mm_set_audio_recording(gboolean b_on); +gboolean cam_mm_get_image_count(int *value); +gboolean cam_mm_set_image_count(int value); +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_size(int *value); +gboolean cam_mm_get_max_time(int *value); +gboolean cam_mm_set_max_size(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 format, 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_get_video_source_format(const char *attribute_name, + int *format); + +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); + +gint cam_mm_realize(void); +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_set_capturing_cb(camera_capturing_cb capture_cb, void *data); +gboolean cam_mm_unset_capturing_cb(void); + +gboolean cam_mm_set_capture_completed_cb(camera_capture_completed_cb capture_completed_cb, void *data); +gboolean cam_mm_unset_capture_completed_cb(void); + + +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); + +#ifdef ENABLE_CAPTURE_ANIMATION +gboolean cam_mm_get_screennail(MMCamcorderCaptureDataType **scrnl); +#endif + +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(); + +#endif /* CAM_MM_H_ */ diff --git a/include/cam_popup.h b/include/cam_popup.h new file mode 100644 index 0000000..d342b05 --- /dev/null +++ b/include/cam_popup.h @@ -0,0 +1,76 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +#include + +/* 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_progress_popup_create(void *data); +gboolean cam_progress_popup_set_text(void *data, char *text); +gboolean cam_progress_popup_set_bar_value(void *data, double value); +gboolean cam_progress_popup_delete(void *data); + +#endif diff --git a/include/cam_property.h b/include/cam_property.h new file mode 100755 index 0000000..28586c3 --- /dev/null +++ b/include/cam_property.h @@ -0,0 +1,598 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 +/*#include */ +#include +#include +#include +#include + +#define USE_CAM_STORAGE_SETTING +#define CAPI_CAMERA_NEW + +//#define PREVIEW_PINCH_ENALBE +#define GUIDE_LINE_ENALBE +#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 FRONT_CAM_W (352) +#define FRONT_CAM_H (288) + +#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_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_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 AUL */ +#define CAM_CAPTURE_RES_BIG "BIG" /* 8M */ +#define CAM_CAPTURE_RES_BIG_WIDE "BIG_WIDE" /* 5M wide */ +#define CAM_CAPTURE_RES_MIDDLE "MIDDLE" /* 3M */ +#define CAM_CAPTURE_RES_MIDDLE_WIDE "MIDDLE_WIDE" /* 3M wide */ +#define CAM_CAPTURE_RES_SMALL "SMALL" /* 1M */ +#define CAM_CAPTURE_RES_SMALL_WIDE "SMALL_WIDE" /* 1M wide */ +#define CAM_CAPTURE_RES_VGA "VGA" + +#define CAM_RECORDING_RES_HD "HD" +#define CAM_RECORDING_RES_VGA "VGA" +#define CAM_RECORDING_RES_QCIF "QCIF" + +#define CAM_SETTINGS_RESOLUTION_NUMS 14 +#define CAM_RESOULUTION_NUMS 6 +#define CAMCORDER_RESOULUTION_NUMS 6 + +#define CAM_PREVIEW_FORMAT MM_PIXEL_FORMAT_UYVY /* UYVY */ +#define CAM_RAW_CAPTURE_FORMAT MM_PIXEL_FORMAT_UYVY /* UYVY */ + +#define CAM_MM_ZOOM_MAX (30) +#define CAM_MM_ZOOM_MIN (10) +#define CAM_MM_ZOOM_INTERVAL (2) + +#define CAM_REC_NORMAL_MAX_SIZE (2*1024*1024) /* kbyte */ +#define CAM_REC_MMS_MAX_SIZE (295) /* kbyte */ + +#define STILL_MINIMAL_SPACE (100*1024) /* byte */ +#define REC_NORMAL_MIN_SPACE (1024*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 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 (180.0) /* No input for 1 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 RESOLUTION_DEFAULT CAM_RESOLUTION_VGA +#define REC_RESOLUTION_DEFAULT CAM_RESOLUTION_VGA +#define IMAGE_RESOLUTION_DEFAULT CAM_RESOLUTION_3264x2448 +#define EFFECT_DEFAULT CAM_SETTINGS_EFFECTS_NOR +#define AF_DEFAULT CAM_FOCUS_AUTO +#define FLASH_DEFAULT CAM_FLASH_OFF +#ifdef GUIDE_LINE_ENALBE +#define GUIDE_LINE_DEFAULT FALSE +#endif +#define REC_FLASH_DEFAULT CAM_FLASH_OFF +#define TIMER_DEFAULT CAM_SETTINGS_TIMER_OFF +#define ZOOM_DEFAULT (10) +#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 BATTERY_LEVEL_DEFAULT 5 +#define REC_SIZE_LIMIT_DEFAULT CAM_REC_NORMAL_MAX_SIZE +#define SHUTTER_SOUND_DEFAULT CAM_SETTINGS_SOUND_1 +#define SOUND_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) + + +typedef struct _cam_rectangle CamRectangle; + +struct _cam_rectangle { + int x, y, width, height; +}; + +/* face */ +typedef struct _cam_face_data CamFaceData; +struct _cam_face_data { + CamRectangle *pFaceRect; + int nFace; /* face count. */ + int faceOrient; /* the face angle 1:0angle 2:90angle, 3:270 angle */ +}; + +/* Eyes */ +typedef struct _cam_eyes_data CamEyesData; +struct _cam_eyes_data { + CamRectangle *pEyesRect; + int *nClosedEyesFlag; /* true is closed eyes otherwise false */ + int nEyes; +}; + +typedef struct _cam_exe_args CamExeArgs; +struct _cam_exe_args { + int cam_mode; + int resolution; + int width; + int height; + int size_limit; + gboolean review; + char *caller; +}; + +enum _CamAppProperty { + PROP_MODE, + PROP_SHOT_MODE, + PROP_REC_MODE, + PROP_RESOLUTION, + PROP_FPS, + PROP_EFFECT, + PROP_AF_MODE, + PROP_FLASH, + PROP_TIMER, + PROP_IMAGE_QUALITY, + PROP_VIDEO_QUALITY, + PROP_AUDIO_REC, + PROP_AUDIO_QUALITY, + PROP_BATTERY_LEVEL, + PROP_BATTERY_CHARG, + PROP_ZOOM, + PROP_STORAGE, + PROP_GUIDELINE, + PROP_REVIEW, + PROP_IMAGE_COUNT, + PROP_SHUTTER_SOUND, + PROP_SIZE_LIMIT, + PROP_SIZE_LIMIT_TYPE, + PROP_REC_TIME, + PROP_REC_FILE_SIZE, + + PROP_NUMS +}; + +#define PROP_MODE_NAME "mode" +#define PROP_SHOT_MODE_NAME "shot_mode" +#define PROP_REC_MODE_NAME "rec_mode" +#define PROP_RESOLUTION_NAME "resolution" +#define PROP_FPS_NAME "fps" +#define PROP_EFFECT_NAME "effect" +#define PROP_AF_NAME "af_mode" +#define PROP_FLASH_NAME "flash" +#define PROP_TIMER_NAME "timer" +#define PROP_IMAGE_QUALITY_NAME "image_quality" +#define PROP_VIDEO_QUALITY_NAME "video_quality" +#define PROP_AUDIO_REC_NAME "audio_rec" +#define PROP_AUDIO_QUALITY_NAME "audio_quality" +#define PROP_BATTERY_LEVEL_NAME "battery_level" +#define PROP_ZOOM_NAME "zoom" +#define PROP_STORAGE_NAME "storage" +#define PROP_GUIDELINE_NAME "guideline" +#define PROP_REVIEW_NAME "review" +#define PROP_IMAGE_COUNT_NAME "image_cnt" +#define PROP_SHUTTER_SOUND_NAME "shutter_sound" +#define PROP_SIZE_LIMIT_NAME "size_limit" +#define PROP_SIZE_LIMIT_TYPE_NAME "size_limit_type" + +#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" + + +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; + + +/* storage */ +#define CAM_STORAGE_NUMS 3 + +typedef enum __CAM_MENU_ITEM{ + CAM_MENU_EMPTY = -1, + CAM_MENU_SHORTCUTS = 0, + CAM_MENU_TIMER, + CAM_MENU_EFFECTS, + CAM_MENU_GUIDELINES, + CAM_MENU_RESET, + CAM_MENU_EFFECT_NONE, + CAM_MENU_EFFECT_NEGATIVE, + CAM_MENU_EFFECT_BLACKANDWHITE, + CAM_MENU_EFFECT_SEPIA, + 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_QUICKVIEW, + + CAM_TOOLBAR_BUTTON_NUM, +} CamToolbarButton; + +typedef enum _CamShotMode { + CAM_SINGLE_MODE, + CAM_SELF_MODE, /*remove it*/ + CAM_SHOT_MODE_NUMS +} CamShotMode; + +enum _CamRecordMode { + CAM_RECORD_NORMAL, + CAM_RECORD_MMS, + CAM_RECORD_MODE_NUMS, + CAM_RECORD_SELF, + CAM_RECORD_SELF_MMS, +}; + +#define CAM_FLASH_NUMS 4 +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; + +#define CAM_FOCUS_NUMS 3 +typedef enum _CamFocusMode { + CAM_FOCUS_AUTO = CAMERA_ATTR_AF_NORMAL, + CAM_FOCUS_MACRO = CAMERA_ATTR_AF_MACRO, + CAM_FOCUS_CAF = CAMERA_ATTR_AF_FULL, +} 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 _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; + + +/*#define CAM_SETTINGS_EFFECTS_NUMS 26*/ +#define CAM_SETTINGS_EFFECTS_NUMS 4 + +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_SOLAR_1 = 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_ACCENT, */ + /*CAM_SETTINGS_EFFECTS_SWAP, */ +} CamSettingsEffects; + +enum _CamMMSizeLimit { + CAM_MM_SIZE_LIMIT_TYPE_BYTE, + CAM_MM_SIZE_LIMIT_TYPE_SECOND, +}; + +#define CAM_QUALITY_NUMS 3 +enum _CamQuality { + CAM_QUALITY_BEST = 100, + CAM_QUALITY_HIGH = 95, /* still only */ + CAM_QUALITY_MEDIUM = 80, + CAM_QUALITY_LOW = 65, +}; + +#define CAM_SETTINGS_SOUND_NUMS 4 +enum _CamSound { + CAM_SETTINGS_SOUND_OFF = -1, + CAM_SETTINGS_SOUND_1, + CAM_SETTINGS_SOUND_2, + CAM_SETTINGS_SOUND_3, +}; + +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_MAX +} CamZoomValue; + +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 _CamLaunchType { + CAM_LAUNCH_FIRST = 0, + CAM_LAUNCH_RELAUNCH, + CAM_LAUNCH_IS_ALREADY_RUNNING, +} CamLaunchType; + +typedef enum _CamAppCoreState { + CAM_APPCORE_PAUSE_STATE = 1, + CAM_APPCORE_RESUME_STATE, + CAM_APPCORE_RESET_STATE, + CAM_APPCORE_TERMINATE_STATE, +} CamAppCoreState; + +typedef enum _CamFoucusMode { + CAM_FOCUS_MODE_TOUCH_AUTO = 0, + CAM_FOCUS_MODE_CONTINUOUS = 1, +} CamAppFocusMode; + +typedef struct __ShortCutData { + /*fixed*/ + Evas_Object *icon; + Evas_Object_Event_Cb func; + CAM_MENU_ITEM setting_type; + char *icon_filepath; + char *name_line_1; + char *name_line_2; + /*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; + /*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; + +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_ROTATE_ANIMATOR, /*rotate target, start rotate icons*/ + CAM_MAIN_PIPE_OP_TYPE_MAX_NUM, +}; /*note: this define for main pipe operation type*/ + +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; + + +#endif /* __DEF_CAM_PROPERTY_H_ */ diff --git a/include/cam_rec.h b/include/cam_rec.h new file mode 100644 index 0000000..4ec2009 --- /dev/null +++ b/include/cam_rec.h @@ -0,0 +1,44 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 */ +#include +/* #include */ +#include +#include +#include +/*#include */ + +#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); + +#endif diff --git a/include/cam_sound.h b/include/cam_sound.h new file mode 100644 index 0000000..33a4e1d --- /dev/null +++ b/include/cam_sound.h @@ -0,0 +1,56 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 + +#define SOUND_PATH "/opt/apps/org.tizen.camera-app/res/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 100644 index 0000000..87401c8 --- /dev/null +++ b/include/cam_ta.h @@ -0,0 +1,112 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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..9ddd328 --- /dev/null +++ b/include/cam_typeconverter.h @@ -0,0 +1,40 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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_effect_dev_convert_caps(camera_attr_effect_mode_e effect); +unsigned int cam_effect_cam_convert_caps(CamSettingsEffects effect); + +#ifdef _cplusplus +} +#endif + + + +#endif /* CAM_TYPECONVERTER_H_ */ diff --git a/include/cam_ui_effect_utils.h b/include/cam_ui_effect_utils.h new file mode 100644 index 0000000..03227f4 --- /dev/null +++ b/include/cam_ui_effect_utils.h @@ -0,0 +1,80 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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); + +#endif /* __H_CAM_UI_EFFECT_UTILS_H__ */ +//end file diff --git a/include/cam_ui_rotate_utils.h b/include/cam_ui_rotate_utils.h new file mode 100644 index 0000000..ee591df --- /dev/null +++ b/include/cam_ui_rotate_utils.h @@ -0,0 +1,101 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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/camera_utils.h b/include/camera_utils.h new file mode 100755 index 0000000..63e189d --- /dev/null +++ b/include/camera_utils.h @@ -0,0 +1,147 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 + +#include "cam.h" + +typedef unsigned char byte; + + +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); + + +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); + +int cam_utils_captured_image_select(void *data, const char *file_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); + + +#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..ce51246 --- /dev/null +++ b/include/edc-callback/cam_common_edc_callback.h @@ -0,0 +1,33 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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(int menu_type, int item); +int cam_get_value_to_index(int menu_type, int value); +int cam_convert_menu_item_to_mmfw_value(int mode); +int cam_convert_effect_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(Evas_Object *edje, Evas_Object *parent); +int shot_mode_set(void *data, int mode); +#endif /* __DEF_camera_common_edc_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..6134ab2 --- /dev/null +++ b/include/edc-callback/cam_indicator_edc_callback.h @@ -0,0 +1,28 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 indicator_toggle(struct appdata *ad, gboolean hide); +void indicator_update_battery(struct appdata *ad, int level); +void load_setting_values(struct appdata *ad); + +#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 100644 index 0000000..0e347b1 --- /dev/null +++ b/include/edc-callback/cam_recording_edc_callback.h @@ -0,0 +1,28 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 100644 index 0000000..e763b77 --- /dev/null +++ b/include/edc-callback/cam_toolbar_edc_callback.h @@ -0,0 +1,69 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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" +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 +void cam_toolbar_and_setting_popup_del(void *data); +void toolbar_destroy_setting_popup(struct appdata *ad); +int cam_toolbar_setting_popup_create(struct appdata *ad); +int cam_toolbar_setting_popup_delayed_create(struct appdata *ad); +void toolbar_hide_setting_popup(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(); +gboolean cam_setting_toolbar_execution_time_checker_remove(struct appdata + *ad); +Eina_Bool cam_setting_toolbar_execution_time_checker_cb(void *data); +gboolean cam_setting_toolbar_execution_time_checker_start(struct appdata *ad); +gboolean cam_setting_toolbar_execution_time_checker_update(struct appdata *ad); +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); +#ifdef GUIDE_LINE_ENALBE +int cam_guideline_rotate(struct appdata *ad); +void settings_guideline_refresh(struct appdata *ad); +#endif +void toolbar_destroy_shortcuts_popup(struct appdata *ad); + +#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..86f057a --- /dev/null +++ b/include/edc-callback/cam_zoom_edc_callback.h @@ -0,0 +1,37 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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" + +typedef struct _CamCapsRange { + int min; + int max; + int def_val; + unsigned int step; +} CamCapsRange; + +int zoom_in(struct appdata *ad, gboolean zoom_in); +#ifdef PREVIEW_PINCH_ENALBE +gboolean cam_pinch_zoom_in(struct appdata* ad,gboolean is_zoom_in,int zoom_value); +#endif +gboolean load_zoom_edje(struct appdata *ad); +gboolean update_zoom_edje(struct appdata *ad); +gboolean unload_zoom_edje(struct appdata *ad); +#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..6995ca6 --- /dev/null +++ b/include/edc_image_name.h @@ -0,0 +1,106 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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" + +/** 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_VER_IMAGE "vertical/camera_mode_shutter_normal_ver.png" +#define SHUTTER_PRESS_IMAGE "camera_mode_shutter_press.png" +#define SHUTTER_PRESS_VER_IMAGE "vertical/camera_mode_shutter_press_ver.png" +#define CAMERA_SHUTTER_ICON_IMAGE "camera_mode_shutter_icon.png" +#define CAMCORDER_SHUTTER_ICON_IMAGE "camcorder_standby_shutter.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_icon_back.png" +#define BACK_BUTTON_PRESS_IMAGE "camara_icon_back_press.png" + +/** cam_util.edj **/ +#define FOCUS_GUIDE_NOTREADY_IMAGE "Touch AF_rect/camera_focus_notready.png" +#define FOCUS_GUIDE_FOCUSED_IMAGE "Touch AF_rect/camera_ready.png" +#define FOCUS_GUIDE_FAILED_IMAGE "Touch AF_rect/camera_focus_fail.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" + +/* 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" + +/** 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 "tmp/imageeditor_left_arrow.png" +#define CTXPOPUP_RIGHTT_ARROW_IMAGE "tmp/imageeditor_right_arrow.png" +#define CTXPOPUP_TOP_ARROW_IMAGE "tmp/imageeditor_top_arrow.png" +#define CTXPOPUP_BOTTOM_ARROW_IMAGE "tmp/imageeditor_bottom_arrow.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" + +#endif diff --git a/include/edc_string.h b/include/edc_string.h new file mode 100755 index 0000000..181382d --- /dev/null +++ b/include/edc_string.h @@ -0,0 +1,109 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.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 ENABLE_HAPTIC 0 + +/* #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 128 +#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_BATTERY "INDICATOR_BATTERY" +#define INDI_REC_BATTERY "INDI_REC_BATTERY" + +/* recording */ +#define RECORDING_IMAGE "recording_image" +#define RECORDING_TEXT "recording_text" +#define RECORDING_LEFT_TEXT "recording_left_text" + +#define RECORDING_STOP_BUTTON "recording_stop_button" + +#define REC_PAUSE "rec_pause" +#define REC_REC "rec_rec" +#define REC_STOP "rec_stop" +#define REC_REC_SIG "rec_rec_sig" +#define REC_PAUSE_SIG "rec_pause_sig" +#define REC_STOP_SIG "rec_stop_sig" +#define REC_SIG_SRC "rec_sig_src" + +/* 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/org.tizen.camera-app.png b/org.tizen.camera-app.png new file mode 100644 index 0000000000000000000000000000000000000000..4937f45bf4b5562b44220a908c8b604984c9974c GIT binary patch literal 10899 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 pH;yB#6$o9002ovPDHLkV1m|rEKdLc literal 0 HcmV?d00001 diff --git a/org.tizen.camera-app.xml b/org.tizen.camera-app.xml new file mode 100644 index 0000000..f6ef370 --- /dev/null +++ b/org.tizen.camera-app.xml @@ -0,0 +1,30 @@ + + + + Hyunho Seo + Camera Application + + + org.tizen.camera-app.png + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/org.tizen.camera.jpg b/org.tizen.camera.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8ebc88679fae6fe69001993c1b0f6f18162e942 GIT binary patch literal 31892 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 TuE@0M*7cJM$0z, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-02-23 11:01+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: camera.c:35 +msgid "IDS_COM_BODY_CAMERA" +msgstr "Camera" + +#: camera.c:36 +msgid "Click to exit" +msgstr "Click to exit" + +#: camera.c:224 +msgid "IDS_COM_BODY_LOW_BATTERY" +msgstr "Low battery" + +#: cam_app.c:4904 +msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA" +msgstr "Unable to start Camera" + +#: cam_app.c:4906 +msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN" +msgstr "Capture time exceeded.
    Start again" + +#: cam_app.c:7315 +msgid "IDS_COM_SK_OK" +msgstr "OK" + +#: cam_app.c:7337 +msgid "IDS_COM_SK_YES" +msgstr "Yes" + +#: cam_app.c:7337 +msgid "IDS_COM_SK_NO" +msgstr "No" + +#: cam_app.c:7973 edc-callback/cam_settings_edc_callback.c:1818 +#: edc-callback/cam_settings_storage_callback.c:258 +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "My device" + +#: cam_app.c:8055 +msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "" +"Please wait while creating\n" +" panorama" + +#: edc-callback/cam_toolbar_edc_callback.c:437 +msgid "IDS_mode_change" +msgstr "mode change" + +#: edc-callback/cam_toolbar_edc_callback.c:440 +msgid "IDS_shot_mode" +msgstr "shot mode" + +#: edc-callback/cam_toolbar_edc_callback.c:443 +msgid "IDS_scene_mode" +msgstr "scene_mode" + +#: edc-callback/cam_toolbar_edc_callback.c:446 +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Settings" + +#: edc-callback/cam_toolbar_edc_callback.c:449 +msgid "IDS_CAM_BODY_BACK_ABB" +msgstr "Back" + +#: edc-callback/cam_toolbar_edc_callback.c:452 +msgid "IDS_CAM_BODY_FLASH" +msgstr "Flash" + +#: edc-callback/cam_toolbar_edc_callback.c:455 +#: edc-callback/cam_brightness_edc_callback.c:346 +msgid "IDS_CAM_BODY_BRIGHTNESS" +msgstr "Brightness" + +#: edc-callback/cam_toolbar_edc_callback.c:458 +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Quickview" + +#: edc-callback/cam_shot_mode_edc_callback.c:679 +#: edc-callback/cam_settings_edc_callback.c:114 +#: edc-callback/cam_settings_edc_callback.c:137 +#: edc-callback/cam_settings_edc_callback.c:1502 +#: edc-callback/cam_settings_edc_callback.c:1653 +#: edc-callback/cam_settings_effects_callback.c:592 +#: edc-callback/cam_settings_metering_callback.c:30 +#: edc-callback/cam_settings_metering_callback.c:262 +#: edc-callback/cam_settings_quality_callback.c:277 +msgid "IDS_CAM_BODY_NORMAL" +msgstr "Normal" + +#: edc-callback/cam_shot_mode_edc_callback.c:680 +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +#: edc-callback/cam_shot_mode_edc_callback.c:694 +msgid "IDS_CAM_BODY_SINGLE" +msgstr "Single" + +#: edc-callback/cam_shot_mode_edc_callback.c:695 +msgid "IDS_CAM_BODY_CONTINUOUS" +msgstr "Continuous" + +#: edc-callback/cam_shot_mode_edc_callback.c:696 +msgid "IDS_CAM_BODY_MOSAIC" +msgstr "Mosaic" + +#: edc-callback/cam_shot_mode_edc_callback.c:697 +msgid "IDS_CAM_BODY_FRAME" +msgstr "Frame" + +#: edc-callback/cam_shot_mode_edc_callback.c:698 +msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA" +msgstr "Panorama" + +#: edc-callback/cam_shot_mode_edc_callback.c:699 +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Self-shot" + +#: edc-callback/cam_shot_mode_edc_callback.c:700 +msgid "IDS_CAM_BODY_SMILE" +msgstr "Smile" + +#: edc-callback/cam_shot_mode_edc_callback.c:701 +msgid "IDS_CAM_BODY_SLOW_MOTION" +msgstr "Slow motion" + +#: edc-callback/cam_shot_mode_edc_callback.c:702 +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Beauty shot" + +#: edc-callback/cam_shot_mode_edc_callback.c:703 +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintage" + +#: edc-callback/cam_scene_edc_callback.c:109 +#: edc-callback/cam_scene_edc_callback.c:647 +msgid "IDS_CAM_BODY_NONE" +msgstr "None" + +#: edc-callback/cam_scene_edc_callback.c:110 +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "User mode" + +#: edc-callback/cam_scene_edc_callback.c:116 +#: edc-callback/cam_scene_edc_callback.c:648 +msgid "IDS_CAM_BODY_SCENEMODE_FALL_COLOR" +msgstr "Fall colour" + +#: edc-callback/cam_scene_edc_callback.c:117 +msgid "IDS_Takes_pictures_in_fall" +msgstr "Take pictures in fall" + +#: edc-callback/cam_scene_edc_callback.c:123 +#: edc-callback/cam_scene_edc_callback.c:649 +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Dusk/Dawn" + +#: edc-callback/cam_scene_edc_callback.c:124 +msgid "IDS_CAM_BODY_TAKES_PICTURES_OF_SUNSETS_OR_DAWN" +msgstr "" +"Takes pictures of sunsets\n" +" or dawn" + +#: edc-callback/cam_scene_edc_callback.c:130 +#: edc-callback/cam_scene_edc_callback.c:650 +msgid "IDS_CAM_BODY_CANDLELIGHT" +msgstr "Candlelight" + +#: edc-callback/cam_scene_edc_callback.c:131 +msgid "IDS_CAM_BODY_HELPTEXT_SCENE_MODE_CANDLE_LIGHT_MSG" +msgstr "Scenes under candlelight" + +#: edc-callback/cam_scene_edc_callback.c:137 +#: edc-callback/cam_scene_edc_callback.c:651 +msgid "IDS_CAM_OPT_BEACH_SNOW_ABB" +msgstr "Beach snow" + +#: edc-callback/cam_scene_edc_callback.c:138 +msgid "IDS_CAM_BODY_TAKES_OCEAN_LAKE_BEACH_AND_SNOWSCAPE" +msgstr "" +"Takes ocean, lake, beach\n" +" and snowscape" + +#: edc-callback/cam_scene_edc_callback.c:144 +#: edc-callback/cam_scene_edc_callback.c:652 +msgid "IDS_CAM_BODY_AGAINST_LIGHT" +msgstr "Against light" + +#: edc-callback/cam_scene_edc_callback.c:145 +msgid "IDS_CAM_BODY_TAKES_PORTRAIT_WITHOUT_SHADOWS_CAUSED_BY_BACKLIGHT" +msgstr "" +"Takes portrait without\n" +" shadows caused by backlight" + +#: edc-callback/cam_scene_edc_callback.c:151 +#: edc-callback/cam_scene_edc_callback.c:653 +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Landscape" + +#: edc-callback/cam_scene_edc_callback.c:152 +msgid "IDS_CAM_BODY_TAKES_PICTURE_OF_DISTANT_SCENERY" +msgstr "Takes picture of distant scenery" + +#: edc-callback/cam_scene_edc_callback.c:158 +#: edc-callback/cam_scene_edc_callback.c:654 +msgid "IDS_CAM_BODY_NIGHT" +msgstr "Night" + +#: edc-callback/cam_scene_edc_callback.c:159 +msgid "IDS_CAM_BODY_TAKES_STIIL_IMAGE_AT_NIGHT_OR_IN_OTHER_DARK_CONDITIONS" +msgstr "Takes still-image at night or in other dark conditions" + +#: edc-callback/cam_settings_edc_callback.c:86 +#: edc-callback/cam_settings_edc_callback.c:103 +#: edc-callback/cam_settings_edc_callback.c:126 +#: edc-callback/cam_flash_edc_callback.c:308 +#: edc-callback/cam_settings_wb_callback.c:593 +#: edc-callback/cam_settings_iso_callback.c:299 +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto" + +#: edc-callback/cam_settings_edc_callback.c:87 +#: edc-callback/cam_focus_edc_callback.c:255 +msgid "IDS_CAM_BODY_MACRO" +msgstr "Macro" + +#: edc-callback/cam_settings_edc_callback.c:88 +#: edc-callback/cam_focus_edc_callback.c:256 +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Face detection" + +#: edc-callback/cam_settings_edc_callback.c:95 +#: edc-callback/cam_settings_edc_callback.c:1790 +#: edc-callback/cam_flash_edc_callback.c:306 +#: edc-callback/cam_settings_timer_callback.c:273 +#: edc-callback/cam_settings_sound_callback.c:287 +msgid "IDS_CAM_BODY_OFF" +msgstr "Off" + +#: edc-callback/cam_settings_edc_callback.c:96 +#: edc-callback/cam_settings_timer_callback.c:274 +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sec" + +#: edc-callback/cam_settings_edc_callback.c:97 +#: edc-callback/cam_settings_timer_callback.c:275 +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sec" + +#: edc-callback/cam_settings_edc_callback.c:98 +#: edc-callback/cam_settings_timer_callback.c:276 +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sec" + +#: edc-callback/cam_settings_edc_callback.c:104 +#: edc-callback/cam_settings_wb_callback.c:594 +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Daylight" + +#: edc-callback/cam_settings_edc_callback.c:105 +#: edc-callback/cam_settings_wb_callback.c:595 +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Cloudy" + +#: edc-callback/cam_settings_edc_callback.c:106 +#: edc-callback/cam_settings_wb_callback.c:596 +msgid "IDS_Tungsten" +msgstr "Tungsten" + +#: edc-callback/cam_settings_edc_callback.c:107 +#: edc-callback/cam_settings_wb_callback.c:597 +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescent" + +#: edc-callback/cam_settings_edc_callback.c:108 +#: edc-callback/cam_settings_wb_callback.c:598 +msgid "IDS_CAM_BODY_SHADE" +msgstr "Shade" + +#: edc-callback/cam_settings_edc_callback.c:109 +#: edc-callback/cam_settings_wb_callback.c:599 +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizon" + +#: edc-callback/cam_settings_edc_callback.c:115 +#: edc-callback/cam_settings_effects_callback.c:593 +msgid "IDS_CAM_BODY_ACCENT" +msgstr "Accent" + +#: edc-callback/cam_settings_edc_callback.c:116 +#: edc-callback/cam_settings_effects_callback.c:594 +msgid "IDS_CAM_BODY_SWAP" +msgstr "Swap" + +#: edc-callback/cam_settings_edc_callback.c:117 +#: edc-callback/cam_settings_effects_callback.c:595 +msgid "IDS_CAM_BODY_NEGATIVE" +msgstr "Negative" + +#: edc-callback/cam_settings_edc_callback.c:118 +#: edc-callback/cam_settings_effects_callback.c:596 +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Black and white" + +#: edc-callback/cam_settings_edc_callback.c:119 +#: edc-callback/cam_settings_effects_callback.c:597 +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +#: edc-callback/cam_settings_edc_callback.c:120 +#: edc-callback/cam_settings_effects_callback.c:598 +msgid "IDS_CAM_BODY_BLUE" +msgstr "Blue" + +#: edc-callback/cam_settings_edc_callback.c:121 +#: edc-callback/cam_settings_effects_callback.c:599 +msgid "IDS_CAM_BODY_RED" +msgstr "Red" + +#: edc-callback/cam_settings_edc_callback.c:138 +#: edc-callback/cam_settings_metering_callback.c:31 +#: edc-callback/cam_settings_metering_callback.c:263 +msgid "IDS_CAM_BODY_SPOT" +msgstr "Spot" + +#: edc-callback/cam_settings_edc_callback.c:139 +#: edc-callback/cam_settings_metering_callback.c:32 +#: edc-callback/cam_settings_metering_callback.c:264 +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Centre-weighted" + +#: edc-callback/cam_settings_edc_callback.c:991 +#: edc-callback/cam_settings_edc_callback.c:993 +#: edc-callback/cam_settings_edc_callback.c:1036 +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Image quality" + +#: edc-callback/cam_settings_edc_callback.c:1007 +#: edc-callback/cam_settings_edc_callback.c:1009 +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Video quality" + +#: edc-callback/cam_settings_edc_callback.c:1027 +msgid "IDS_CAM_BODY_DETAILS_RESOLUTION" +msgstr "Resolution" + +#: edc-callback/cam_settings_edc_callback.c:1028 +msgid "IDS_CAM_BODY_TIMER" +msgstr "Timer" + +#: edc-callback/cam_settings_edc_callback.c:1029 +msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB" +msgstr "White balance" + +#: edc-callback/cam_settings_edc_callback.c:1030 +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Focus" + +#: edc-callback/cam_settings_edc_callback.c:1031 +msgid "IDS_CAM_BODY_EFFECTS" +msgstr "Effects" + +#: edc-callback/cam_settings_edc_callback.c:1032 +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +#: edc-callback/cam_settings_edc_callback.c:1033 +msgid "IDS_CAM_BODY_METERING" +msgstr "Metering" + +#: edc-callback/cam_settings_edc_callback.c:1034 +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Anti-Shake" + +#: edc-callback/cam_settings_edc_callback.c:1035 +msgid "IDS_CAM_BODY_WIDE_DYNAMIC_RANGE" +msgstr "Wide dynamic range" + +#: edc-callback/cam_settings_edc_callback.c:1037 +msgid "IDS_Adjusting" +msgstr "Adjusting" + +#: edc-callback/cam_settings_edc_callback.c:1499 +#: edc-callback/cam_settings_edc_callback.c:1650 +#: edc-callback/cam_settings_quality_callback.c:276 +msgid "IDS_CAM_BODY_HIGH" +msgstr "High" + +#: edc-callback/cam_settings_edc_callback.c:1505 +#: edc-callback/cam_settings_edc_callback.c:1656 +#: edc-callback/cam_settings_quality_callback.c:278 +msgid "IDS_CAM_BODY_ECONOMY" +msgstr "Economy" + +#: edc-callback/cam_settings_edc_callback.c:1690 +#: edc-callback/cam_settings_edc_callback.c:1693 +#: edc-callback/cam_settings_edc_callback.c:1849 +msgid "IDS_CAM_BODY_GPS_CONNECTION" +msgstr "GPS connection" + +#: edc-callback/cam_settings_edc_callback.c:1703 +#: edc-callback/cam_settings_edc_callback.c:1706 +#: edc-callback/cam_settings_edc_callback.c:1848 +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Review screen" + +#: edc-callback/cam_settings_edc_callback.c:1720 +#: edc-callback/cam_settings_edc_callback.c:1723 +#: edc-callback/cam_settings_edc_callback.c:1733 +#: edc-callback/cam_settings_edc_callback.c:1736 +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Audio recording" + +#: edc-callback/cam_settings_edc_callback.c:1766 +#: edc-callback/cam_settings_edc_callback.c:1769 +#: edc-callback/cam_settings_edc_callback.c:1850 +msgid "IDS_CAM_BODY_SETTINGS_SHUTTER_SOUND" +msgstr "Shutter sound" + +#: edc-callback/cam_settings_edc_callback.c:1779 +#: edc-callback/cam_settings_edc_callback.c:1782 +msgid "IDS_CAM_BODY_RECORDING_SOUND" +msgstr "Recording sound" + +#: edc-callback/cam_settings_edc_callback.c:1793 +#: edc-callback/cam_settings_sound_callback.c:288 +msgid "IDS_CAM_BODY_SOUND_1" +msgstr "Sound 1" + +#: edc-callback/cam_settings_edc_callback.c:1796 +#: edc-callback/cam_settings_sound_callback.c:289 +msgid "IDS_CAM_BODY_SOUND_2" +msgstr "Sound 2" + +#: edc-callback/cam_settings_edc_callback.c:1799 +#: edc-callback/cam_settings_sound_callback.c:290 +msgid "IDS_CAM_BODY_SOUND_3" +msgstr "Sound 3" + +#: edc-callback/cam_settings_edc_callback.c:1821 +#: edc-callback/cam_settings_storage_callback.c:259 +msgid "IDS_CAM_BODY_MEMORY_CARD" +msgstr "Memory card" + +#: edc-callback/cam_settings_edc_callback.c:1847 +msgid "IDS_CAM_BODY_GUIDELINES" +msgstr "Guidelines" + +#: edc-callback/cam_settings_edc_callback.c:1851 +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Storage" + +#: edc-callback/cam_flash_edc_callback.c:307 +msgid "IDS_CAM_BODY_ON" +msgstr "On" + +#: edc-callback/cam_focus_edc_callback.c:254 +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Auto focus" + +#: edc-callback/cam_settings_adjustment_callback.c:269 +msgid "IDS_CAM_BODY_CONTRAST" +msgstr "Contrast" + +#: edc-callback/cam_settings_adjustment_callback.c:270 +msgid "IDS_CAM_BODY_SATURATION" +msgstr "Saturation" + +#: edc-callback/cam_settings_adjustment_callback.c:271 +msgid "IDS_CAM_BODY_SHARPNESS" +msgstr "Sharpness" + +msgid "IDS_CAM_BODY_BLINK_DETECTION" +msgstr "Blink Detection" + +msgid "IDS_CAM_POP_NOT_ENOUGH_MEMORY" +msgstr "Not enough memory" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Failed to build panoramic images.\n" +" Try later" + +msgid "IDS_CAM_POP_REMOVE_MMC_RECORDING" +msgstr "Memory card removed.
    The data is not saved" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Action shot" + +msgid "IDS_CAM_POP_MEMORY_CARD_REMOVED" +msgstr "Memory card removed" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Unable to save. Not enough memory" + +msgid "IDS_CAM_BODY_RESET_SETTINGS" +msgstr "Reset settings" + +msgid "IDS_CAM_POP_RESET_CAMERA_SETTINGS" +msgstr "Reset camera settings?" + +msgid "IDS_CAM_POP_CAPTURE_ERROR" +msgstr "Capture error" + + + diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 0000000..93a87b7 --- /dev/null +++ b/po/bg.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 сек" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 сек" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 сек" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Система срещу разклащане" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Аудио запис" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Авто" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Автофокус" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Красота" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Черно и бяло" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Син" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Централно - претеглено" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Облачно" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Дневна светлина" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Разпознаване на лице" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Неуспешно изграждане на панорамни изображения. Опитайте по-късно" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Светкавица" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Флуоресцентен" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Фокус" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Хоризонт" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Качество на изображ." + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Пейзажно" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "Макрос" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "Матрица" + +msgid "IDS_CAM_BODY_METERING" +msgstr "Измерване" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Моля, изчакайте да се създаде панорама" + +msgid "IDS_CAM_BODY_RED" +msgstr "Червен" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Екран за предв. преглед" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Здрач/зазоряване" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Автопортрет" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Сепия" + +msgid "IDS_CAM_BODY_SHADE" +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_SPOT" +msgstr "Зона" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Устройство за съхранение на данни" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Не може да се запамети Няма достатъчно памет" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Видео качество" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Изкуствено осветление" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Екшън снимка" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Реколта" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Красива снимка" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Стойност на експонацията" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Нощ" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Още" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Панорама" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Бърз преглед" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Режим на снимане" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Бавно движение" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Активирайте Използване на GPS сателити в Настройки, за да използвате GPS етикет" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Излизане от Камера?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "Звук" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Направляващи линии" + +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_BODY_GPS_TAG" +msgstr "GPS таг" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "Правилата за защита ограничават използването на камерата" + +msgid "IDS_CAM_POP_SAVED" +msgstr "Записан" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "Автопортрет" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Портрет" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Пейзажно" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Нощ" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Спорт" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Парти/На закрито" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "Разпознаване на лице" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "Нyлиране на настройките?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Настройки" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "Карта с памет" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Плаж/Сняг" + diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..5663fa5 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 seg" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 seg" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 seg" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Anti-Vibració" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Gravació d'àudio" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Enfocament automàtic" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Bellesa" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Blanc i negre" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Blau" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Enfocat" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Ennuvolat" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Llum diürna" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Detecció de cares" + +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_FLASH" +msgstr "Flaix" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescent" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Enfocar" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horitzó" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Qualitat imatge" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Horitzontal" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "El meu dispositiu" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Esperi mentre es crea la imatge panoràmica" + +msgid "IDS_CAM_BODY_RED" +msgstr "Vermell" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Pantalla de revisió" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Vespre/Alba" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Autoretrat" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sèpia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Ombra" + +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_SPOT" +msgstr "Punt" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Emmagatzematge" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "No es pot desar. No hi ha prou memòria" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Qualitat de vídeo" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Incandescent" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Foto d'acció" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Antic" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Captura embellida" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Valor d'exposició" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Nit" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Més" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Vista ràpida" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Mode disparament" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Càmera lenta" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Mode d'usuari" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Introdueixi la targeta de memòria per utilitzar la Càmera" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Habiliti l'ús de satèl·lits GPS a Ajustaments per utilitzar l'etiqueta GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Sortir de la càmera?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Error de previsualització" + +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_BODY_SOUND" +msgstr "So" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Instruccions" + +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_BODY_GPS_TAG" +msgstr "Etiqueta GPS" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Autoretrat" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Vertical" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Horitzontal" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Nit" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Esports" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Festa/Interior" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Platja/Neu" + +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_OPT_FACE_DETECTION" +msgstr "Detecció de cares" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Mode de gravació" + +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_POP_RESET_SETTINGS_Q" +msgstr "Restablir ajustaments?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Ajustaments" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Disparament somriure" + +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_OPT_MEMORY_CARD" +msgstr "Targeta de memòria" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Platja/Neu" + diff --git a/po/camera.pot b/po/camera.pot new file mode 100644 index 0000000..bc88f69 --- /dev/null +++ b/po/camera.pot @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-30 12:29+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: camera.c:35 +msgid "camera" +msgstr "" + +#: camera.c:36 +msgid "Click to exit" +msgstr "" + +#: camera.c:102 camera.c:333 +msgid "Ok" +msgstr "" + +#: camera.c:177 +msgid "FONT_NAME" +msgstr "" + +#: camera.c:332 +msgid "LOW BATTERY" +msgstr "" diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..1189dc5 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 s" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 s" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 s" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Stabilizace obrazu" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Nahrávání zvuku" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automaticky" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Automatické zaostření" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Krása" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Černobílý" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Modrá" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Ve středu" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Oblačno" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Denní světlo" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Rozpoznání obličeje" + +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_FLASH" +msgstr "Blesk" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Zářivka" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Zaostření" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizont" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Kvalita obrázku" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Na šířku" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Toto zařízení" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Počkejte při fotografování panoramatického snímku" + +msgid "IDS_CAM_BODY_RED" +msgstr "Červená" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Kontrolní obrazovka" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Soumrak/úsvit" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Autoportrét" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sépie" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Stín" + +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_SPOT" +msgstr "Bod" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Úložiště" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Nelze uložit. Nedostatek paměti" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Kvalita videa" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Žhnoucí" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Akční snímek" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintage" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Krása" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Hodnota expozice" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Noc" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Další" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panoráma" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Rychlý náhled" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Režim fotografování" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Pomalý pohyb" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Uživatelský" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Chcete-li použít fotoaparát, vložte paměťovou kartu" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Chcete-li použít značku GPS, zapněte funkci Použít satelity GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Ukončit fotoaparát?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Chyba náhledu" + +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_BODY_SOUND" +msgstr "Zvuk" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Vodící linky" + +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_BODY_GPS_TAG" +msgstr "Značka GPS" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Autoportrét" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Na výšku" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Na šířku" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Noc" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Večírek/uvnitř" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Pláž/sníh" + +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_OPT_FACE_DETECTION" +msgstr "Rozpoznání obličeje" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Režim nahrávání" + +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_POP_RESET_SETTINGS_Q" +msgstr "Vynulovat nastavení?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Nastavení" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Úsměv" + +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_OPT_MEMORY_CARD" +msgstr "Paměťová karta" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Pláž/sníh" + diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..13fd9b7 --- /dev/null +++ b/po/da.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sek." + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sek." + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sek." + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Anti-ryst" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Lydoptagelse" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Autofokus" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Skønhed" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Sort-hvid" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Blå" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Centervægtet" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Skyet" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Dagslys" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Ansigtsdetektering" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Kunne ikke opbygge panoramabilleder. Prøv senere" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Kameralys" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescerende" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fokus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horisont" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Billedkvalitet" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Landskab" + +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_MMS" +msgstr "Mms" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Min enhed" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Vent, mens der oprettes et panoramabillede" + +msgid "IDS_CAM_BODY_RED" +msgstr "Rød" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Gennemse skærm" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Skumring/daggry" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Selvportræt" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Skygge" + +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_SPOT" +msgstr "Punkt" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Lagring" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Kunne ikke gemme. Ikke tilstrækkelig hukommelse" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Videokvalitet" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Hvidglødende" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Handlingsbillede" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Klassisk" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Forskønnet optagelse" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Eksponeringsværdi" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Nat" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Mere" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Hurtigvisning" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Optagelsestilstand" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Slowmotion" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Brugertilstand" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Isæt hukommelseskort for at bruge kamera" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Slå Brug GPS-satellitter til i Indstillinger for at bruge GPS-tag" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Afslut kamera?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Visningsfejl" + +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_BODY_SOUND" +msgstr "Lyd" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Hjælpelinjer" + +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_BODY_GPS_TAG" +msgstr "GPS-tag" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Selvportræt" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portræt" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Landskab" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Nat" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Fest/indendørs" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Strand/sne" + +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_OPT_FACE_DETECTION" +msgstr "Ansigtsdetektering" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Optagelsestilstand" + +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 "Rediger genveje" + +msgid "IDS_CAM_BODY_AUTO_CONTRAST" +msgstr "Automatisk kontrast" + +msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET" +msgstr "Nulstil" + +msgid "IDS_CAM_POP_RESET_SETTINGS_Q" +msgstr "Nulstil indstillinger?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Indstillinger" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Smilbillede" + +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_OPT_MEMORY_CARD" +msgstr "Hukommelseskort" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Strand/sne" + diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..2baacd6 --- /dev/null +++ b/po/de.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 Sek." + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 Sek." + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 Sek." + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Bildstabilisator" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Audioaufnahme" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Autofokus" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Beauty" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Schwarz/Weiß" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Blau" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Mittenbetont" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Bewölkt" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Tageslicht" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Gesichtserkennung" + +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_FLASH" +msgstr "Fotolicht" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluoreszierend" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fokus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizont" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Bildqualität" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Landschaft" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Mein Gerät" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Panorama wird erstellt, bitte warten" + +msgid "IDS_CAM_BODY_RED" +msgstr "Rot" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Bildschirm überprüfen" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Abenddämmerung/Morgendämmerung" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Selbstporträt" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Schatten" + +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_SPOT" +msgstr "Spot" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Speicher" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Speichern nicht möglich. Nicht genügend Speicher" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Videoqualität" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Glühlampenlicht" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Actionaufnahme" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Klassisch" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Beautyaufnahme" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Belichtungswert" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Nacht" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Optionen" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Schnellansicht" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Aufnahmemodus" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Zeitlupe" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Benutzermodus" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Speicherkarte zur Verwendung der Kamera einlegen" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Verwendung von GPS-Satelliten in Einstellungen aktivieren, um GPS-Tag zu verwenden." + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Kamera schließen?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Vorschaufehler" + +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_BODY_SOUND" +msgstr "Ton" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Hilfslinien" + +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_BODY_GPS_TAG" +msgstr "GPS-Tag" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Selbstportr." + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portrait" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Landschaft" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Nacht" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Party/Innen" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Strand/Schnee" + +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_OPT_FACE_DETECTION" +msgstr "Gesichtserkennung" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Aufnahmemodus" + +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_POP_RESET_SETTINGS_Q" +msgstr "Einstellungen zurücksetzen?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Einstellungen" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Smile" + +msgid "IDS_CAM_OPT_BURST_SHOT_ABB" +msgstr "Serienbildaufnahme" + +msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL" +msgstr "Normal" + +msgid "IDS_CAM_OPT_MESSAGE_LIMIT" +msgstr "Nachrichtenbeschränkung" + +msgid "IDS_CAM_OPT_MEMORY_CARD" +msgstr "Speicherkarte" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Strand/Schnee" + diff --git a/po/el.po b/po/el.po new file mode 100644 index 0000000..425b20e --- /dev/null +++ b/po/el.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 δευτ." + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 δευτ." + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 δευτ." + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Anti-Shake" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Εγγραφή ήχου" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Αυτόματο" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Αυτόματη εστίαση" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Ομορφιά" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Ασπρόμαυρο" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Μπλε" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Με εστίαση στο κέντρο" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Συννεφιά" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Φως ημέρας" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Ανίχνευση προσώπου" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Αποτυχία δημιουργίας πανοραμικών εικόνων. Δοκιμάστε αργότερα" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Φλας" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Φθορισμού" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Εστίαση" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Ορίζοντας" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Ποιότητα εικόνας" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Οριζόντια" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "Macro" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "Matrix" + +msgid "IDS_CAM_BODY_METERING" +msgstr "Μέτρηση" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Περιμένετε μέχρι να δημιουργηθεί το πανόραμα" + +msgid "IDS_CAM_BODY_RED" +msgstr "Κόκκινο" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Οθόνη προβολής" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Σούρουπο/Αυγή" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Αυτοφωτογράφηση" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Σέπια" + +msgid "IDS_CAM_BODY_SHADE" +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_SPOT" +msgstr "Σημείο" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Αποθήκευση" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Δεν είναι δυνατή η αποθήκευση. Ανεπαρκής μνήμη" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Ποιότητα βίντεο" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Πυρακτώσεως" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Λήψη ενέργειας" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintage" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Για ομορφότερη λήψη" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Τιμή έκθεσης" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Νύχτα" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Περισσότερα" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Πανόραμα" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Γρήγορη προβολή" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Λειτουργία λήψης" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Αργή ταχύτητα" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Για να χρησιμοποιήσετε την ετικέτα GPS, ενεργοπ. την επιλογή “Χρήση δορυφόρων GPS” από τις Ρυθμίσεις" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Έξοδος από κάμερα;" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "Ήχος" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Οδηγίες" + +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_BODY_GPS_TAG" +msgstr "Ετικέτα GPS" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "Η πολιτική ασφαλείας περιορίζει τη χρήση της κάμερας" + +msgid "IDS_CAM_POP_SAVED" +msgstr "Αποθηκεύτηκε" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "Αυτοφωτογρ." + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Πορτραίτο" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Οριζόντια" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Νύχτα" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Αθλητικά" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Πάρτι/Εσωτερικά" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "Ανίχνευση προσώπου" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "Επαναφορά ρυθμίσεων;" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Ρυθμίσεις" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "Κάρτα μνήμης" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Παραλία/Χιόνι" + diff --git a/po/en.po b/po/en.po new file mode 100644 index 0000000..57bce2d --- /dev/null +++ b/po/en.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 secs" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 secs" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 secs" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Anti-shake" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Audio recording" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Auto focus" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Beauty" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Black and white" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Blue" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Centre-weighted" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Cloudy" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Daylight" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Face detection" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Failed to build panoramic images. Try later" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Flash" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescent" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Focus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizon" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Image quality" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Landscape" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "My device" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Please wait while creating panorama" + +msgid "IDS_CAM_BODY_RED" +msgstr "Red" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Review screen" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Dusk/Dawn" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Self-portrait" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Shade" + +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_SPOT" +msgstr "Spot" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Storage" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Unable to save. Not enough memory" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Video quality" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Incandescent" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Action shot" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintage" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Beauty shot" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Exposure value" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Night" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "More" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Quickview" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Shooting mode" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Slow motion" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "User mode" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Insert memory card to use Camera" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Enable Use GPS satellites in Settings to use GPS tag" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Exit Camera?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Preview error" + +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_BODY_SOUND" +msgstr "Sound" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Guidelines" + +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_BODY_GPS_TAG" +msgstr "GPS tag" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Self-portrait" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portrait" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Landscape" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Night" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sports" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Party/Indoor" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Beach/Snow" + +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_OPT_FACE_DETECTION" +msgstr "Face detection" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Recording mode" + +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_POP_RESET_SETTINGS_Q" +msgstr "Reset settings?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Settings" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Smile shot" + +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_OPT_MEMORY_CARD" +msgstr "Memory card" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Beach/Snow" + diff --git a/po/en_US.po b/po/en_US.po new file mode 100644 index 0000000..ff4c11a --- /dev/null +++ b/po/en_US.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sec" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sec" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sec" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Anti-Shake" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Audio recording" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Auto focus" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Beauty" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Black and white" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Blue" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Center-weighted" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Cloudy" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Daylight" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Face detection" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Failed to build panoramic images. Try later" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Flash" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescent" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Focus " + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizon" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Image quality" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Landscape" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "My device" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Please wait while creating panorama" + +msgid "IDS_CAM_BODY_RED" +msgstr "Red" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Review screen" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Dusk/Dawn" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Self-portrait" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Shade" + +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_SPOT" +msgstr "Spot" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Storage" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Unable to save. Not enough memory" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Video quality" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Incandescent" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Action shot" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintage" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Beauty shot" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Exposure value" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Night" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "More" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Quickview" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Shooting mode" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Slow motion" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "User mode" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Insert memory card to use Camera" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Enable Use GPS satellites in Settings to use GPS tag" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Exit Camera?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Preview error" + +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_BODY_SOUND" +msgstr "Sound" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Guidelines" + +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_BODY_GPS_TAG" +msgstr "GPS tag" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Self-portrait" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portrait" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Landscape" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Night" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sports" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Party/Indoor" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Beach/Snow" + +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_OPT_FACE_DETECTION" +msgstr "Face detection" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Recording mode" + +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_POP_RESET_SETTINGS_Q" +msgstr "Reset settings?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Settings" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Smile shot" + +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_OPT_MEMORY_CARD" +msgstr "Memory card" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Beach/Snow" + diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..18e55ed --- /dev/null +++ b/po/es.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 seg" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 seg" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 seg" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Antimovimiento" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Grabación de audio" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Enfoque automático" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Belleza" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Blanco y negro" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Azul" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Centr-compensado" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Nublado" + +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_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Error al generar imágenes panorámicas. Intentarlo más tarde" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Flash" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescente" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Enfocar" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizonte" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Calidad de imagen" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Paisaje" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Mi dispositivo" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Espere mientras se crea la imagen panorámica" + +msgid "IDS_CAM_BODY_RED" +msgstr "Rojo" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Pantalla de revisión" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Anochecer/Amanecer" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Autorretrato" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Sombra" + +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_SPOT" +msgstr "Punto" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Almacenamiento" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "No se puede guardar. No hay memoria suficiente" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Calidad de vídeo" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Incandescente" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Toma de acción" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Antiguo" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Disparo belleza" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Valor de exposición" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Noche" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Más" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorámica" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Vista rápida" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Modo de disparo" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Cámara lenta" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Modo de usuario" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Inserte la tarjeta de memoria para utilizar la cámara" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Active uso de satélites GPS en Ajustes para utilizar la etiqueta GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "¿Salir de la cámara?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Vista previa del error" + +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_BODY_SOUND" +msgstr "Sonido" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Instrucciones" + +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_BODY_GPS_TAG" +msgstr "Etiqueta GPS" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Autorretrato" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Retrato" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Paisaje" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Noche" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Deportes" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Fiesta/Interior" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Playa/Nieve" + +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_OPT_FACE_DETECTION" +msgstr "Detección de rostro" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Modo de grabación" + +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_POP_RESET_SETTINGS_Q" +msgstr "¿Restablecer ajustes?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Ajustes" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Disparo por sonrisa" + +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_OPT_MEMORY_CARD" +msgstr "Tarjeta de memoria" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Playa/Nieve" + diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..6bc0238 --- /dev/null +++ b/po/fi.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 s" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 s" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 s" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Tärinänesto" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Äänitallennus" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automaattinen" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Automaattinen tarkennus" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Kauneus" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Mustavalkoinen" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Sininen" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Keskipainotettu" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Pilvinen" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Päivänvalo" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Kasvontunnistus" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Panoraamakuvien muodostaminen epäonnistui. Yritä myöhemmin uudelleen" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Salama" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Loistevalo" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Tarkennus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horisontti" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Kuvanlaatu" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Maisema" + +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_MMS" +msgstr "Multimediaviesti" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Oma laite" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Odota, panoraamakuvaa luodaan" + +msgid "IDS_CAM_BODY_RED" +msgstr "Punainen" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Näytön tarkastelu" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Ilta/aamu" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Muotokuva" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Seepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Varjostin" + +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_SPOT" +msgstr "Pistemittaus" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Tallennustila" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Tallennus epäonnistui. Muisti ei riitä" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Videokuvan laatu" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Hehkulampun valo" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Toimintakuva" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vanha" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Kaunis kuva" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Valotusarvo" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Yö" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Lisää" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panoraama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Pikanäkymä" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Kuvaustila" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Hidas liike" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Käyttäjätila" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Aseta muistikortti kameran käyttöä varten" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Ota Käytä GPS-satelliitteja Asetukset-kohdassa käyttöön GPS-tunnisteen käyttöä varten" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Suljetaanko kamera?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Esikatseluvirhe" + +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_BODY_SOUND" +msgstr "Ääni" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Suuntaviivat" + +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_BODY_GPS_TAG" +msgstr "GPS-tunniste" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Muotokuva" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Muotokuva" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Maisema" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Yö" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Urheilu" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Juhlat/Sisätila" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Ranta/lumi" + +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_OPT_FACE_DETECTION" +msgstr "Kasvontunnistus" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Tallennustila" + +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_POP_RESET_SETTINGS_Q" +msgstr "Nollataanko asetukset?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Asetukset" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Hymykuvaus" + +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_OPT_MEMORY_CARD" +msgstr "Muistikortti" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Ranta/lumi" + diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..298d717 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sec" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sec" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sec" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Stabilisateur" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Enreg. audio" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto." + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Auto focus" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Beauté" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Noir et blanc" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Bleu" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Mesure pondérée centrale" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Nuageux" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Lumière naturelle" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Détect. portrait" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Echec de création des images panoramiques. Essayez plus tard" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Flash" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescent" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Focus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizon" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Qualité d'image" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Paysage" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Mon appareil" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Veuillez patienter pendant la création du panorama" + +msgid "IDS_CAM_BODY_RED" +msgstr "Rouge" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Ecran de visualisation" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Crépuscule/aube" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Autoportrait" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sépia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Ombre" + +msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_BODY_SINGLE" +msgstr "Célibataire" + +msgid "IDS_CAM_BODY_SLOW_MOTION" +msgstr "Mouvement lent" + +msgid "IDS_CAM_BODY_SPOT" +msgstr "Spot" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Stockage" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Echec de l'enregistrement. Mémoire insuffisante" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Qualité vidéo" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Incandescent" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Action" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintage" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Prise de vue améliorée" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Valeur d'exposition" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Nuit" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Plus" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Aperçu" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Mode de capture" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Mouvement lent" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Mode utilisateur" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Insérez une carte mémoire pour utiliser l'appareil photo" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Activez l'option Utiliser satellites GPS dans Paramètres pour utiliser la balise GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Quitter l'appareil photo ?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Erreur de prévisualisation" + +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_BODY_SOUND" +msgstr "Son" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Guide" + +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_BODY_GPS_TAG" +msgstr "Balise GPS" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Autoportrait" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portrait" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Paysage" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Nuit" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sports" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Fête/Intérieur" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Plage/Neige" + +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_OPT_FACE_DETECTION" +msgstr "Détect. portrait" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Mode d'enregistrement" + +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_POP_RESET_SETTINGS_Q" +msgstr "Réinitialiser les paramètres ?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Paramètres" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Sourire" + +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_OPT_MEMORY_CARD" +msgstr "Carte mémoire" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Plage/Neige" + diff --git a/po/he.po b/po/he.po new file mode 100644 index 0000000..5933300 --- /dev/null +++ b/po/he.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 שנ'" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 שנ'" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 שנ'" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "מייצב תמונה" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "הקלטת שמע" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "אוטומטי" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "מיקוד אוטומטי" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "פנים" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "שחור לבן" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "כחול" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "משקל מרכזי" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "מעונן" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "אור יום" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "זיהוי פנים" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "בניית תמונות פנורמיות נכשלה. נסה מאוחר יותר" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "מבזק" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "פלורוסנט" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "מיקוד" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "אופק" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "איכות תמונה" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "נוף" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "מאקרו" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "מטריצה" + +msgid "IDS_CAM_BODY_METERING" +msgstr "מדידה" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "המתן בעת יצירת פנורמה" + +msgid "IDS_CAM_BODY_RED" +msgstr "אדום" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "סקור מסך" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "בין ערביים/זריחה" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "דיוקן-עצמי" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "חום כהה" + +msgid "IDS_CAM_BODY_SHADE" +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_SPOT" +msgstr "ספוט" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "אחסון" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "לא ניתן לשמור. אין די זיכרון" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "איכות וידאו" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "זוהר" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "צילום פעולה" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "עתיק" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "צילום יופי" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "ערך חשיפה" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "לילה" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "עוד" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "פנורמה" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "תצוגה מהירה" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "מצב צילום" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "הילוך איטי" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "הפעל שימוש בלווייני GPS‬ תחת הגדרות כדי להשתמש בתגית GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "לצאת מהמצלמה?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "צלילים" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "קווים מנחים" + +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_BODY_GPS_TAG" +msgstr "תגית GPS" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "מדיניות האבטחה מגבילה את השימוש במצלמה" + +msgid "IDS_CAM_POP_SAVED" +msgstr "נשמר" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "דיוקן-עצמי" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "דיוקן" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "נוף" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "לילה" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "ספורט" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "ביתי/מסיבה" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "זיהוי פנים" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "לאפס הגדרות?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "הגדרות" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "כרטיס זיכרון" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "חוף/שלג" + diff --git a/po/hi.po b/po/hi.po new file mode 100644 index 0000000..9750a71 --- /dev/null +++ b/po/hi.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 से." + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 से." + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 से." + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "एंटी-शेक" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "ऑडियो रिकॉर्डिंग" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "स्वतः" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "ऑटो फोकस" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "ब्यूटी" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "काला और सफेद" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "नीला" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "सेंटर-वेटिड" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "क्लाउडी" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "डेलाइट" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "चेहरा पहचान" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "विशालदर्शी इमेजेस बनाने में विफल. बाद में कोशिश करें" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "चमक" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "प्रतिदीप्ति" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "केन्द्रित" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "क्षितिज" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "इमेज गुणवत्ता" + +msgid "IDS_CAM_BODY_ISO" +msgstr "आईएसओ" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "लैंडस्केप" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "मैक्रो" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "मैट्रिक्स" + +msgid "IDS_CAM_BODY_METERING" +msgstr "मीटरिंग" + +msgid "IDS_CAM_BODY_MMS" +msgstr "एमएमएस" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "पैनोरमा बनाते समय कृपया प्रतीक्षा करें" + +msgid "IDS_CAM_BODY_RED" +msgstr "लाल" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "स्‍क्रीन की समीक्षा करें" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "डस्क/डान" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "अपना चित्र" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "सेपिया" + +msgid "IDS_CAM_BODY_SHADE" +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_SPOT" +msgstr "केंद्र" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "स्टोरेज" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "सेव करने में अक्षम. पर्याप्‍त मेमोरी नहीं" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "वीडियो गुणवत्ता" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "उज्‍ज्वल" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "कार्रवाई शॉट" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "विंटेज" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "सौन्दर्य शॉट" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "एक्सपोज़र मान" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "रात्रि" + +msgid "IDS_CAM_OPT_GPS" +msgstr "जीपीएस" + +msgid "IDS_CAM_OPT_MORE" +msgstr "अधिक" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "पैनोरमा" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "तुरन्त देखना" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "शूटिंग मोड" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "धीमी गति" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "जीपीएस टैग का उपयोग करने के लिए सेटिंग्स में जीपीएस सैटेलाइट्‍स उपयोग सक्षम करें" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "कैमरा से बाहर निकलें?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "ध्वनि" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "गाइडलाइंस" + +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_BODY_GPS_TAG" +msgstr "जीपीएस टैग" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "सुरक्षा नीति कैमरा के उपयोग को प्रतिबंधित करती है" + +msgid "IDS_CAM_POP_SAVED" +msgstr "सुरक्षित किया" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "अपना चित्र" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "चित्र" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "लैंडस्केप" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "रात्रि" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "खेल" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "पार्टी/इंडोर" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "चेहरा पहचान" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "सेटिंग्स रीसेट करें?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "सेटिंग्स" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "मेमोरी कार्ड" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "बीच/बर्फ" + diff --git a/po/hr.po b/po/hr.po new file mode 100644 index 0000000..b80bcdd --- /dev/null +++ b/po/hr.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sek" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sek" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sek" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Stabilizacija" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Snimanje zvuka" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Auto fokus" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Ljepota" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Crno-bijelo" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Plava" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Centar" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Oblačno" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Dnevna" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Prepoznavanje lica" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Neuspješna izrada panoramskih slika. Pokušajte kasnije" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Bljeskalica" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescent." + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fokus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizont" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Kvaliteta slike" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Pejzaž" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Moj uređaj" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Pričekajte..." + +msgid "IDS_CAM_BODY_RED" +msgstr "Crvena" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Zaslon pregleda" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Sumrak/zora" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Autoportret" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sephia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Sjena" + +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_SPOT" +msgstr "Točke" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Spremanje" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Nemoguće spremiti. Nedovoljno memorije" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Video kvaliteta" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Žarulja" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Akcija" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Starinski" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Ljepota" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Vrijednost ekspozicije" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Noćno" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Više" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Brzi pregled" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Način fotografiranja" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Usporeno" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Korisnički način" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Umetnite mem. karticu prije upotrebe kamere" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Uključite korištenje GPS satelita u postavkama kako biste koristili GPS oznaku" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Prekid kamere?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Greška prikaza" + +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_BODY_SOUND" +msgstr "Zvuk" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Smjernice" + +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_BODY_GPS_TAG" +msgstr "GPS oznaka" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Autoportret" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portret" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Pejzaž" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Noćno" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Zabava/Interijer" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Plaža/snijeg" + +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_OPT_FACE_DETECTION" +msgstr "Prepoznavanje lica" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Način snimanja" + +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_POP_RESET_SETTINGS_Q" +msgstr "Poništiti postavke?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Postavke" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Osmijeh" + +msgid "IDS_CAM_OPT_BURST_SHOT_ABB" +msgstr "Uzastopna snimka" + +msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL" +msgstr "Normalno" + +msgid "IDS_CAM_OPT_MESSAGE_LIMIT" +msgstr "Granica poruke" + +msgid "IDS_CAM_OPT_MEMORY_CARD" +msgstr "Mem. kartica" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Plaža/snijeg" + diff --git a/po/htm2po.py b/po/htm2po.py new file mode 100644 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 100644 index 0000000..7365be6 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 mp" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 mp" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 mp" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Képstabilizáló" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Hangfelvétel" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto." + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Automatikus fókusz" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Szépség" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Fekete-fehér" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Kék" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Középre súlyozott" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Felhős" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Nappali fény" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Arcészlelé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_FLASH" +msgstr "Mobilfény" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fénycső" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fókusz" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizont" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Képminőség" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Tájkép" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Saját eszköz" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Kis türelmet, a panoráma létrehozása folyamatban van" + +msgid "IDS_CAM_BODY_RED" +msgstr "Piros" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Megtekintő képernyő" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Alkony/hajnal" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Önarckép" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Szépia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Árnyék" + +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_SPOT" +msgstr "Pontszerű" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Tárhely" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Nem lehet menteni. Nincs elég memória" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Videó minősége" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Lámpafény" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Akciófelvétel" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vignettálás" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Csinos felvétel" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Fényérték" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Éjszakai" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Egyebek" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panoráma" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Gyorsnézet" + +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_USER_MODE" +msgstr "Felhasználói mód" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "A Kamera használatához helyezzen be memóriakártyát" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "GPS-címke használatához engedélyezze a GPS-műholdak használatát a Beállításokban" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Bezárja a Kamerát?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Előnézet-hiba" + +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_BODY_SOUND" +msgstr "Hang" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Segédvonalak" + +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_BODY_GPS_TAG" +msgstr "GPS-címke" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Önarckép" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portré" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Tájkép" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Éjszakai" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Buli/beltér" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Strand/hó" + +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_OPT_FACE_DETECTION" +msgstr "Arcészlelés" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Felvételmód" + +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_POP_RESET_SETTINGS_Q" +msgstr "Alapbeáll. visszaállítja?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Beállítások" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Mosoly felvétele" + +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_OPT_MEMORY_CARD" +msgstr "Memóriakártya" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Strand/hó" + diff --git a/po/id.po b/po/id.po new file mode 100644 index 0000000..56f36f4 --- /dev/null +++ b/po/id.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 dtk" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 dtk" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 dtk" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Anti-Shake" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Rekam audio" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Otomatis" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Fokus otomatis" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Keindahan" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Hitam dan putih" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Biru" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Terpusat" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Mendung" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Siang hari" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Deteksi wajah" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Gagal membuat gambar panorama. Coba nanti" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Lampu kilat" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Berpijar" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fokus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horison" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Kualitas gambar" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Landscape" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "Makro" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "Matriks" + +msgid "IDS_CAM_BODY_METERING" +msgstr "Pengukuran" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Perangkat saya" + +msgid "IDS_CAM_BODY_NEGATIVE" +msgstr "Negatif" + +msgid "IDS_CAM_BODY_NONE" +msgstr "Tdk ada" + +msgid "IDS_CAM_BODY_OFF" +msgstr "Mati" + +msgid "IDS_CAM_BODY_ON" +msgstr "Hidup" + +msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Harap tunggu sembari buat panorama" + +msgid "IDS_CAM_BODY_RED" +msgstr "Merah" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Layar pratinjau" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Senja/Fajar" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Self-potrait" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Warna" + +msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_BODY_SINGLE" +msgstr "Tunggal" + +msgid "IDS_CAM_BODY_SLOW_MOTION" +msgstr "Gerak perlahan" + +msgid "IDS_CAM_BODY_SPOT" +msgstr "Bintik" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Penyimpanan" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Tidak bisa menyimpan. Memori tidak cukup" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Kualitas video" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Pijar" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Action shot" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Kuno" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Bidikan indah" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Nilai pembukaan" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Malam" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Lainnya" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Lihat cepat" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Mode Shooting" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Gerak perlahan" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Modus pengguna" + +msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB" +msgstr "White balance" + +msgid "IDS_CAM_POP_CAPTURE_ERROR" +msgstr "Gangguan pengambilan" + +msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN" +msgstr "Waktu pengambilan terlampaui. Mulai lagi" + +msgid "IDS_CAM_POP_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Masukkan kartu memori untuk menggunakan Kamera" + +msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA" +msgstr "Tidak bisa memulai kamera" + +msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL" +msgstr "Tdk dapat menaktifkan kamera\nselama panggilan" + +msgid "IDS_CAM_POP_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Memungkinkan Gunakan satelit GPS pada Pengaturan untuk menggunakan tag GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Keluar dr kamera?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Kesalahan pratinjau" + +msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS" +msgstr "Tutup kamera dalam %d detik" + +msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Aktifkan layanan lokasi di Pengaturan untuk menggunakan tag GPS" + +msgid "IDS_CAM_BODY_SOUND" +msgstr "Suara" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Garis petunjuk" + +msgid "IDS_CAM_POP_PRESS_SHUTTER" +msgstr "Tekan Shutter" + +msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW" +msgstr "Gerakkan kamera perlahan ke arah tanda panah" + +msgid "IDS_CAM_POP_ERROR_MESSAGE" +msgstr "Menu tdk mendukung" + +msgid "IDS_CAM_BODY_GPS_TAG" +msgstr "Tag GPS tag" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "Kebijakan pengaman membatasi penggunaan Kamera" + +msgid "IDS_CAM_POP_SAVED" +msgstr "Tersimpan" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "Self-potrait" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Potret" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Landscape" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Malam" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Olahraga" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Party / Indoor" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Pantai/Salju" + +msgid "IDS_CAM_OPT_SCENEMODE_SUNSET" +msgstr "Senja" + +msgid "IDS_CAM_OPT_SCENE_DAWN" +msgstr "Fajar" + +msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK" +msgstr "Firework" + +msgid "IDS_CAM_BODY_SCENEMODE_TEXT" +msgstr "Teks" + +msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT" +msgstr "Cahaya lilin" + +msgid "IDS_CAM_OPT_SCENE_BACKLIGHT" +msgstr "Cahaya layar" + +msgid "IDS_CAM_OPT_AUTO_FOCUS" +msgstr "Fokus otomatis" + +msgid "IDS_CAM_OPT_FACE_DETECTION" +msgstr "Deteksi wajah" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Mode merekam" + +msgid "IDS_CAM_BODY_SCENE_MODE" +msgstr "Mode scene" + +msgid "IDS_CAM_BODY_FOCUS_MODE" +msgstr "Mode Fokus" + +msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY" +msgstr "Visibilitas luar ruangan" + +msgid "IDS_CAM_BODY_TIMER" +msgstr "Timer" + +msgid "IDS_CAM_BODY_EFFECTS" +msgstr "Efek" + +msgid "IDS_CAM_OPT_EDIT_SHORTCUTS" +msgstr "Edit pemintas" + +msgid "IDS_CAM_BODY_AUTO_CONTRAST" +msgstr "Kontras otomatis" + +msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET" +msgstr "Reset" + +msgid "IDS_CAM_POP_RESET_SETTINGS_Q" +msgstr "Reset pengaturan?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Pengaturan" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Smile shot" + +msgid "IDS_CAM_OPT_BURST_SHOT_ABB" +msgstr "Bidikan burst" + +msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL" +msgstr "Normal" + +msgid "IDS_CAM_OPT_MESSAGE_LIMIT" +msgstr "Batasan pesan" + +msgid "IDS_CAM_OPT_MEMORY_CARD" +msgstr "Kartu memori" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Pantai/Salju" + diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..c3d6ed3 --- /dev/null +++ b/po/it.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sec" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sec" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sec" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Antivibrazione" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Registraz. audio" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automatica" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Messa a fuoco automatica" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Estetica" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Bianco e nero" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Blu" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Calibrato al centro" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Nuvoloso" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Luce naturale" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Rilevamento volti" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Impossibile generare immagini panoramiche. Riprovare più tardi" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Flash" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescente" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fuoco" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Orizzonte" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Qualità immagini" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Panorama" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Dispositivo personale" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Attendere durante la creazione del panorama" + +msgid "IDS_CAM_BODY_RED" +msgstr "Rosso" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Schermata di verifica" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Crepuscolo/Alba" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Autoritratto" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Seppia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Ombra" + +msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_BODY_SINGLE" +msgstr "Singola" + +msgid "IDS_CAM_BODY_SLOW_MOTION" +msgstr "Slow motion" + +msgid "IDS_CAM_BODY_SPOT" +msgstr "Spot" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Memoria" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Impossibile salvare. Memoria insufficiente" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Qualità video" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Incandescente" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Scatto azione" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintage" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Scatto Beauty" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Valore esposizione" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Notte" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Altro" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Anteprima" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Modalità scatto" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Slow motion" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Modalità utente" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Inserire la scheda di memoria per usare la Fotocamera" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Attivare Utilizzo satelliti GPS in Impostazioni per utilizzare il tag GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Uscire dalla Fotocamera?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Errore anteprima" + +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_BODY_SOUND" +msgstr "Suono" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Linee guida" + +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_BODY_GPS_TAG" +msgstr "Tag GPS" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Autoritratto" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Ritratto" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Notte" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Festa/Interni" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Spiaggia/Neve" + +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_OPT_FACE_DETECTION" +msgstr "Rilevamento volti" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Modalità registrazione" + +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_POP_RESET_SETTINGS_Q" +msgstr "Ripristinare le impostazioni?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Impostazioni" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Scatta con sorriso" + +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_OPT_MEMORY_CARD" +msgstr "Scheda di memoria" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Spiaggia/Neve" + diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..2a7db5c --- /dev/null +++ b/po/ja.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10秒" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2秒" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5秒" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "手振れ補正" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "音声録音" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "自動" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "オート​フォーカス" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "美肌​モード" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "モノクロ" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "ブルー" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "中央部重点測光" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "曇り" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "晴天" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "顔​検出" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "パノラマ​写真​を​作成​して​います。​後​ほど​お試し​ください" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "フラッシュ" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "蛍光灯" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "フォーカス" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "水平" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "画質設定" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "風景" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "マクロ" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "多分割​測光" + +msgid "IDS_CAM_BODY_METERING" +msgstr "測光" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "パノラマを​作成​しています。​しばらく​お待ち​ください..." + +msgid "IDS_CAM_BODY_RED" +msgstr "レッド" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "プレビュー画面" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "夕暮れ・夜明け" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "自分​撮り" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "セピア" + +msgid "IDS_CAM_BODY_SHADE" +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_SPOT" +msgstr "スポット​測光" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "ストレージ" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "保存できません。メモリが不足しています。" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "動画の​画質" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "白熱灯" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "アクション​撮影" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "ビンテージ\n撮影" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "ビューティ​ショット" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "露出​補正" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "夜景" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "その他" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "パノラマ" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "クイックビュー" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "撮影​モード" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "スロー​モーション" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "外部SDカードを​挿入して​カメラを​使用して​ください。" + +msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA" +msgstr "カメラを​起動できません" + +msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL" +msgstr "通話中​には、​カメラを​起動​できません。" + +msgid "IDS_CAM_POP_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "GPS​タグ​を​使用​する​[設定]​にしてから、​GPS​衛星​の​使用​を​有効​に​してください" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "カメラを終了しますか?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "サウンド" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "補助​グリッド" + +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_BODY_GPS_TAG" +msgstr "GPS​タグ" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "カメラの​使用は、​セキュリティ​ポリシーによって制限されています。" + +msgid "IDS_CAM_POP_SAVED" +msgstr "保存​しま​した。" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "自分​撮り" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "ポートレート" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "風景" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "夜景" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "スポーツ" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "パーティー/​室内" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "顔​検出" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "設定​を​リセット​しますか?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "設定" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "外部​SDカード" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "ビーチ/​スキー場" + diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 0000000..fa00a7b --- /dev/null +++ b/po/ko.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10초" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2초" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5초" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "손떨림 보정" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "소리 녹음" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "자동" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "자동 초점" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "뷰티" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "흑백" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "파란색" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "중앙 측광" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "흐린날" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "태양광" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "얼굴 인식" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "파노라마 사진을 생성하지 못하였습니다. 잠시 후 다시 시도하세요" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "플래시" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "형광등" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "선택 영역" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "수평선" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "화질" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "풍경" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "접사" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "다분할" + +msgid "IDS_CAM_BODY_METERING" +msgstr "측광 방식" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "파노라마 사진 생성 중... 잠시만 기다리세요." + +msgid "IDS_CAM_BODY_RED" +msgstr "빨간색" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "촬영 사진 보기" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "저녁/새벽" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "셀프촬영" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "세피아" + +msgid "IDS_CAM_BODY_SHADE" +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_SPOT" +msgstr "스팟" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "저장소" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "저장할 수 없습니다. 메모리가 부족합니다" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "동영상 화질" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "백열등" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "액션 샷" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "빈티지" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "뷰티 샷" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "노출" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "야간" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "더보기" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "파노라마" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "바로 보기" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "촬영 모드" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "슬로 모션" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "GPS 태그를 사용하려면 설정에서 GPS 위성 사용을 활성화하세요" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "카메라를 종료할까요?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "소리" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "안내선 표시" + +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_BODY_GPS_TAG" +msgstr "GPS 태그" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "보안 정책에 따라 카메라 사용이 제한됩니다" + +msgid "IDS_CAM_POP_SAVED" +msgstr "저장되었습니다" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "셀프촬영" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "인물" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "풍경" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "야간" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "스포츠" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "파티/실내" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "얼굴 인식" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "초기화할까요?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "설정" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "메모리 카드" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "해변/설경" + diff --git a/po/lt.po b/po/lt.po new file mode 100644 index 0000000..ad33cb3 --- /dev/null +++ b/po/lt.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sek." + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sek." + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sek." + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "“Anti-Shake” funkcija" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Garso įrašymas" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automatinis" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Automatinis fokusavimas" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Grožis" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Nespalvotas" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Mėlyna" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Centruotas" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Debesuota" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Dienos šviesa" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Veido aptikimas" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Nepavyko sukurti panoraminių vaizdų. Bandykite vėliau" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Blykstė" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescentinis" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fokusavimas" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizontas" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Nuotraukos kokybė" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Peizažas" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Mano įrenginys" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Palaukite kol kuriama panorama" + +msgid "IDS_CAM_BODY_RED" +msgstr "Raudona" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Ekrano peržiūra" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Prieblanda/aušra" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Autoportretas" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Tamsiai rusvas" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Šešėlis" + +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_SPOT" +msgstr "Taškas" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Saugykla" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Negalima įrašyti. Nepakanka atminties" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Vaizdo įrašo kokybė" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Kaitinamoji lempa" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Veiksmo kadras" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Sena nuotrauka" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Retušuotas portretas" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Ekspozicijos vertė" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Naktis" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Daugiau" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "„Quickview“" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Fotografavimo režimas" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Sulėtintai" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Naudotojo režimas" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Norėdami naudoti fotoaparatą įdėkite atminties kortelę" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Norėdami naudotis GPS žyma, nustatymuose įjunkite GPS palydovų naudojimą" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Išjungti fotoaparatą?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Peržiūros klaida" + +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_BODY_SOUND" +msgstr "Garsas" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Instrukcijos" + +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_BODY_GPS_TAG" +msgstr "GPS žymėjimas" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Autoportretas" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portretas" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Peizažas" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Naktis" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sportas" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Vakarėlis / viduje" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Pliažas/sniegas" + +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_OPT_FACE_DETECTION" +msgstr "Veido aptikimas" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Įrašymo režimas" + +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_POP_RESET_SETTINGS_Q" +msgstr "Iš naujo nustatyti nustatymus?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Nustat." + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Šypsenos fot." + +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_OPT_MEMORY_CARD" +msgstr "Atminties kortelė" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Pliažas/sniegas" + diff --git a/po/lv.po b/po/lv.po new file mode 100644 index 0000000..844b774 --- /dev/null +++ b/po/lv.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sek." + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sek." + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sek." + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Prettriecienu aizsardzība" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Audio ierakstīšana" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automātiski" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Automātiskā fokusēšana" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Skaistums" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Melnbalts" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Zils" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Centrēts" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Mākoņains" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Dienasgaisma" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Sejas noteikšana" + +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_FLASH" +msgstr "Zibspuldze" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Dienasgaismas lampa" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fokuss" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizonts" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Attēla kvalitāte" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Ainava" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Mana ierīce" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Lūdzu uzgaidiet, kamēr tiek veidots panorāmas attēls" + +msgid "IDS_CAM_BODY_RED" +msgstr "Sarkans" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Apskates ekrāns" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Krēsla/rītausma" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Pašportrets" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sēpija" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Nokrāsa" + +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_SPOT" +msgstr "Punkts" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Krātuve" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Nevar saglabāt. Nepietiek atmiņas" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Video kvalitāte" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Kvēlspuldze" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Kustību fotogr." + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Antīka attēla efekts" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Ādas retušēšana" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Ekspozīcijas vērtība" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Nakts" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Citi" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorāma" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Ātrā apskate" + +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_USER_MODE" +msgstr "Lietotāja režīms" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Lai lietotu kameru, ievietojiet atmiņas karti" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Lai izmantotu GPS atzīmes, izvēlnē Iestatījumi iespējojiet funkciju Lietot GPS satelītus" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Vai aizvērt kameru?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Priekšskatījuma kļūda" + +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_BODY_SOUND" +msgstr "Skaņa" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Instrukcija" + +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_BODY_GPS_TAG" +msgstr "GPS atzīme" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Pašportrets" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portrets" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Ainava" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Nakts" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sports" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Viesības/Iekštelpa" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Pludmale/Sniegs" + +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_OPT_FACE_DETECTION" +msgstr "Sejas noteikšana" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Ierakstīšanas režīms" + +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_POP_RESET_SETTINGS_Q" +msgstr "Vai atjaunot iestatījumus?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Iestatījumi" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Smaidošs uzņ." + +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_OPT_MEMORY_CARD" +msgstr "Atmiņas karte" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Pludmale/Sniegs" + diff --git a/po/ms.po b/po/ms.po new file mode 100644 index 0000000..7e0ee8a --- /dev/null +++ b/po/ms.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 saat" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 saat" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 saat" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Anti-Bergegar" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Rakaman audio" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automatik" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Fokus auto" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Cantik" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Hitam dan putih" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Biru" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Berwajaran tengah" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Berawan" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Siang hari" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Pengesan muka" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Gagal untuk membina imej panorama. Cuba kemudian" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Lampu flash" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Kalimantan" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fokus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Kaki langit" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Kualiti imej" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Landskap" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "Makro" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "Matriks" + +msgid "IDS_CAM_BODY_METERING" +msgstr "Bermeter" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Alatan saya" + +msgid "IDS_CAM_BODY_NEGATIVE" +msgstr "Negatif" + +msgid "IDS_CAM_BODY_NONE" +msgstr "Tiada" + +msgid "IDS_CAM_BODY_OFF" +msgstr "Matikan" + +msgid "IDS_CAM_BODY_ON" +msgstr "Hidup" + +msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Sila tunggu sementara mencipta panorama" + +msgid "IDS_CAM_BODY_RED" +msgstr "Merah" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Skrin pratonton" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Senja/Subuh" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Potret-diri" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Rona" + +msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_BODY_SINGLE" +msgstr "Tunggal" + +msgid "IDS_CAM_BODY_SLOW_MOTION" +msgstr "Gerakan perlahan" + +msgid "IDS_CAM_BODY_SPOT" +msgstr "Bintik" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Penyimpanan" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Tidak boleh simpan. Memori tidak mencukupi" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Kualiti video" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Berpijar" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Tangkapan tindakan" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintaj" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Tangkapan cantik" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Nilai pendedahan" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Malam" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Lebih" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Pandangan cepat" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Mod tangkapan" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Gerakan perlahan" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Mod pengguna" + +msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB" +msgstr "Imbangan putih" + +msgid "IDS_CAM_POP_CAPTURE_ERROR" +msgstr "Ralat tangkapan" + +msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN" +msgstr "Melebihi masa tangkapan. Mulakan sekali lagi" + +msgid "IDS_CAM_POP_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Sisipkan kad memori untuk menggunakan Kamera" + +msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA" +msgstr "Tidak boleh memulakan Kamera" + +msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL" +msgstr "Tdk dpt mula kamera semasa panggilan" + +msgid "IDS_CAM_POP_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Aktifkan Guna satelit GPS dalam Aturan untuk menggunakan tag GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Keluar dari Kamera?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Ralat pratonton" + +msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS" +msgstr "Tutup kamera dalam %d saat" + +msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Aktifkan perkhidmatan lokasi dalam Aturan untuk menggunakan tag GPS" + +msgid "IDS_CAM_BODY_SOUND" +msgstr "Bunyi" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Panduan" + +msgid "IDS_CAM_POP_PRESS_SHUTTER" +msgstr "Tekan Pengatup" + +msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW" +msgstr "Alih kamera dengan perlahan mengikut arah anak panah" + +msgid "IDS_CAM_POP_ERROR_MESSAGE" +msgstr "Menu tidak disokong" + +msgid "IDS_CAM_BODY_GPS_TAG" +msgstr "Tag GPS" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "Polisi keselamatan mengehadkan penggunaan Kamera" + +msgid "IDS_CAM_POP_SAVED" +msgstr "Tersimpan" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "Potret-diri" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Potret" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Landskap" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Malam" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sukan" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Parti/dalam" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Pantai/Salji" + +msgid "IDS_CAM_OPT_SCENEMODE_SUNSET" +msgstr "Matahari terbit" + +msgid "IDS_CAM_OPT_SCENE_DAWN" +msgstr "Subuh" + +msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK" +msgstr "Bunga api" + +msgid "IDS_CAM_BODY_SCENEMODE_TEXT" +msgstr "Teks" + +msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT" +msgstr "Cahaya lilin" + +msgid "IDS_CAM_OPT_SCENE_BACKLIGHT" +msgstr "Cahaya belakang" + +msgid "IDS_CAM_OPT_AUTO_FOCUS" +msgstr "Fokus auto" + +msgid "IDS_CAM_OPT_FACE_DETECTION" +msgstr "Pengesan muka" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Mod rakaman" + +msgid "IDS_CAM_BODY_SCENE_MODE" +msgstr "Mod pemandangan" + +msgid "IDS_CAM_BODY_FOCUS_MODE" +msgstr "Mod fokus" + +msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY" +msgstr "Keterlihatan luar" + +msgid "IDS_CAM_BODY_TIMER" +msgstr "Pemasa" + +msgid "IDS_CAM_BODY_EFFECTS" +msgstr "Kesan" + +msgid "IDS_CAM_OPT_EDIT_SHORTCUTS" +msgstr "Sunting pintasan" + +msgid "IDS_CAM_BODY_AUTO_CONTRAST" +msgstr "Auto kontras" + +msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET" +msgstr "Tetap semula" + +msgid "IDS_CAM_POP_RESET_SETTINGS_Q" +msgstr "Tetapkan semula aturan?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Aturan" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Tangkapan senyum" + +msgid "IDS_CAM_OPT_BURST_SHOT_ABB" +msgstr "Tangkapan pecah" + +msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL" +msgstr "Biasa" + +msgid "IDS_CAM_OPT_MESSAGE_LIMIT" +msgstr "Had mesej" + +msgid "IDS_CAM_OPT_MEMORY_CARD" +msgstr "Kad memori" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Pantai/Salji" + diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..ba7446b --- /dev/null +++ b/po/nl.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sec." + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sec." + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sec." + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Anti-trilling" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Geluidsopname" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automatisch" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Autofocus" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Beauty-shot" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Zwart-wit" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Blauw" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Nadruk centrum" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Bewolkt" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Daglicht" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Gezicht detecteren" + +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_FLASH" +msgstr "Flitser" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "TL-verlichting" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Focus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizon" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Beeldkwaliteit" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Landschap" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Mijn apparaat" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Panorama-opname wordt gemaakt. Even geduld..." + +msgid "IDS_CAM_BODY_RED" +msgstr "Rood" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Controlescherm" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Dageraad/schemering" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Zelfportret" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Schaduw" + +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_SPOT" +msgstr "Spotmeting" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Opslag" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Kan niet opslaan. Onvoldoende geheugen" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Videokwaliteit" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Kunstlicht" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Actiefoto" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintage" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Beauty-shot" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Belichtingswaarde" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Nacht" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Meer" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "QuickView" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Fotostand" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Slowmotion" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Gebruikerstand" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Plaats geheugenkaart om camera te gebruiken" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "GPS-satellieten gebruiken inschakelen in Instellingen om GPS-tag te gebruiken" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Camera afsluiten?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Fout bij weergeven voorbeeld" + +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_BODY_SOUND" +msgstr "Geluid" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Richtlijnen" + +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_BODY_GPS_TAG" +msgstr "GPS-tag" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Zelfportret" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portret" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Landschap" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Nacht" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Feestje/binnenshuis" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Strand/Sneeuw" + +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_OPT_FACE_DETECTION" +msgstr "Gezicht detecteren" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Videostand" + +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_POP_RESET_SETTINGS_Q" +msgstr "Instellingen resetten?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Instellingen" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Smile shot" + +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_OPT_MEMORY_CARD" +msgstr "Geheugenkaart" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Strand/Sneeuw" + diff --git a/po/no.po b/po/no.po new file mode 100644 index 0000000..a0be057 --- /dev/null +++ b/po/no.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sek" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sek" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sek" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Bildestabilisator" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Lydinnspilling" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Autofokus" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Skjønnhet" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Svart/hvitt" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Blå" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Sentrert" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Overskyet" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Dagslys" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Ansikts-gjenkjenning" + +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_FLASH" +msgstr "Fotolys" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescerende" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fokus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horisont" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Bildekvalitet" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Landskap" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Min enhet" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Vent mens panorama opprettes" + +msgid "IDS_CAM_BODY_RED" +msgstr "Rød" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Visningsskjerm" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Skumring/daggry" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Selvportrett" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Skygge" + +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_SPOT" +msgstr "Spot" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Lagring" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Kan ikke lagre. Ikke nok minne" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Videokvalitet" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Hvitglødende" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Action-bilde" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintage" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Skjønnhetsbilde" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Eksponeringsverdi" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Natt" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Mer" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Hurtigvisning" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Bildemodus" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Sakte film" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Brukermodus" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Sett inn minnekort for å bruke kamera" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Aktiver Bruk GPS-satellitter i Innstillinger for å bruke GPS-tagg" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Avslutte kamera?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Forhåndsvisningsfeil" + +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_BODY_SOUND" +msgstr "Lyd" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Hjelpelinjer" + +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_BODY_GPS_TAG" +msgstr "GPS-tagg" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Selvportrett" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portrett" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Landskap" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Natt" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Fest/innendørs" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Strand/snø" + +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_OPT_FACE_DETECTION" +msgstr "Ansikts-gjenkjenning" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Opptaksmodus" + +msgid "IDS_CAM_BODY_SCENE_MODE" +msgstr "Scenemodus" + +msgid "IDS_CAM_BODY_FOCUS_MODE" +msgstr "Fokusmodus" + +msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY" +msgstr "Utendørs synlighet" + +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_POP_RESET_SETTINGS_Q" +msgstr "Nullstille innstillinger?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Innstillinger" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Smilebilde" + +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_OPT_MEMORY_CARD" +msgstr "Minnekort" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Strand/snø" + diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..4c791e2 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sek." + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sek." + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sek." + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Stabilizacja obrazu" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Nagrywanie z dźwiękiem" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automatyczny" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Wł." + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Upiększanie" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Czarno-białe" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Niebieski" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Centralnie-ważony" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Pochmurno" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Słonecznie" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Detekcja twarzy" + +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_FLASH" +msgstr "Flesz" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Jarzeniowe" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Auto Focus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horyzont" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Jakość obrazu" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Pocztówka" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Moje urządzenie" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Zaczekaj na utworzenie panoramy" + +msgid "IDS_CAM_BODY_RED" +msgstr "Czerwony" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Ekran podglądu" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Zmierzch/świt" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Autoportret" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "W cieniu" + +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_SPOT" +msgstr "Punktowy" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Domyślna pamięć" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Nie można zapisać. Za mało pamięci" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Jakość wideo" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Żarowe" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Zdjęcie akcji" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Winietowanie" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Upiększanie" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Wartość ekspozycji" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Tryb nocny" + +msgid "IDS_CAM_OPT_GPS" +msgstr "Lokalizacja" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Więcej" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Szybki podgląd" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Tryb fotografowania" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Powolny ruch" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Tryb użytkownika" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Aby używać kamery, włóż kartę pamięci" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Aby użyć etykiety GPS, włącz używanie sygnału GPS w Ustawieniach" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Wyjść z aparatu?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Bład podglądu" + +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_BODY_SOUND" +msgstr "Dźwięk" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Linie pomocnicze" + +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_BODY_GPS_TAG" +msgstr "Etykieta GPS" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Autoportret" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portret" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Pocztówka" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Tryb nocny" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "W pomieszczeniu" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Plaża/śnieg" + +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_OPT_FACE_DETECTION" +msgstr "Detekcja twarzy" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Tryb nagrywania" + +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_POP_RESET_SETTINGS_Q" +msgstr "Wyzerować ustawienia?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Ustawienia" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Detekcja uśmiechu" + +msgid "IDS_CAM_OPT_BURST_SHOT_ABB" +msgstr "Zdj. w trybie burst" + +msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL" +msgstr "Normalny" + +msgid "IDS_CAM_OPT_MESSAGE_LIMIT" +msgstr "Limit wiadomości" + +msgid "IDS_CAM_OPT_MEMORY_CARD" +msgstr "Karta pamięci" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Plaża/śnieg" + diff --git a/po/pt.po b/po/pt.po new file mode 100644 index 0000000..d0afdd0 --- /dev/null +++ b/po/pt.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 segs." + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 segs." + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 segs." + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Anti-vibrações" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Gravação de som" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automático" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Focagem automática" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Beleza" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Preto e branco" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Azul" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Medido ao centro" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Nublado" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Luz solar" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Detecção de rosto" + +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_FLASH" +msgstr "Flash" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescente" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Focagem" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizonte" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Qualidade de imagem" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Paisagem" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "O meu dispositivo" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Aguarde enquanto está a ser criado panorama" + +msgid "IDS_CAM_BODY_RED" +msgstr "Vermelho" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Ecrã de revisão" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Anoitecer/Amanhecer" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Auto-retrato" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sépia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Sombreado" + +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_SPOT" +msgstr "Ponto" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Armazenamento" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Impossível guardar. Memória insuficiente" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Qualidade de vídeo" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Incandescente" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Disparo de acção" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintage" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Disparo de beleza" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Valor de exposição" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Noite" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Mais" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Visualização rápida" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Modo de disparo" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Câmara lenta" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Modo de utilizador" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Insira o cartão de memória para utilizar a Câmara" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Activar Utilizar satélites GPS em Definições para utilizar a etiqueta GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Sair da câmara?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Erro de pré-visualização" + +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_BODY_SOUND" +msgstr "Som" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Directrizes" + +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_BODY_GPS_TAG" +msgstr "Etiqueta GPS" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Auto-retrato" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Retrato" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Paisagem" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Noite" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Desporto" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Festa/Interior" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Praia/Neve" + +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_OPT_FACE_DETECTION" +msgstr "Detecção de rosto" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Modo de gravação" + +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_POP_RESET_SETTINGS_Q" +msgstr "Repor definições?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Definições" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Disp. sorriso" + +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_OPT_MEMORY_CARD" +msgstr "Cartão de memória" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Praia/Neve" + diff --git a/po/ro.po b/po/ro.po new file mode 100644 index 0000000..1f12d09 --- /dev/null +++ b/po/ro.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sec" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sec" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sec" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Stabilizare de imagine" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Înregistrare audio" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automat" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Focalizare automată" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Înfrumuseţare" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Alb-negru" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Albastru" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Centrat" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Înnorat" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Lumina zilei" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Detectare faţă" + +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_FLASH" +msgstr "Bliţ" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescent" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Focalizare" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Orizont" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Calitate imagine" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Peisaj" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Dispozitivul meu" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Aşteptaţi până se creează panorama" + +msgid "IDS_CAM_BODY_RED" +msgstr "Roşu" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Examinare ecran" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Apus/răsărit" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Autoportret" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Umbră" + +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_SPOT" +msgstr "Spot" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Stocare" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Imposibil de salvat. Memorie insuficientă" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Calitate video" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Incandescent" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Foto. cu acţiune" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "De epocă" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Fotografiere cu înfrumuseţare" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Valoare expunere" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Noapte" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Mai multe" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panoramă" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Vizualizare" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Mod fotografiere" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Cu încetinit." + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Mod utilizator" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Inseraţi cartela de memorie pentru a utiliza Camera" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Activaţi Utilizare sateliţi GPS din Setări pentru a utiliza eticheta GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Ieşiţi din Camera foto?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Eroare examinare" + +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_BODY_SOUND" +msgstr "Sunet" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Grilă" + +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_BODY_GPS_TAG" +msgstr "Etichetă GPS" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Autoportret" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portret" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Peisaj" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Noapte" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sporturi" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Petrecere/interior" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Plajă/zăpadă" + +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_OPT_FACE_DETECTION" +msgstr "Detectare faţă" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Mod înregistrare" + +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_POP_RESET_SETTINGS_Q" +msgstr "Reiniţializaţi setările?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Setări" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Fotografiere zâmbet" + +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_OPT_MEMORY_CARD" +msgstr "Cartelă de memorie" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Plajă/zăpadă" + diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..bba8f5e --- /dev/null +++ b/po/ru.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 секунд" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 секунды" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 секунд" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Стабилизация изображения" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Запись звука" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Авто" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Автофокус" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Красивое лицо" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Черно-белое" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Синий" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Центровзвешенный" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Облачно" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Дневной свет" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Обнаружение лица" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Сбой при построении панорамных изображений. Попробуйте позже" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Вспышка" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Флуоресцентный свет" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Фокус" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Горизонт" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Качество изображения" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Пейзаж" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "Макросъемка" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "Матрица" + +msgid "IDS_CAM_BODY_METERING" +msgstr "Экспозамер" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Подождите... идет создание панорамы" + +msgid "IDS_CAM_BODY_RED" +msgstr "Красный" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Экран просмотра" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Сумерки/рассвет" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Автопортрет" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Сепия" + +msgid "IDS_CAM_BODY_SHADE" +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_SPOT" +msgstr "Точечный замер" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Память" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Невозможно сохранить. Недостаточно памяти" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Качество видео" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Лампа накаливания" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Снимок в движении" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Винтаж" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Красивый снимок" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Значение экспозиции" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Ночь" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Опции" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Панорама" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Быстрый просмотр" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Режим съемки" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Замедленное движение" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Чтобы использовать теги GPS, включите спутники GPS в разделе 'Параметры'" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Выключить камеру?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "Звук" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Сетка" + +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_BODY_GPS_TAG" +msgstr "Тег GPS" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "Политика безопасности ограничивает использование камеры" + +msgid "IDS_CAM_POP_SAVED" +msgstr "Соxранено" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "Автопортрет" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Портрет" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Пейзаж" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Ночь" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Спорт" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Вечеринка/в помещении" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "Обнаружение лица" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "Сбросить настройки?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Настройки" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "Карта памяти" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Пляж/снег" + diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..a7cc323 --- /dev/null +++ b/po/sk.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 s" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 s" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 s" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Stabilizácia obrazu" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Záznam zvuku" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automaticky" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Automatické zaostrovanie" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Krása" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Čiernobiely" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Modrá" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "S vyvážením na stred" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Oblačno" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Denné svetlo" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Detekcia tváre" + +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_FLASH" +msgstr "Blesk" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Žiarivka" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Zaostrené" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizont" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Kvalita obrázka" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Na šírku" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Moje zariadenie" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Počkajte, prosím, kým sa vytvorí panoráma" + +msgid "IDS_CAM_BODY_RED" +msgstr "Červená" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Obrazovka s ukážkou" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Súmrak/úsvit" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Autoportrét" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sépia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Tieň" + +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_SPOT" +msgstr "Bodové" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Úložisko" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Nedá sa uložiť. Nedostatok pamäte" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Kvalita videa" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Žiarovka" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Akčný záber" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Špičkový" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Krásna snímka" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Hodnota expozície" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Noc" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Ďalšie" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panoráma" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Rýchly náhľad" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Režim fotografovania" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Spomalený pohyb" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Používateľský režim" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Pred použitím fotoaparátu vložte pamäťovú kartu" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Pred použitím značky GPS povoľte funkciu Použiť satelity GPS v menu Nastavenia" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Ukončiť aplikáciu Fotoaparát?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Chyba ukážky" + +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_BODY_SOUND" +msgstr "Zvuk" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Vodiace čiary" + +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_BODY_GPS_TAG" +msgstr "Značka GPS" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Autoportrét" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Na výšku" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Na šírku" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Noc" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Šport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Oslava/interiér" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Pláž/Sneh" + +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_OPT_FACE_DETECTION" +msgstr "Detekcia tváre" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Režim nahrávania" + +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_POP_RESET_SETTINGS_Q" +msgstr "Vynulovať nastavenia?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Nastavenia" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Detekcia úsmevu" + +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_OPT_MEMORY_CARD" +msgstr "Pamäťová karta" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Pláž/Sneh" + diff --git a/po/sl.po b/po/sl.po new file mode 100644 index 0000000..a4639fe --- /dev/null +++ b/po/sl.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sek" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sek" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sek" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Odpravljanje tresenja" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Snemanje zvoka" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Samodejno" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Samodejno ostrenje" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Lepota" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Črno-belo" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Modro" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Sredinsko uteženo" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Oblačno" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Dnevna svetloba" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Zaznavanje obraza" + +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_FLASH" +msgstr "Bliskavica" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Fluorescentno" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Žarišče" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Obzorje" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Kakovost slike" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Pokrajina" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Moja naprava" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Počakajte, da se ustvari panorama" + +msgid "IDS_CAM_BODY_RED" +msgstr "Rdeče" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Ogled na zaslonu" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Svit/mrak" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Avtoportret" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Senca" + +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_SPOT" +msgstr "Točkovno" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Shranjevanje" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Ni mogoče shraniti, ker ni dovolj pomnilnika" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Kakovost videa" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Žarnica" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Akcijski posnetek" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintage (postaranje)" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Lepotni posnetek" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Vrednost osvetlitve" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Noč" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Več" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Predogled" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Snemalni način" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Počasno gibanje" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Način uporabnika" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Za uporabo kamere vstavite pomnilniško kartico" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "V Nastavitvah omogočite uporabo satelitov GPS, če želite uporabljati oznake GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Želite zapreti kamero?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Napaka predogleda" + +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_BODY_SOUND" +msgstr "Zvok" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Smernice" + +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_BODY_GPS_TAG" +msgstr "Oznaka GPS" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Avtoportret" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portret" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Pokrajina" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Noč" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Šport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Zabava/znotraj" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Plaža/sneg" + +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_OPT_FACE_DETECTION" +msgstr "Zaznavanje obraza" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Snemalni način" + +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_POP_RESET_SETTINGS_Q" +msgstr "Ponastavitev nastavitev?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Nastavitve" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Posn. nasmeška" + +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_OPT_MEMORY_CARD" +msgstr "Pomnilniška kartica" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Plaža/sneg" + diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 0000000..15cfab1 --- /dev/null +++ b/po/sr.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 s." + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 s." + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 s." + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Kompenzacija drmanja" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Snimanje zvuka" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Automatski" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Autofokus" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Lepota" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Crno-belo" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Plava" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Središnje procenjeno" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Oblačno" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Dnevna svetlost" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Detekcija lica" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Nije uspela izrada panoramske slike. Probaj kasnije" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Blic" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Flourescentno" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fokus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horizont" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Kvalitet snimka" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Pejzaž" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Moj uređaj" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Sačekaj dok se kreira panoramski snimak" + +msgid "IDS_CAM_BODY_RED" +msgstr "Crvena" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Pregledaj ekran" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Sumrak/Svitanje" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Autoportret" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Senka" + +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_SPOT" +msgstr "Tačkasto" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Memorija" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Nemoguće sačuvati. Nedovoljna memorija" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Kvalitet video zapisa" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Usijanje" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Akcioni snimak" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Vintidž" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Ulepšani snimak" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Nivo ekspozicije" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Noć" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Još" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Brz pregled" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Način snimanja" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Usporeni prikaz" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Korisnički režim" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Ubaci memorijsku karticu radi korišćenja kamere" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Omogući korišćenje GPS satelita u Podešavanjima za korišćenje GPS oznake" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Napustiti kameru?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Greška pri pregledanju" + +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_BODY_SOUND" +msgstr "Zvuk" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Smernice" + +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_BODY_GPS_TAG" +msgstr "GPS oznaka" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Autoportret" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Uspravno" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Pejzaž" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Noć" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sportovi" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Žurka/Unutra" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Plaža/Sneg" + +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_OPT_FACE_DETECTION" +msgstr "Detekcija lica" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Režim snimanja" + +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_POP_RESET_SETTINGS_Q" +msgstr "Resetovanje podešavanja?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Podešavanja" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Snimanje osmeha" + +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_OPT_MEMORY_CARD" +msgstr "Memorijska kartica" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Plaža/Sneg" + diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..5b86f19 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 s" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 s" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 s" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Bildstabilisering" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Ljudinspelning" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Auto" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Autofokus" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Skönhet" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Svartvitt" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Blå" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Mittviktad" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Mulet" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Dagsljus" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Ansiktssökning" + +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_FLASH" +msgstr "Fotolampa" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Lysrör" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Fokus" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Horisont" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Bildkvalitet" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Landskap" + +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_MMS" +msgstr "Bildmeddelande" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Min enhet" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Vänta medan panoramat skapas" + +msgid "IDS_CAM_BODY_RED" +msgstr "Röd" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Granska" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Skymning/Soluppgång" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Självporträtt" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepia" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Skugga" + +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_SPOT" +msgstr "Punkt" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Lagring" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Det går inte att spara. Otillräckligt minne" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Videokvalitet" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Glödlampa" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Action-bild" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Antik" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Skönhetsbild" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Exponeringsvärde" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Natt" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Mer" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panorama" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Snabbvisning" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Fotoläge" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Slowmotion" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Användarläge" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Sätt i minneskortet för att använda Kamera" + +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Aktivera Använda GPS-satelliter i Inställningarna för att använda GPS-tagg" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Avsluta kamera?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Fel vid förhandsgranskning" + +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_BODY_SOUND" +msgstr "Ljud" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Riktlinjer" + +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_BODY_GPS_TAG" +msgstr "GPS-tagg" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Självporträtt" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Porträtt" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Landskap" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Natt" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Sport" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Fest/Inomhus" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Strand/snö" + +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_OPT_FACE_DETECTION" +msgstr "Ansiktssökning" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Inspelningsläge" + +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_POP_RESET_SETTINGS_Q" +msgstr "Återställa inställningar?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Inställningar" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Leendeavkänning" + +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_OPT_MEMORY_CARD" +msgstr "Minneskort" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Strand/snö" + diff --git a/po/th.po b/po/th.po new file mode 100644 index 0000000..5c9ba68 --- /dev/null +++ b/po/th.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 ​วินาที" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 ​วินาที" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 ​วินาที" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "ระบบป้องการสั่นไหว" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "การ​บันทึก​เสียง" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "อัตโนมัติ" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "ออ​โต้​โฟกัส" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "บิวตี้" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "ขาวดำ​" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "สี​น้ำเงิน" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "เน้น​ตรง​กลาง" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "มีเมฆเป็นส่วน\nมาก" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "แสง​จ้า" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "ตรวจ​จับ​ใบ​หน้า" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "ไม่​สามารถ​สร้าง​ภาพ​แบบ​พา​โนรามา ลอง​ใหม่​ภาย​หลัง" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "แฟลช" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "ฟลูออ\nเรสเซนท์" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "โฟกัส" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "ขอบ​ฟ้า" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "คุณภาพ​รูป​ภาพ" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "ทิวทัศน์" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "มาโคร" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "เมท​ริกซ์" + +msgid "IDS_CAM_BODY_METERING" +msgstr "เครื่อง​วัด" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "โปรด​รอ​สัก​ครู่​ใน​ขณะ​ที่​สร้าง​ภาพ​มุม​กว้าง" + +msgid "IDS_CAM_BODY_RED" +msgstr "สี​แดง" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "แสดง​หน้า​จอ" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "เวลา​เย็น​ก่อน​ค่ำ/​พระ​อาทิตย์​ขึ้น" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "ถ่ายตัวเอง" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "ซีเปีย" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "เงา" + +msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA" +msgstr "พา​นอรา​ม่า" + +msgid "IDS_CAM_BODY_SINGLE" +msgstr "ชอท​เดียว" + +msgid "IDS_CAM_BODY_SLOW_MOTION" +msgstr "เคลื่อน\n​ไหว​ช้า" + +msgid "IDS_CAM_BODY_SPOT" +msgstr "ตำแหน่ง" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "ที่​เก็บ" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "ไม่​สามารถ​บันทึก​ได้ หน่วย​ความ​จำ​ไม่​พอ" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "คุณภาพ​วี​ดี​โอ" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "อินแคน\nเดสเซนท์" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "ถ่าย​ภาพ​แอ​คชั่น" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "วิ​นเท​จ" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "บิวตี้ชอท" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "ค่า​​ชดเชยแสง" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "กลาง​คืน" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "เพิ่ม​เติม" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "พา​นอรา​ม่า" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "แสดง​ด่วน" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "โหมด​ถ่าย​รูป" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "เคลื่อน\n​ไหว​ช้า" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "ให้​เปิด​ใช้​งาน ใช้​ดาว​เทียม GPS ​ใน​การ​ตั้ง​ค่า​เพื่อ​ใช้​แท็ก GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "ออก​จากกล้อง​ถ่าย​รูป?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "เสียง" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "ไก​ด์​ไลน์" + +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_BODY_GPS_TAG" +msgstr "แท็ก GPS" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "นโยบาย​ความ​ปลอดภัย​จำกัด​การ​ใช้​กล้อง​ถ่าย​รูป" + +msgid "IDS_CAM_POP_SAVED" +msgstr "บันทึก\nเรียบร้อย" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "ถ่ายตัวเอง" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "รูป​คน" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "ทิวทัศน์" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "กลาง​คืน" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "กีฬา" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "ปาร์ตี้ / ​ใน​ร่ม" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "ตรวจ​จับ​ใบ​หน้า" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "​ตั้ง​ค่าใหม่?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "การตั้งค่า" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "การ์ด​\nความ​จำ" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "ชาย​หาด/​หิมะ" + diff --git a/po/tr_TR.po b/po/tr_TR.po new file mode 100644 index 0000000..d5c1bf9 --- /dev/null +++ b/po/tr_TR.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 sn" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 sn" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 sn" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Sarsıntı önleme" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Ses kayıt" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Otomatik" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Otomatik odaklama" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Güzellik" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Siyah beyaz" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Mavi" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Orta-ağırlıklı" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Bulutlu" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Günışığı" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Yüz algılama" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Panoramik resimler oluşturulamadı. Daha sonra deneyin" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Flaş" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Floresan" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Odak" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Ufuk" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Resim kalitesi" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Manzara" + +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_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Cihazım" + +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Panorama oluşturulurken lütfen bekleyin" + +msgid "IDS_CAM_BODY_RED" +msgstr "Kırmızı" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "İnceleme ekranı" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Alacakaranlık/Şafak" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Otoportre" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Sepya" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Gölge" + +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_SPOT" +msgstr "Spot" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Kayıt yeri" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Kaydedilemiyor. Yeterli hafıza yok" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Video kalitesi" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Parlak" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Hareketli çekim" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Nostalji" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Güzellik çekimi" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Poz değeri" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Gece" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Diğer" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Panoramik" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Hızlı görüntü" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Çekim modu" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Yavaş hareketli" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Kullanıcı modu" + +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Kamera kullanmak için hafıza kartı takı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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "GPS etiketi kullanmak için Ayarlar'dan GPS uyduyu etkinleştirin" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Kamera kapatılsın mı?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Önizleme hatası" + +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_BODY_SOUND" +msgstr "Ses" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Yönergeler" + +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_BODY_GPS_TAG" +msgstr "GPS imi" + +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_BUTTON2_SELF_PORTRAIT" +msgstr "Otoportre" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Portre" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Manzara" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Gece" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Spor" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Parti/Kapalı alan" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Plaj/Kar" + +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_OPT_FACE_DETECTION" +msgstr "Yüz algılama" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Kayıt modu" + +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_POP_RESET_SETTINGS_Q" +msgstr "Ayarlar sıfırlansın mı?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Ayarlar" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Gülücük yakala :-)" + +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_OPT_MEMORY_CARD" +msgstr "Hafıza kartı" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Plaj/Kar" + diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..5f3c77c --- /dev/null +++ b/po/uk.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 сек." + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 сек." + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 сек." + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Стабілізація зображення" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Запис звуку" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Авто" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Автофокус" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Краса" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Чорно-біле" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Синій" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Відцентро\nвано" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Хмарно" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Денне світло" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Розпізнавання обличчя" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Не вдалося створити панорамні зображення. Спробуйте пізніше" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Спалах" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Флуоресцентний" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Шрифт меню" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Горизонт" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Якість зображення" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Пейзаж" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "Макро" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "Матриця" + +msgid "IDS_CAM_BODY_METERING" +msgstr "Замірювання" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Зачекайте, доки створюється панорама" + +msgid "IDS_CAM_BODY_RED" +msgstr "Червоний" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Екран перегляду" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Сутінки/світанок" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Автопортрет" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Сепія" + +msgid "IDS_CAM_BODY_SHADE" +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_SPOT" +msgstr "Точковий замір" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Пам'ять" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Неможливо зберегти. Недостатньо пам’яті" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Якість відео" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Штучне світло" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Знімок дії" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Вінтаж" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Прикрашення знімку" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Значення витримки" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Ніч" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "Більше" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Панорама" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Швидкий перегляд" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Режим зйомки" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Сповільнення" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Увімкніть функцію 'Використовувати GPS-супутники' в установках, щоб скористатися тегом GPS" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Вийти з камери?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "Звук" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Вказівки" + +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_BODY_GPS_TAG" +msgstr "Тег GPS" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "Використання камери обмежено політикою безпеки" + +msgid "IDS_CAM_POP_SAVED" +msgstr "Збережено" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "Автопортрет" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Портрет" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Пейзаж" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Ніч" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Спорт" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Вечірка/У приміщенні" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "Розпізнавання обличчя" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "Скинути параметри?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Установки" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "Карта пам’яті" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Пляж/сніг" + diff --git a/po/update-po.sh b/po/update-po.sh new file mode 100644 index 0000000..c5be4bf --- /dev/null +++ b/po/update-po.sh @@ -0,0 +1,57 @@ +#!/bin/sh + +PACKAGE=camera +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/vi.po b/po/vi.po new file mode 100644 index 0000000..4b74ad3 --- /dev/null +++ b/po/vi.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 giây" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 giây" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 giây" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "Chống rung" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "Ghi âm" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "Tự động" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "Chỉnh tiêu điểm tự động" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "Vẻ đẹp" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "Đen trắng" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "Xanh dương" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "Trọng tâm" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "Mây" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "Ban ngày" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "Nhận diện khuôn mặt" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "Không thể tạo ảnh toàn cảnh. Thử lại sau" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "Flash" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "Huỳnh quang" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "Tiêu điểm" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "Chân trời" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "Chất lượng ảnh" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "Phong cảnh" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "Macro" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "Ma trận" + +msgid "IDS_CAM_BODY_METERING" +msgstr "Đo sáng" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +msgstr "Thiết bị của bạn" + +msgid "IDS_CAM_BODY_NEGATIVE" +msgstr "Âm bản" + +msgid "IDS_CAM_BODY_NONE" +msgstr "Không có" + +msgid "IDS_CAM_BODY_OFF" +msgstr "Tắt" + +msgid "IDS_CAM_BODY_ON" +msgstr "Bật" + +msgid "IDS_CAM_BODY_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "Xin hãy chờ trong khi tạo toàn cảnh" + +msgid "IDS_CAM_BODY_RED" +msgstr "Đỏ" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "Xem tren màn hình" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "Bóng tối/Bình minh" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "Chụp chân dung" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "Nâu đỏ" + +msgid "IDS_CAM_BODY_SHADE" +msgstr "Độ tối" + +msgid "IDS_CAM_BODY_SHOOTING_MODE_PANORAMA" +msgstr "Toàn cảnh" + +msgid "IDS_CAM_BODY_SINGLE" +msgstr "Đơn" + +msgid "IDS_CAM_BODY_SLOW_MOTION" +msgstr "Di chuyển chậm" + +msgid "IDS_CAM_BODY_SPOT" +msgstr "Điểm" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "Lưu trữ" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "Không thể lưu. Không đủ bộ nhớ" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "Chất lượng video" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "Sáng chói" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "Chụp hành động" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "Tối ở mép ảnh" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "Chụp vẻ đẹp" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "Giá trị phơi sáng" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "Ban đêm" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "L.chọn" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "Toàn cảnh" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "Xem nhanh" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "Chế độ chụp" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "Di chuyển chậm" + +msgid "IDS_CAM_OPT_USER_MODE" +msgstr "Chế độ người dùng" + +msgid "IDS_CAM_OPT_WHITE_BALANCE_ABB" +msgstr "Cân bằng trắng" + +msgid "IDS_CAM_POP_CAPTURE_ERROR" +msgstr "Lỗi chụp" + +msgid "IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN" +msgstr "Đã vượt quá thời gian chụp. Bắt đầu lại" + +msgid "IDS_CAM_POP_INSERT_MEMORY_CARD_TO_USE_CAMERA" +msgstr "Lắp thẻ nhớ để sử dụng Máy ảnh" + +msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA" +msgstr "Không thể chạy Camera" + +msgid "IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL" +msgstr "Không thể khởi động máy chụp ảnh\n khi đang gọi" + +msgid "IDS_CAM_POP_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Bật sử dụng vệ tinh GPS tại Cài đặt để sử dụng GPS tag" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "Thoát Camera?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +msgstr "Lỗi xem trước" + +msgid "IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS" +msgstr "Đóng camera sau %d giây" + +msgid "IDS_CAM_POP_ENABLE_LOCATION_SERVICE_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "Hiệu lực hóa dịch vụ định vị trong Cài đặt để dùng thẻ GPS" + +msgid "IDS_CAM_BODY_SOUND" +msgstr "Âm thanh" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "Hướng dẫn" + +msgid "IDS_CAM_POP_PRESS_SHUTTER" +msgstr "Nhấn Bấm máy" + +msgid "IDS_CAM_POP_MOVE_CAMERA_SLOWLY_IN_DIRECTION_OF_ARROW" +msgstr "Từ từ di chuyển máy ảnh theo hướng mũi tên" + +msgid "IDS_CAM_POP_ERROR_MESSAGE" +msgstr "Menu không được hỗ trợ" + +msgid "IDS_CAM_BODY_GPS_TAG" +msgstr "Thẻ GPS" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "Chính sách bảo mật hạn chế việc sử dụng Camera" + +msgid "IDS_CAM_POP_SAVED" +msgstr "Đã lưu" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "Chụp chân dung" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "Chân dung" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "Phong cảnh" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "Ban đêm" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "Thể thao" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "Tiệc/ Trong nhà" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +msgstr "Biển/Tuyết" + +msgid "IDS_CAM_OPT_SCENEMODE_SUNSET" +msgstr "Hoàng hôn" + +msgid "IDS_CAM_OPT_SCENE_DAWN" +msgstr "Bình minh" + +msgid "IDS_CAM_BODY_SCENEMODE_FIREWORK" +msgstr "Pháo hoa" + +msgid "IDS_CAM_BODY_SCENEMODE_TEXT" +msgstr "Văn bản" + +msgid "IDS_CAM_OPT_SCENEMODE_CANDLELIGHT" +msgstr "Ánh sáng nến" + +msgid "IDS_CAM_OPT_SCENE_BACKLIGHT" +msgstr "Ngược sáng" + +msgid "IDS_CAM_OPT_AUTO_FOCUS" +msgstr "Chỉnh tiêu điểm tự động" + +msgid "IDS_CAM_OPT_FACE_DETECTION" +msgstr "Nhận diện khuôn mặt" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +msgstr "Chế độ ghi" + +msgid "IDS_CAM_BODY_SCENE_MODE" +msgstr "Chế độ phong cảnh" + +msgid "IDS_CAM_BODY_FOCUS_MODE" +msgstr "Chế độ tiêu điểm" + +msgid "IDS_CAM_BODY_OUTDOOR_VISIBILITY" +msgstr "Độ rõ khi ở ngoài trời" + +msgid "IDS_CAM_BODY_TIMER" +msgstr "Bộ đếm thời gian" + +msgid "IDS_CAM_BODY_EFFECTS" +msgstr "Hiệu ứng" + +msgid "IDS_CAM_OPT_EDIT_SHORTCUTS" +msgstr "Sửa phím tắt" + +msgid "IDS_CAM_BODY_AUTO_CONTRAST" +msgstr "Tự động tương phản" + +msgid "IDS_CAM_BODY_RESET_SETTINGS_RESET" +msgstr "Xóa" + +msgid "IDS_CAM_POP_RESET_SETTINGS_Q" +msgstr "Khởi động lại các cài đặt?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "Cài đặt" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +msgstr "Chụp nụ cười" + +msgid "IDS_CAM_OPT_BURST_SHOT_ABB" +msgstr "Chụp liên tiếp" + +msgid "IDS_CAM_BODY_RECORDINGMODE_NORMAL" +msgstr "Bình thường" + +msgid "IDS_CAM_OPT_MESSAGE_LIMIT" +msgstr "Giới hạn tin nhắn" + +msgid "IDS_CAM_OPT_MEMORY_CARD" +msgstr "Thẻ nhớ" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "Biển/Tuyết" + diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..53c3f06 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 秒" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 秒" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 秒" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "防震" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "录音" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "自动" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "自动对焦" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "美肌" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "黑白" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "蓝色" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "中心重点测光" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "阴天" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "白天" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "人脸识别" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "创建全景图像失败。 请稍后再试" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "闪光灯" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "荧光" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "聚焦" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "地平线" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "图像质量" + +msgid "IDS_CAM_BODY_ISO" +msgstr "感光度" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "风景" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "微距" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "矩阵" + +msgid "IDS_CAM_BODY_METERING" +msgstr "测光" + +msgid "IDS_CAM_BODY_MMS" +msgstr "彩信" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "正在创建全景图,请稍等" + +msgid "IDS_CAM_BODY_RED" +msgstr "红色" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "查看屏幕" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "黄昏/黎明" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "自拍" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "深褐色" + +msgid "IDS_CAM_BODY_SHADE" +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_SPOT" +msgstr "点" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "存储器" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "无法保存。存储空间不足" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "视频质量" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "白炽光" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "动态照片" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "仿旧" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "美肌拍摄" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "曝光值" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "夜间拍摄" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "更多" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "全景拍摄" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "快速查看" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "拍摄模式" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "慢动作" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "在设置中启动使用GPS卫星以使用GPS标签" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "退出相机?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "声音" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "构图线" + +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_BODY_GPS_TAG" +msgstr "GPS标签" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "安全政策限制使用照相机" + +msgid "IDS_CAM_POP_SAVED" +msgstr "已保存" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "自拍" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "肖像" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "风景" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "夜间拍摄" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "运动" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "宴会/室内" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "人脸识别" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "要复位设置吗?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "设定" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "存储卡" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "海滩/雪景" + diff --git a/po/zh_HK.po b/po/zh_HK.po new file mode 100644 index 0000000..eef2f31 --- /dev/null +++ b/po/zh_HK.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 秒" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 秒" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 秒" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "防震" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "錄音" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "自動" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "自動對焦" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "美麗" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "黑白" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "藍色" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "中央重點" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "陰天" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "白天" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "面孔偵測" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "無法建立全景影像。請稍後再試" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "閃光燈" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "日光燈" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "對焦" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "地平線" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "圖像品質" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "風景" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "微距" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "矩陣" + +msgid "IDS_CAM_BODY_METERING" +msgstr "測光" + +msgid "IDS_CAM_BODY_MMS" +msgstr "MMS" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "請稍候,正在建立全景" + +msgid "IDS_CAM_BODY_RED" +msgstr "紅色" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "預覽螢幕" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "黃昏/黎明" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "自拍" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "深褐色" + +msgid "IDS_CAM_BODY_SHADE" +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_SPOT" +msgstr "點" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "儲存位置" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "無法儲存。記憶體不足" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "影片品質" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "高色溫光管" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "動作拍攝" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "復古" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "美麗拍攝" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "曝光值" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "夜間" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "更多" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "全景" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "快速查看" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "拍攝模式" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "慢動作" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "在設定中開啟使用 GPS 衛星以使用 GPS 標籤" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "退出相機嗎?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "聲音" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "指引" + +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_BODY_GPS_TAG" +msgstr "GPS 標籤" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "安全政策限制使用相機" + +msgid "IDS_CAM_POP_SAVED" +msgstr "已儲存" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "自拍" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "人像" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "風景" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "夜間" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "運動" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "派對/室內" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "面孔偵測" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "要重設設定嗎?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "設定" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "記憶卡" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "海灘/雪景" + diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..4ffd12c --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,327 @@ +msgid "IDS_CAM_BODY_10_SEC" +msgstr "10 秒" + +msgid "IDS_CAM_BODY_2_SEC" +msgstr "2 秒" + +msgid "IDS_CAM_BODY_5_SEC" +msgstr "5 秒" + +msgid "IDS_CAM_BODY_ANTI_SHAKE" +msgstr "防手震" + +msgid "IDS_CAM_BODY_AUDIO_RECORDING" +msgstr "錄製聲音" + +msgid "IDS_CAM_BODY_AUTO" +msgstr "自動" + +msgid "IDS_CAM_BODY_AUTO_FOCUS" +msgstr "自動對焦" + +msgid "IDS_CAM_BODY_BEAUTY" +msgstr "美顏模式" + +msgid "IDS_CAM_BODY_BLACK_AND_WHITE" +msgstr "黑白" + +msgid "IDS_CAM_BODY_BLUE" +msgstr "藍色" + +msgid "IDS_CAM_BODY_CENTER_WEIGHTED" +msgstr "中央權重中央加重" + +msgid "IDS_CAM_BODY_CLOUDY" +msgstr "陰天" + +msgid "IDS_CAM_BODY_DAYLIGHT" +msgstr "白天" + +msgid "IDS_CAM_BODY_FACE_DETECTION" +msgstr "臉部偵測" + +msgid "IDS_CAM_BODY_FAILED_TO_BUILD_PANORAMIC_IMAGES_TRY_LATER" +msgstr "無法組建全景影像。請稍後再試" + +msgid "IDS_CAM_BODY_FLASH" +msgstr "閃光燈" + +msgid "IDS_CAM_BODY_FLUORESCENT" +msgstr "螢光燈" + +msgid "IDS_CAM_BODY_FOCUS" +msgstr "對焦" + +msgid "IDS_CAM_BODY_HORIZON" +msgstr "水平線" + +msgid "IDS_CAM_BODY_IMAGE_QUALITY" +msgstr "影像品質" + +msgid "IDS_CAM_BODY_ISO" +msgstr "ISO" + +msgid "IDS_CAM_BODY_LANDSCAPE" +msgstr "風景" + +msgid "IDS_CAM_BODY_MACRO" +msgstr "近拍" + +msgid "IDS_CAM_BODY_MATRIX" +msgstr "矩陣" + +msgid "IDS_CAM_BODY_METERING" +msgstr "測光" + +msgid "IDS_CAM_BODY_MMS" +msgstr "多媒體訊息" + +msgid "IDS_CAM_BODY_MY_DEVICE" +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_PLEASE_WAIT_WHILE_CREATING_PANORAMA" +msgstr "請稍候,正在建立全景" + +msgid "IDS_CAM_BODY_RED" +msgstr "紅色" + +msgid "IDS_CAM_BODY_REVIEW_SCREEN" +msgstr "檢視畫面" + +msgid "IDS_CAM_BODY_SCENEMODE_DUSK_DAWN" +msgstr "黃昏/黎明" + +msgid "IDS_CAM_BODY_SELF_SHOT" +msgstr "自拍" + +msgid "IDS_CAM_BODY_SEPIA" +msgstr "褐色" + +msgid "IDS_CAM_BODY_SHADE" +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_SPOT" +msgstr "點" + +msgid "IDS_CAM_BODY_STORAGE" +msgstr "儲存空間" + +msgid "IDS_CAM_BODY_UNABLE_TO_SAVE_NOT_ENOUGH_MEMORY" +msgstr "無法儲存。記憶體不足" + +msgid "IDS_CAM_BODY_VIDEO_QUALITY" +msgstr "影片品質" + +msgid "IDS_CAM_BODY_WHITEBALANCE_INCANDESCENT" +msgstr "白熾燈" + +msgid "IDS_CAM_BUTTON_ACTION_SHOT" +msgstr "動作" + +msgid "IDS_CAM_BUTTON_VINTAGE" +msgstr "復古" + +msgid "IDS_CAM_OPT_BEAUTY_SHOT" +msgstr "美顏模式" + +msgid "IDS_CAM_OPT_CAMERAEXPOSUREVALUE" +msgstr "曝光值" + +msgid "IDS_CAM_OPT_CAMERASCENESNIGHT" +msgstr "夜間" + +msgid "IDS_CAM_OPT_GPS" +msgstr "GPS" + +msgid "IDS_CAM_OPT_MORE" +msgstr "更多" + +msgid "IDS_CAM_OPT_PANORAMA" +msgstr "全景" + +msgid "IDS_CAM_OPT_QUICKVIEW" +msgstr "快速檢視" + +msgid "IDS_CAM_OPT_SHOOTING_MODE" +msgstr "拍攝模式" + +msgid "IDS_CAM_OPT_SLOW_MOTION" +msgstr "慢動作" + +msgid "IDS_CAM_OPT_USER_MODE" +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_INSERT_MEMORY_CARD_TO_USE_CAMERA" +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_ENABLE_USE_GPS_SATELLITES_IN_SETTINGS_TO_USE_GPS_TAG" +msgstr "在設定中開啟使用 GPS 衛星以使用 GPS 標籤" + +msgid "IDS_CAM_POP_EXIT_CAMERA_Q" +msgstr "離開相機嗎?" + +msgid "IDS_CAM_POP_PREVIEW_ERROR" +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_BODY_SOUND" +msgstr "音效" + +msgid "IDS_CAM_BODY_GUIDELINE" +msgstr "指引線" + +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_BODY_GPS_TAG" +msgstr "GPS" + +msgid "IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA" +msgstr "由於安全政策,使用相機被限制" + +msgid "IDS_CAM_POP_SAVED" +msgstr "已儲存" + +msgid "IDS_CAM_BUTTON2_SELF_PORTRAIT" +msgstr "自拍" + +msgid "IDS_CAM_OPT_SCENE_PORTRAIT" +msgstr "人像" + +msgid "IDS_CAM_OPT_SCENE_LANDSCAPE" +msgstr "風景" + +msgid "IDS_CAM_OPT_SCENEMODE_NIGHT" +msgstr "夜間" + +msgid "IDS_CAM_OPT_SCENE_SPORTS" +msgstr "運動" + +msgid "IDS_CAM_OPT_SCENEMODE_PARTY_INDOOR" +msgstr "派對/室內" + +msgid "IDS_CAM_BODY_BEACH_SNOW" +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_OPT_FACE_DETECTION" +msgstr "臉部偵測" + +msgid "IDS_CAM_OPT_RECORDING_MODE" +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_POP_RESET_SETTINGS_Q" +msgstr "要重設設定嗎?" + +msgid "IDS_CAM_BODY_SETTINGS" +msgstr "設定" + +msgid "IDS_CAM_OPT_SMILE_SHOT" +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_OPT_MEMORY_CARD" +msgstr "記憶卡" + +msgid "IDS_CAM_OPT_BEACH_SNOW" +msgstr "海灘/雪景" + diff --git a/sounds/Shutter_01.wav b/sounds/Shutter_01.wav new file mode 100644 index 0000000000000000000000000000000000000000..3752fc4b9fc11f74fefe7b6485bd3e7da5fa14f7 GIT binary patch literal 31228 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
    uzV_6j1%cjf`!XY))0)oA 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 literal 0 HcmV?d00001 diff --git a/sounds/Shutter_03.wav b/sounds/Shutter_03.wav new file mode 100644 index 0000000000000000000000000000000000000000..ba210d73b94a8acb8005357f0987c0eb2bfdf34b GIT binary patch literal 35326 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 C&6hL) literal 0 HcmV?d00001 diff --git a/sounds/af_fail.wav b/sounds/af_fail.wav new file mode 100644 index 0000000000000000000000000000000000000000..cfc50c0c2c3d980eb8dbd981defb90b7b0769456 GIT binary patch literal 18132 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 literal 0 HcmV?d00001 diff --git a/sounds/af_ok.wav b/sounds/af_ok.wav new file mode 100644 index 0000000000000000000000000000000000000000..bf2b432dc65dca79596a23143fdfbfb809f4ddd6 GIT binary patch literal 16104 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