From 6e2751e5363f487452409afd70e33875f90dfb2a Mon Sep 17 00:00:00 2001 From: Sehong Na Date: Sat, 31 May 2014 12:29:13 +0900 Subject: [PATCH 1/1] Initialize Tizen 2.3 --- .cproject | 370 ++ .project | 89 + CMakeLists.txt | 33 + LICENSE.APLv2.0 | 202 + LICENSE.Flora | 206 + NOTICE | 9 + data/reader.js | 937 +++ inc/IntAddBookmarkForm.h | 141 + inc/IntAddressbar.h | 221 + inc/IntArticleReaderForm.h | 158 + inc/IntBookmarkData.h | 240 + inc/IntBookmarkListForm.h | 156 + inc/IntBookmarkPresentationModel.h | 336 ++ inc/IntBrightnessForm.h | 105 + inc/IntCommonLib.h | 114 + inc/IntConfirmationPopup.h | 66 + inc/IntCreateBookmarkFolderForm.h | 101 + inc/IntDefaultCustomItem.h | 80 + inc/IntDropDownCustomItem.h | 112 + inc/IntEditBookmarkListForm.h | 122 + inc/IntEditHistoryListForm.h | 156 + inc/IntEditHomePageForm.h | 114 + inc/IntFaviconManager.h | 137 + inc/IntFontManager.h | 115 + inc/IntFormFactory.h | 85 + inc/IntHistoryData.h | 250 + inc/IntHistoryListForm.h | 230 + inc/IntHistoryPresentationModel.h | 266 + inc/IntIAddressbarEventListener.h | 61 + inc/IntISettingChangeListener.h | 48 + inc/IntInternetApp.h | 97 + inc/IntMainForm.h | 410 ++ inc/IntMainFrame.h | 52 + inc/IntMultipleWindowForm.h | 163 + inc/IntMultipleWindowPresentationModel.h | 238 + inc/IntNotificationPanel.h | 83 + inc/IntPresentationModelBase.h | 184 + inc/IntRadioCustomItem.h | 100 + inc/IntReaderFontSizeForm.h | 89 + inc/IntSceneRegister.h | 95 + inc/IntSettingClearPrivateDataForm.h | 212 + inc/IntSettingForm.h | 215 + inc/IntSettingPresentationModel.h | 482 ++ inc/IntSettingToggleCustomItem.h | 104 + inc/IntSharePopup.h | 196 + inc/IntSharePopup.h.bak | 158 + inc/IntTypes.h | 73 + manifest.xml | 107 + packaging/apps.Internet.spec | 80 + res/.workflow | Bin 0 -> 260 bytes res/ara-AE.xml | 345 ++ res/aze-AZ.xml | 345 ++ res/bul-BG.xml | 345 ++ res/cat-ES.xml | 345 ++ res/ces-CZ.xml | 345 ++ res/dan-DK.xml | 345 ++ res/deu-DE.xml | 345 ++ res/ell-GR.xml | 345 ++ res/eng-GB.xml | 349 ++ res/eng-PH.xml | 345 ++ res/eng-US.xml | 350 ++ res/est-EE.xml | 345 ++ res/eus-ES.xml | 345 ++ res/fin-FI.xml | 345 ++ res/fra-CA.xml | 345 ++ res/fra-FR.xml | 345 ++ res/gle-IE.xml | 345 ++ res/glg-ES.xml | 345 ++ res/hin-IN.xml | 345 ++ res/hrv-HR.xml | 345 ++ res/hun-HU.xml | 345 ++ res/hye-AM.xml | 345 ++ res/isl-IS.xml | 345 ++ res/ita-IT.xml | 345 ++ res/jpn-JP.xml | 345 ++ res/kat-GE.xml | 345 ++ res/kaz-KZ.xml | 345 ++ res/kor-KR.xml | 345 ++ res/lav-LV.xml | 345 ++ res/lit-LT.xml | 345 ++ res/mkd-MK.xml | 345 ++ res/nld-NL.xml | 345 ++ res/nob-NO.xml | 345 ++ res/pol-PL.xml | 345 ++ res/por-BR.xml | 345 ++ res/por-PT.xml | 345 ++ res/ron-RO.xml | 345 ++ res/rus-RU.xml | 345 ++ .../00_button_sweep_delete.9.png | Bin 0 -> 980 bytes .../00_button_sweep_delete_press.9.png | Bin 0 -> 762 bytes .../I01_controlbar_icon_delete.png | Bin 0 -> 593 bytes .../I01_controlbar_icon_delete_disable.png | Bin 0 -> 518 bytes .../I01_toolbar_input_field.#.png | Bin 0 -> 1045 bytes .../I01_toolbar_input_field_findword.#.png | Bin 0 -> 1362 bytes .../00_button_expand_closed.png | Bin 0 -> 3863 bytes .../00_button_expand_closed_press.png | Bin 0 -> 3030 bytes .../00_button_expand_opened.png | Bin 0 -> 3469 bytes .../00_button_expand_opened_press.png | Bin 0 -> 2987 bytes res/screen-density-xhigh/00_button_off.png | Bin 0 -> 4295 bytes res/screen-density-xhigh/00_button_on.png | Bin 0 -> 4608 bytes .../00_button_sweep_delete.9.png | Bin 0 -> 1437 bytes .../00_button_sweep_delete_press.9.png | Bin 0 -> 1555 bytes res/screen-density-xhigh/00_circle_bg_ef.png | Bin 0 -> 3420 bytes res/screen-density-xhigh/00_circle_bg_ef_press.png | Bin 0 -> 2987 bytes res/screen-density-xhigh/00_circle_button.png | Bin 0 -> 7659 bytes .../00_circle_button_Expand_closed.png | Bin 0 -> 7318 bytes .../00_circle_button_Expand_open.png | Bin 0 -> 7148 bytes res/screen-density-xhigh/00_circle_button_dim.png | Bin 0 -> 7659 bytes .../00_circle_button_press.png | Bin 0 -> 6247 bytes .../00_icon_favorite_off_74x74.png | Bin 0 -> 2483 bytes .../00_icon_favorite_on_74x74.png | Bin 0 -> 2751 bytes .../00_list_expand_closed_press.png | Bin 0 -> 3098 bytes .../00_list_expand_opened_press.png | Bin 0 -> 3032 bytes res/screen-density-xhigh/1.png | Bin 0 -> 690 bytes res/screen-density-xhigh/2.png | Bin 0 -> 1020 bytes res/screen-density-xhigh/3.png | Bin 0 -> 1075 bytes res/screen-density-xhigh/4.png | Bin 0 -> 955 bytes res/screen-density-xhigh/5.png | Bin 0 -> 1017 bytes res/screen-density-xhigh/6.png | Bin 0 -> 1061 bytes res/screen-density-xhigh/7.png | Bin 0 -> 940 bytes res/screen-density-xhigh/8.png | Bin 0 -> 1067 bytes res/screen-density-xhigh/9.png | Bin 0 -> 1053 bytes res/screen-density-xhigh/EditBackground.png | Bin 0 -> 181 bytes .../I01_Nocontents_Bookmarks.png | Bin 0 -> 8539 bytes .../I01_PlugIn_icon_Article_reader_temp.png | Bin 0 -> 3754 bytes res/screen-density-xhigh/I01_URL_bookmark_icon.png | Bin 0 -> 6037 bytes .../I01_URL_toolbar_button.png | Bin 0 -> 4651 bytes .../I01_controlbar_icon_Play_disabled.png | Bin 0 -> 497 bytes .../I01_controlbar_icon_Play_temp.png | Bin 0 -> 504 bytes .../I01_controlbar_icon_Play_temp_press.png | Bin 0 -> 505 bytes .../I01_controlbar_icon_backward_disabled.png | Bin 0 -> 491 bytes .../I01_controlbar_icon_backward_temp.png | Bin 0 -> 499 bytes .../I01_controlbar_icon_backward_temp_press.png | Bin 0 -> 499 bytes .../I01_controlbar_icon_bookmark.png | Bin 0 -> 3427 bytes .../I01_controlbar_icon_compose.png | Bin 0 -> 790 bytes .../I01_controlbar_icon_compose_diabled.png | Bin 0 -> 712 bytes .../I01_controlbar_icon_create.png | Bin 0 -> 481 bytes .../I01_controlbar_icon_create_disable.png | Bin 0 -> 476 bytes .../I01_controlbar_icon_create_folder.png | Bin 0 -> 633 bytes .../I01_controlbar_icon_create_folder_diabled.png | Bin 0 -> 560 bytes .../I01_controlbar_icon_delete.png | Bin 0 -> 593 bytes .../I01_controlbar_icon_delete_disable.png | Bin 0 -> 518 bytes .../I01_controlbar_icon_more.png | Bin 0 -> 3097 bytes .../I01_controlbar_icon_multiview.png | Bin 0 -> 857 bytes res/screen-density-xhigh/I01_field_btn_Clear.png | Bin 0 -> 3495 bytes .../I01_field_btn_Clear_Press.png | Bin 0 -> 3318 bytes .../I01_field_btn_Clear_temp.png | Bin 0 -> 3370 bytes res/screen-density-xhigh/I01_fit_screen.png | Bin 0 -> 3740 bytes res/screen-density-xhigh/I01_font_button_left.png | Bin 0 -> 5858 bytes .../I01_font_button_left_dim.png | Bin 0 -> 5749 bytes .../I01_font_button_left_press.png | Bin 0 -> 6412 bytes res/screen-density-xhigh/I01_font_button_right.png | Bin 0 -> 6327 bytes .../I01_font_button_right_dim.png | Bin 0 -> 6230 bytes .../I01_font_button_right_press.png | Bin 0 -> 6878 bytes res/screen-density-xhigh/I01_icon_Back.png | Bin 0 -> 2798 bytes res/screen-density-xhigh/I01_icon_Back_press.png | Bin 0 -> 3047 bytes res/screen-density-xhigh/I01_icon_bookmark_bg.png | Bin 0 -> 6329 bytes .../I01_icon_bookmark_off_temp.png | Bin 0 -> 3944 bytes .../I01_icon_bookmark_on_temp.png | Bin 0 -> 4165 bytes .../I01_icon_default_favicon.png | Bin 0 -> 3408 bytes res/screen-density-xhigh/I01_icon_find word.png | Bin 0 -> 3561 bytes res/screen-density-xhigh/I01_icon_folder_open.png | Bin 0 -> 3500 bytes res/screen-density-xhigh/I01_icon_more.png | Bin 0 -> 1497 bytes res/screen-density-xhigh/I01_icon_more_press.png | Bin 0 -> 1570 bytes .../I01_icon_page_navigation.png | Bin 0 -> 3575 bytes .../I01_icon_page_navigation_01.png | Bin 0 -> 4608 bytes .../I01_icon_page_navigation_02.png | Bin 0 -> 4901 bytes .../I01_icon_page_navigation_03.png | Bin 0 -> 4928 bytes .../I01_icon_page_navigation_04.png | Bin 0 -> 4790 bytes .../I01_icon_page_navigation_05.png | Bin 0 -> 4917 bytes .../I01_icon_page_navigation_06.png | Bin 0 -> 4975 bytes .../I01_icon_page_navigation_07.png | Bin 0 -> 4781 bytes .../I01_icon_page_navigation_08.png | Bin 0 -> 4986 bytes .../I01_icon_page_navigation_09.png | Bin 0 -> 4966 bytes .../I01_icon_page_navigation_10.png | Bin 0 -> 4917 bytes .../I01_icon_page_navigation_bar.png | Bin 0 -> 3564 bytes res/screen-density-xhigh/I01_icon_plus.png | Bin 0 -> 3611 bytes res/screen-density-xhigh/I01_icon_plus_press.png | Bin 0 -> 3695 bytes res/screen-density-xhigh/I01_icon_private.png | Bin 0 -> 3081 bytes res/screen-density-xhigh/I01_icon_upper folder.png | Bin 0 -> 3197 bytes res/screen-density-xhigh/I01_page_button_left.png | Bin 0 -> 3810 bytes res/screen-density-xhigh/I01_page_button_right.png | Bin 0 -> 3817 bytes res/screen-density-xhigh/I01_popup_bg.9.png | Bin 0 -> 1005 bytes res/screen-density-xhigh/I01_popup_bottom_bg.9.png | Bin 0 -> 108 bytes res/screen-density-xhigh/I01_right_arrow.png | Bin 0 -> 5057 bytes res/screen-density-xhigh/I01_search_icon.png | Bin 0 -> 3392 bytes .../I01_search_icon_refresh.png | Bin 0 -> 3482 bytes .../I01_search_icon_refresh_temp.png | Bin 0 -> 3546 bytes .../I01_search_input_field_bg.#.png | Bin 0 -> 305 bytes .../I01_search_list_icon_favorite.png | Bin 0 -> 4844 bytes .../I01_search_list_icon_favorite_press.png | Bin 0 -> 4170 bytes .../I01_search_list_icon_history.png | Bin 0 -> 6224 bytes .../I01_tab_icon_bookmarks.png | Bin 0 -> 621 bytes res/screen-density-xhigh/I01_tab_icon_history.png | Bin 0 -> 804 bytes res/screen-density-xhigh/I01_title_btn.9.png | Bin 0 -> 348 bytes .../I01_title_btn_icon_down.png | Bin 0 -> 3197 bytes .../I01_title_btn_icon_down_disabled.png | Bin 0 -> 3304 bytes .../I01_title_btn_icon_down_pressed.png | Bin 0 -> 525 bytes res/screen-density-xhigh/I01_title_btn_icon_up.png | Bin 0 -> 3184 bytes .../I01_title_btn_icon_up_disabled.png | Bin 0 -> 3298 bytes .../I01_title_btn_icon_up_pressed.png | Bin 0 -> 520 bytes res/screen-density-xhigh/I01_title_btn_press.9.png | Bin 0 -> 316 bytes res/screen-density-xhigh/I01_title_font_bg.png | Bin 0 -> 1899 bytes .../I01_title_progress_bar.png | Bin 0 -> 238 bytes .../I01_title_progress_bar_bg.png | Bin 0 -> 183 bytes res/screen-density-xhigh/I01_toolbar_bg_01.png | Bin 0 -> 2852 bytes res/screen-density-xhigh/I01_toolbar_bg_02.png | Bin 0 -> 2821 bytes res/screen-density-xhigh/I01_toolbar_bg_h.png | Bin 0 -> 2801 bytes .../I01_toolbar_icon_back_press_web.png | Bin 0 -> 3978 bytes .../I01_toolbar_icon_back_web.png | Bin 0 -> 3836 bytes .../I01_toolbar_icon_back_web_disabled.png | Bin 0 -> 3536 bytes .../I01_toolbar_icon_forward_press_web.png | Bin 0 -> 3900 bytes .../I01_toolbar_icon_forward_web.png | Bin 0 -> 3764 bytes .../I01_toolbar_icon_forward_web_disabled.png | Bin 0 -> 3547 bytes .../I01_toolbar_icon_windows_manager_01.png | Bin 0 -> 3977 bytes .../I01_toolbar_icon_windows_manager_01_press.png | Bin 0 -> 4005 bytes .../I01_toolbar_icon_windows_manager_02.png | Bin 0 -> 4542 bytes .../I01_toolbar_icon_windows_manager_02_press.png | Bin 0 -> 4734 bytes .../I01_toolbar_icon_windows_manager_03.png | Bin 0 -> 4807 bytes .../I01_toolbar_icon_windows_manager_03_press.png | Bin 0 -> 4983 bytes .../I01_toolbar_icon_windows_manager_04.png | Bin 0 -> 4261 bytes .../I01_toolbar_icon_windows_manager_04_press.png | Bin 0 -> 4409 bytes .../I01_toolbar_icon_windows_manager_05.png | Bin 0 -> 4665 bytes .../I01_toolbar_icon_windows_manager_05_press.png | Bin 0 -> 4824 bytes .../I01_toolbar_icon_windows_manager_06.png | Bin 0 -> 4785 bytes .../I01_toolbar_icon_windows_manager_06_press.png | Bin 0 -> 4953 bytes .../I01_toolbar_icon_windows_manager_07.png | Bin 0 -> 4203 bytes .../I01_toolbar_icon_windows_manager_07_press.png | Bin 0 -> 4346 bytes .../I01_toolbar_icon_windows_manager_08.png | Bin 0 -> 4863 bytes .../I01_toolbar_icon_windows_manager_08_press.png | Bin 0 -> 5042 bytes .../I01_toolbar_icon_windows_manager_09.png | Bin 0 -> 4788 bytes .../I01_toolbar_icon_windows_manager_09_press.png | Bin 0 -> 4946 bytes .../I01_toolbar_icon_windows_manager_empty.png | Bin 0 -> 3667 bytes .../I01_toolbar_input_field.#.png | Bin 0 -> 1918 bytes .../I01_toolbar_input_field_findword.#.png | Bin 0 -> 1921 bytes .../I01_toolbar_input_field_findwordbkp.#.png | Bin 0 -> 1754 bytes res/screen-density-xhigh/ListIcon.png | Bin 0 -> 3268 bytes res/screen-density-xhigh/ListLeftSide.png | Bin 0 -> 843 bytes .../Notification_download_complete.png | Bin 0 -> 2618 bytes .../Notification_download_failed.png | Bin 0 -> 4092 bytes res/screen-density-xhigh/Thumbs.db | Bin 0 -> 224366 bytes res/screen-density-xhigh/deleteIcon.png | Bin 0 -> 6454 bytes res/screen-density-xhigh/edit_item.png | Bin 0 -> 18574 bytes res/screen-density-xhigh/opennewwindow.png | Bin 0 -> 3831 bytes res/screen-density-xhigh/private_on.png | Bin 0 -> 684 bytes res/screen-size-normal/IDL_ADDRESSBAR.xml | 52 + res/screen-size-normal/IDL_ADD_BOOKMARK.xml | 73 + res/screen-size-normal/IDL_ARTICLE_READER.xml | 27 + res/screen-size-normal/IDL_ARTICLE_READER_FORM.xml | 39 + res/screen-size-normal/IDL_BLANK_PANEL.xml | 12 + res/screen-size-normal/IDL_BOOKMARK_LIST.xml | 36 + res/screen-size-normal/IDL_BRIGHTNESS.xml | 35 + res/screen-size-normal/IDL_CONFIRMATION_POPUP.xml | 28 + .../IDL_CREATE_BOOKMARK_FOLDER.xml | 36 + res/screen-size-normal/IDL_EDIT_BOOKMARK_LIST.xml | 44 + res/screen-size-normal/IDL_EDIT_HISTORY_LIST.xml | 40 + res/screen-size-normal/IDL_EDIT_HOME_PAGE.xml | 36 + res/screen-size-normal/IDL_FIND_ON_PAGE.xml | 84 + res/screen-size-normal/IDL_FONT_SIZE.xml | 27 + res/screen-size-normal/IDL_FORM.xml | 84 + res/screen-size-normal/IDL_HISTORY_LIST.xml | 34 + res/screen-size-normal/IDL_MULTIPLE_WINDOW.xml | 27 + res/screen-size-normal/IDL_NOTIFICATION_PANEL.xml | 17 + res/screen-size-normal/IDL_READER.xml | 33 + res/screen-size-normal/IDL_SETTINGS.xml | 21 + .../IDL_SETTINGS_CLEAR_PRIVATE_DATA.xml | 27 + res/screen-size-normal/IDL_SETTING_FORM.xml | 23 + res/screen-size-normal/IDL_SHARE_POPUP.xml | 22 + res/slk-SK.xml | 345 ++ res/slv-SI.xml | 345 ++ res/spa-ES.xml | 345 ++ res/spa-MX.xml | 345 ++ res/srp-RS.xml | 345 ++ res/swe-SE.xml | 345 ++ res/tur-TR.xml | 345 ++ res/ukr-UA.xml | 345 ++ res/uzb-UZ.xml | 345 ++ res/zho-CN.xml | 345 ++ res/zho-HK.xml | 345 ++ res/zho-SG.xml | 345 ++ res/zho-TW.xml | 345 ++ shared/data/nofile.dummy | 0 shared/res/screen-density-xhigh/mainmenu.png | Bin 0 -> 57662 bytes shared/trusted/nofile.dummy | 0 src/IntAddBookmarkForm.cpp | 1251 ++++ src/IntAddressbar.cpp | 739 +++ src/IntArticleReaderForm.cpp | 991 ++++ src/IntBookmarkData.cpp | 261 + src/IntBookmarkListForm.cpp | 1251 ++++ src/IntBookmarkPresentationModel.cpp | 1349 +++++ src/IntBrightnessForm.cpp | 360 ++ src/IntCommonLib.cpp | 239 + src/IntConfirmationPopup.cpp | 124 + src/IntCreateBookmarkFolderForm.cpp | 503 ++ src/IntDefaultCustomItem.cpp | 89 + src/IntDropDownCustomItem.cpp | 209 + src/IntEditBookmarkListForm.cpp | 1029 ++++ src/IntEditHistoryListForm.cpp | 1274 ++++ src/IntEditHomePageForm.cpp | 299 + src/IntFaviconManager.cpp | 332 ++ src/IntFontManager.cpp | 170 + src/IntFormFactory.cpp | 320 ++ src/IntHistory.cpp | 287 + src/IntHistoryListForm.cpp | 2005 +++++++ src/IntHistoryPresentationModel.cpp | 1262 ++++ src/IntInternetApp.cpp | 558 ++ src/IntInternetEntry.cpp | 72 + src/IntMainForm.cpp | 6078 ++++++++++++++++++++ src/IntMainFrame.cpp | 78 + src/IntMultipleWindowForm.cpp | 673 +++ src/IntMultipleWindowPresentationModel.cpp | 288 + src/IntNotificationPanel.cpp | 135 + src/IntPresentationModelBase.cpp | 1033 ++++ src/IntRadioCustomItem.cpp | 85 + src/IntReaderFontSizeForm.cpp | 163 + src/IntSceneRegister.cpp | 128 + src/IntSettingClearPrivateDataForm.cpp | 338 ++ src/IntSettingForm.cpp | 1259 ++++ src/IntSettingPresentationModel.cpp | 717 +++ src/IntSettingToggleCustomItem.cpp | 87 + src/IntSharePopup.cpp | 744 +++ 321 files changed, 53639 insertions(+) create mode 100644 .cproject create mode 100644 .project create mode 100644 CMakeLists.txt create mode 100644 LICENSE.APLv2.0 create mode 100755 LICENSE.Flora create mode 100644 NOTICE create mode 100644 data/reader.js create mode 100644 inc/IntAddBookmarkForm.h create mode 100644 inc/IntAddressbar.h create mode 100644 inc/IntArticleReaderForm.h create mode 100644 inc/IntBookmarkData.h create mode 100644 inc/IntBookmarkListForm.h create mode 100644 inc/IntBookmarkPresentationModel.h create mode 100644 inc/IntBrightnessForm.h create mode 100644 inc/IntCommonLib.h create mode 100644 inc/IntConfirmationPopup.h create mode 100644 inc/IntCreateBookmarkFolderForm.h create mode 100644 inc/IntDefaultCustomItem.h create mode 100644 inc/IntDropDownCustomItem.h create mode 100644 inc/IntEditBookmarkListForm.h create mode 100644 inc/IntEditHistoryListForm.h create mode 100644 inc/IntEditHomePageForm.h create mode 100644 inc/IntFaviconManager.h create mode 100644 inc/IntFontManager.h create mode 100644 inc/IntFormFactory.h create mode 100644 inc/IntHistoryData.h create mode 100644 inc/IntHistoryListForm.h create mode 100644 inc/IntHistoryPresentationModel.h create mode 100644 inc/IntIAddressbarEventListener.h create mode 100644 inc/IntISettingChangeListener.h create mode 100644 inc/IntInternetApp.h create mode 100644 inc/IntMainForm.h create mode 100644 inc/IntMainFrame.h create mode 100644 inc/IntMultipleWindowForm.h create mode 100644 inc/IntMultipleWindowPresentationModel.h create mode 100644 inc/IntNotificationPanel.h create mode 100644 inc/IntPresentationModelBase.h create mode 100644 inc/IntRadioCustomItem.h create mode 100644 inc/IntReaderFontSizeForm.h create mode 100644 inc/IntSceneRegister.h create mode 100644 inc/IntSettingClearPrivateDataForm.h create mode 100644 inc/IntSettingForm.h create mode 100644 inc/IntSettingPresentationModel.h create mode 100644 inc/IntSettingToggleCustomItem.h create mode 100644 inc/IntSharePopup.h create mode 100644 inc/IntSharePopup.h.bak create mode 100644 inc/IntTypes.h create mode 100644 manifest.xml create mode 100755 packaging/apps.Internet.spec create mode 100644 res/.workflow create mode 100644 res/ara-AE.xml create mode 100644 res/aze-AZ.xml create mode 100644 res/bul-BG.xml create mode 100644 res/cat-ES.xml create mode 100644 res/ces-CZ.xml create mode 100644 res/dan-DK.xml create mode 100644 res/deu-DE.xml create mode 100644 res/ell-GR.xml create mode 100644 res/eng-GB.xml create mode 100644 res/eng-PH.xml create mode 100644 res/eng-US.xml create mode 100644 res/est-EE.xml create mode 100644 res/eus-ES.xml create mode 100644 res/fin-FI.xml create mode 100644 res/fra-CA.xml create mode 100644 res/fra-FR.xml create mode 100644 res/gle-IE.xml create mode 100644 res/glg-ES.xml create mode 100644 res/hin-IN.xml create mode 100644 res/hrv-HR.xml create mode 100644 res/hun-HU.xml create mode 100644 res/hye-AM.xml create mode 100644 res/isl-IS.xml create mode 100644 res/ita-IT.xml create mode 100644 res/jpn-JP.xml create mode 100644 res/kat-GE.xml create mode 100644 res/kaz-KZ.xml create mode 100644 res/kor-KR.xml create mode 100644 res/lav-LV.xml create mode 100644 res/lit-LT.xml create mode 100644 res/mkd-MK.xml create mode 100644 res/nld-NL.xml create mode 100644 res/nob-NO.xml create mode 100644 res/pol-PL.xml create mode 100644 res/por-BR.xml create mode 100644 res/por-PT.xml create mode 100644 res/ron-RO.xml create mode 100644 res/rus-RU.xml create mode 100644 res/screen-density-high/00_button_sweep_delete.9.png create mode 100644 res/screen-density-high/00_button_sweep_delete_press.9.png create mode 100644 res/screen-density-high/I01_controlbar_icon_delete.png create mode 100644 res/screen-density-high/I01_controlbar_icon_delete_disable.png create mode 100644 res/screen-density-high/I01_toolbar_input_field.#.png create mode 100644 res/screen-density-high/I01_toolbar_input_field_findword.#.png create mode 100644 res/screen-density-xhigh/00_button_expand_closed.png create mode 100644 res/screen-density-xhigh/00_button_expand_closed_press.png create mode 100644 res/screen-density-xhigh/00_button_expand_opened.png create mode 100644 res/screen-density-xhigh/00_button_expand_opened_press.png create mode 100644 res/screen-density-xhigh/00_button_off.png create mode 100644 res/screen-density-xhigh/00_button_on.png create mode 100644 res/screen-density-xhigh/00_button_sweep_delete.9.png create mode 100644 res/screen-density-xhigh/00_button_sweep_delete_press.9.png create mode 100644 res/screen-density-xhigh/00_circle_bg_ef.png create mode 100644 res/screen-density-xhigh/00_circle_bg_ef_press.png create mode 100644 res/screen-density-xhigh/00_circle_button.png create mode 100644 res/screen-density-xhigh/00_circle_button_Expand_closed.png create mode 100644 res/screen-density-xhigh/00_circle_button_Expand_open.png create mode 100644 res/screen-density-xhigh/00_circle_button_dim.png create mode 100644 res/screen-density-xhigh/00_circle_button_press.png create mode 100644 res/screen-density-xhigh/00_icon_favorite_off_74x74.png create mode 100644 res/screen-density-xhigh/00_icon_favorite_on_74x74.png create mode 100644 res/screen-density-xhigh/00_list_expand_closed_press.png create mode 100644 res/screen-density-xhigh/00_list_expand_opened_press.png create mode 100644 res/screen-density-xhigh/1.png create mode 100644 res/screen-density-xhigh/2.png create mode 100644 res/screen-density-xhigh/3.png create mode 100644 res/screen-density-xhigh/4.png create mode 100644 res/screen-density-xhigh/5.png create mode 100644 res/screen-density-xhigh/6.png create mode 100644 res/screen-density-xhigh/7.png create mode 100644 res/screen-density-xhigh/8.png create mode 100644 res/screen-density-xhigh/9.png create mode 100644 res/screen-density-xhigh/EditBackground.png create mode 100644 res/screen-density-xhigh/I01_Nocontents_Bookmarks.png create mode 100644 res/screen-density-xhigh/I01_PlugIn_icon_Article_reader_temp.png create mode 100644 res/screen-density-xhigh/I01_URL_bookmark_icon.png create mode 100644 res/screen-density-xhigh/I01_URL_toolbar_button.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_Play_disabled.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_Play_temp.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_Play_temp_press.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_backward_disabled.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_backward_temp.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_backward_temp_press.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_bookmark.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_compose.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_compose_diabled.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_create.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_create_disable.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_create_folder.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_create_folder_diabled.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_delete.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_delete_disable.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_more.png create mode 100644 res/screen-density-xhigh/I01_controlbar_icon_multiview.png create mode 100644 res/screen-density-xhigh/I01_field_btn_Clear.png create mode 100644 res/screen-density-xhigh/I01_field_btn_Clear_Press.png create mode 100644 res/screen-density-xhigh/I01_field_btn_Clear_temp.png create mode 100644 res/screen-density-xhigh/I01_fit_screen.png create mode 100644 res/screen-density-xhigh/I01_font_button_left.png create mode 100644 res/screen-density-xhigh/I01_font_button_left_dim.png create mode 100644 res/screen-density-xhigh/I01_font_button_left_press.png create mode 100644 res/screen-density-xhigh/I01_font_button_right.png create mode 100644 res/screen-density-xhigh/I01_font_button_right_dim.png create mode 100644 res/screen-density-xhigh/I01_font_button_right_press.png create mode 100644 res/screen-density-xhigh/I01_icon_Back.png create mode 100644 res/screen-density-xhigh/I01_icon_Back_press.png create mode 100644 res/screen-density-xhigh/I01_icon_bookmark_bg.png create mode 100644 res/screen-density-xhigh/I01_icon_bookmark_off_temp.png create mode 100644 res/screen-density-xhigh/I01_icon_bookmark_on_temp.png create mode 100644 res/screen-density-xhigh/I01_icon_default_favicon.png create mode 100644 res/screen-density-xhigh/I01_icon_find word.png create mode 100644 res/screen-density-xhigh/I01_icon_folder_open.png create mode 100644 res/screen-density-xhigh/I01_icon_more.png create mode 100644 res/screen-density-xhigh/I01_icon_more_press.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation_01.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation_02.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation_03.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation_04.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation_05.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation_06.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation_07.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation_08.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation_09.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation_10.png create mode 100644 res/screen-density-xhigh/I01_icon_page_navigation_bar.png create mode 100644 res/screen-density-xhigh/I01_icon_plus.png create mode 100644 res/screen-density-xhigh/I01_icon_plus_press.png create mode 100644 res/screen-density-xhigh/I01_icon_private.png create mode 100644 res/screen-density-xhigh/I01_icon_upper folder.png create mode 100644 res/screen-density-xhigh/I01_page_button_left.png create mode 100644 res/screen-density-xhigh/I01_page_button_right.png create mode 100644 res/screen-density-xhigh/I01_popup_bg.9.png create mode 100644 res/screen-density-xhigh/I01_popup_bottom_bg.9.png create mode 100644 res/screen-density-xhigh/I01_right_arrow.png create mode 100644 res/screen-density-xhigh/I01_search_icon.png create mode 100644 res/screen-density-xhigh/I01_search_icon_refresh.png create mode 100644 res/screen-density-xhigh/I01_search_icon_refresh_temp.png create mode 100644 res/screen-density-xhigh/I01_search_input_field_bg.#.png create mode 100644 res/screen-density-xhigh/I01_search_list_icon_favorite.png create mode 100644 res/screen-density-xhigh/I01_search_list_icon_favorite_press.png create mode 100644 res/screen-density-xhigh/I01_search_list_icon_history.png create mode 100644 res/screen-density-xhigh/I01_tab_icon_bookmarks.png create mode 100644 res/screen-density-xhigh/I01_tab_icon_history.png create mode 100644 res/screen-density-xhigh/I01_title_btn.9.png create mode 100644 res/screen-density-xhigh/I01_title_btn_icon_down.png create mode 100644 res/screen-density-xhigh/I01_title_btn_icon_down_disabled.png create mode 100644 res/screen-density-xhigh/I01_title_btn_icon_down_pressed.png create mode 100644 res/screen-density-xhigh/I01_title_btn_icon_up.png create mode 100644 res/screen-density-xhigh/I01_title_btn_icon_up_disabled.png create mode 100644 res/screen-density-xhigh/I01_title_btn_icon_up_pressed.png create mode 100644 res/screen-density-xhigh/I01_title_btn_press.9.png create mode 100644 res/screen-density-xhigh/I01_title_font_bg.png create mode 100644 res/screen-density-xhigh/I01_title_progress_bar.png create mode 100644 res/screen-density-xhigh/I01_title_progress_bar_bg.png create mode 100644 res/screen-density-xhigh/I01_toolbar_bg_01.png create mode 100644 res/screen-density-xhigh/I01_toolbar_bg_02.png create mode 100644 res/screen-density-xhigh/I01_toolbar_bg_h.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_back_press_web.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_back_web.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_back_web_disabled.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_forward_press_web.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_forward_web.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_forward_web_disabled.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_01.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_01_press.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_02.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_02_press.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_03.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_03_press.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_04.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_04_press.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_05.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_05_press.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_06.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_06_press.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_07.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_07_press.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_08.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_08_press.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_09.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_09_press.png create mode 100644 res/screen-density-xhigh/I01_toolbar_icon_windows_manager_empty.png create mode 100644 res/screen-density-xhigh/I01_toolbar_input_field.#.png create mode 100644 res/screen-density-xhigh/I01_toolbar_input_field_findword.#.png create mode 100644 res/screen-density-xhigh/I01_toolbar_input_field_findwordbkp.#.png create mode 100644 res/screen-density-xhigh/ListIcon.png create mode 100644 res/screen-density-xhigh/ListLeftSide.png create mode 100644 res/screen-density-xhigh/Notification_download_complete.png create mode 100644 res/screen-density-xhigh/Notification_download_failed.png create mode 100644 res/screen-density-xhigh/Thumbs.db create mode 100644 res/screen-density-xhigh/deleteIcon.png create mode 100644 res/screen-density-xhigh/edit_item.png create mode 100644 res/screen-density-xhigh/opennewwindow.png create mode 100644 res/screen-density-xhigh/private_on.png create mode 100644 res/screen-size-normal/IDL_ADDRESSBAR.xml create mode 100644 res/screen-size-normal/IDL_ADD_BOOKMARK.xml create mode 100644 res/screen-size-normal/IDL_ARTICLE_READER.xml create mode 100644 res/screen-size-normal/IDL_ARTICLE_READER_FORM.xml create mode 100644 res/screen-size-normal/IDL_BLANK_PANEL.xml create mode 100644 res/screen-size-normal/IDL_BOOKMARK_LIST.xml create mode 100644 res/screen-size-normal/IDL_BRIGHTNESS.xml create mode 100644 res/screen-size-normal/IDL_CONFIRMATION_POPUP.xml create mode 100644 res/screen-size-normal/IDL_CREATE_BOOKMARK_FOLDER.xml create mode 100644 res/screen-size-normal/IDL_EDIT_BOOKMARK_LIST.xml create mode 100644 res/screen-size-normal/IDL_EDIT_HISTORY_LIST.xml create mode 100644 res/screen-size-normal/IDL_EDIT_HOME_PAGE.xml create mode 100644 res/screen-size-normal/IDL_FIND_ON_PAGE.xml create mode 100644 res/screen-size-normal/IDL_FONT_SIZE.xml create mode 100644 res/screen-size-normal/IDL_FORM.xml create mode 100644 res/screen-size-normal/IDL_HISTORY_LIST.xml create mode 100644 res/screen-size-normal/IDL_MULTIPLE_WINDOW.xml create mode 100644 res/screen-size-normal/IDL_NOTIFICATION_PANEL.xml create mode 100644 res/screen-size-normal/IDL_READER.xml create mode 100644 res/screen-size-normal/IDL_SETTINGS.xml create mode 100644 res/screen-size-normal/IDL_SETTINGS_CLEAR_PRIVATE_DATA.xml create mode 100644 res/screen-size-normal/IDL_SETTING_FORM.xml create mode 100644 res/screen-size-normal/IDL_SHARE_POPUP.xml create mode 100644 res/slk-SK.xml create mode 100644 res/slv-SI.xml create mode 100644 res/spa-ES.xml create mode 100644 res/spa-MX.xml create mode 100644 res/srp-RS.xml create mode 100644 res/swe-SE.xml create mode 100644 res/tur-TR.xml create mode 100644 res/ukr-UA.xml create mode 100644 res/uzb-UZ.xml create mode 100644 res/zho-CN.xml create mode 100644 res/zho-HK.xml create mode 100644 res/zho-SG.xml create mode 100644 res/zho-TW.xml create mode 100644 shared/data/nofile.dummy create mode 100755 shared/res/screen-density-xhigh/mainmenu.png create mode 100644 shared/trusted/nofile.dummy create mode 100644 src/IntAddBookmarkForm.cpp create mode 100644 src/IntAddressbar.cpp create mode 100644 src/IntArticleReaderForm.cpp create mode 100644 src/IntBookmarkData.cpp create mode 100644 src/IntBookmarkListForm.cpp create mode 100644 src/IntBookmarkPresentationModel.cpp create mode 100644 src/IntBrightnessForm.cpp create mode 100644 src/IntCommonLib.cpp create mode 100644 src/IntConfirmationPopup.cpp create mode 100644 src/IntCreateBookmarkFolderForm.cpp create mode 100644 src/IntDefaultCustomItem.cpp create mode 100644 src/IntDropDownCustomItem.cpp create mode 100644 src/IntEditBookmarkListForm.cpp create mode 100644 src/IntEditHistoryListForm.cpp create mode 100644 src/IntEditHomePageForm.cpp create mode 100644 src/IntFaviconManager.cpp create mode 100644 src/IntFontManager.cpp create mode 100644 src/IntFormFactory.cpp create mode 100644 src/IntHistory.cpp create mode 100644 src/IntHistoryListForm.cpp create mode 100644 src/IntHistoryPresentationModel.cpp create mode 100644 src/IntInternetApp.cpp create mode 100644 src/IntInternetEntry.cpp create mode 100644 src/IntMainForm.cpp create mode 100644 src/IntMainFrame.cpp create mode 100644 src/IntMultipleWindowForm.cpp create mode 100644 src/IntMultipleWindowPresentationModel.cpp create mode 100644 src/IntNotificationPanel.cpp create mode 100644 src/IntPresentationModelBase.cpp create mode 100644 src/IntRadioCustomItem.cpp create mode 100644 src/IntReaderFontSizeForm.cpp create mode 100644 src/IntSceneRegister.cpp create mode 100644 src/IntSettingClearPrivateDataForm.cpp create mode 100644 src/IntSettingForm.cpp create mode 100644 src/IntSettingPresentationModel.cpp create mode 100644 src/IntSettingToggleCustomItem.cpp create mode 100644 src/IntSharePopup.cpp diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..4a598a2 --- /dev/null +++ b/.cproject @@ -0,0 +1,370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..1ab6a6f --- /dev/null +++ b/.project @@ -0,0 +1,89 @@ + + + Internet + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + -k + + + org.eclipse.cdt.make.core.buildCommand + sbi-make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/Browser/Debug-Tizen-Emulator} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + false + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + org.tizen.nativecpp.apichecker.core.builder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.tizen.nativecpp.apichecker.core.tizenCppNature + + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..9a5e837 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,33 @@ +# Target name and AppID +## TODO : set application name and ID +SET(this_target Internet) +SET(APPID kmcele1k0n) + +# include directory +INCLUDE_DIRECTORIES( + /usr/include/osp + inc + ) + +# Source files +FILE(GLOB ${this_target}_SOURCE_FILES src/*.cpp) + +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE") + +# Create executable +SET(CMAKE_EXECUTABLE_SUFFIX ".exe") +ADD_EXECUTABLE (${this_target} ${${this_target}_SOURCE_FILES}) + +# Set link libraries and link options +## TODO : add more link libraries and options +TARGET_LINK_LIBRARIES(${this_target} -L/usr/lib/osp osp-appfw osp-uifw osp-media osp-web osp-image osp-net osp-shell osp-shell-core pthread) +TARGET_LINK_LIBRARIES(${this_target} -Xlinker --allow-shlib-undefined -pthread -pie) + +# Copy info, data, res, and icons directories +INSTALL(TARGETS ${this_target} DESTINATION ../usr/apps/${APPID}/bin) + +# Copy resource +INSTALL(FILES ${CMAKE_SOURCE_DIR}/manifest.xml DESTINATION ../usr/apps/${APPID}/info) +INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/res DESTINATION ../usr/apps/${APPID}) +INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/shared DESTINATION ../usr/apps/${APPID}) +INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/data DESTINATION ../usr/apps/${PKG_ID}) diff --git a/LICENSE.APLv2.0 b/LICENSE.APLv2.0 new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE.APLv2.0 @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + 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. + + 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, + 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 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 in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) 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 + + (d) 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 Apache License to your work. + + To apply the Apache 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 Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT 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/LICENSE.Flora b/LICENSE.Flora new file mode 100755 index 0000000..03f0c77 --- /dev/null +++ b/LICENSE.Flora @@ -0,0 +1,206 @@ +Flora License + +Version 1.1, April, 2013 + +http://floralicense.org/license/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and +all other entities that control, are controlled by, or are +under common control with that entity. For the purposes of +this definition, "control" means (i) the power, direct or indirect, +to cause the direction or management of such entity, +whether by contract or otherwise, or (ii) ownership of fifty percent (50%) +or more of the outstanding shares, or (iii) beneficial ownership of +such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation source, +and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, +made available under the License, as indicated by a copyright notice +that is included in or attached to the work (an example is provided +in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, +that is based on (or derived from) the Work and for which the editorial +revisions, annotations, elaborations, or other modifications represent, +as a whole, an original work of authorship. For the purposes of this License, +Derivative Works shall not include works that remain separable from, +or merely link (or bind by name) to the interfaces of, the Work and +Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original +version of the Work and any modifications or additions to that Work or +Derivative Works thereof, that is intentionally submitted to Licensor +for inclusion in the Work by the copyright owner or by an individual or +Legal Entity authorized to submit on behalf of the copyright owner. +For the purposes of this definition, "submitted" means any form of +electronic, verbal, or written communication sent to the Licensor or +its representatives, including but not limited to communication on +electronic mailing lists, source code control systems, and issue +tracking systems that are managed by, or on behalf of, the Licensor +for the purpose of discussing and improving the Work, but excluding +communication that is conspicuously marked or otherwise designated +in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +"Tizen Certified Platform" shall mean a software platform that complies +with the standards set forth in the Tizen Compliance Specification +and passes the Tizen Compliance Tests as defined from time to time +by the Tizen Technical Steering Group and certified by the Tizen +Association or its designated agent. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work +solely as incorporated into a Tizen Certified Platform, where such +license applies only to those patent claims licensable by such +Contributor that are necessarily infringed by their Contribution(s) +alone or by combination of their Contribution(s) with the Work solely +as incorporated into a Tizen Certified Platform to which such +Contribution(s) was submitted. If You institute patent litigation +against any entity (including a cross-claim or counterclaim +in a lawsuit) alleging that the Work or a Contribution incorporated +within the Work constitutes direct or contributory patent infringement, +then any patent licenses granted to You under this License for that +Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof pursuant to the copyright license +above, in any medium, with or without modifications, and in Source or +Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works + a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating + that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that + You distribute, all copyright, patent, trademark, and attribution + notices from the Source form of the Work, excluding those notices + that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "NOTICE" text file as part of its distribution, + then any Derivative Works that You distribute must include a readable + copy of the attribution notices contained within such NOTICE file, + excluding those notices that do not pertain to any part of + the Derivative Works, in at least one of the following places: + within a NOTICE text file distributed as part of the Derivative Works; + within the Source form or documentation, if provided along with the + Derivative Works; or, within a display generated by the Derivative Works, + if and wherever such third-party notices normally appear. + The contents of the NOTICE file are for informational purposes only + and do not modify the License. + +You may add Your own attribution notices within Derivative Works +that You distribute, alongside or as an addendum to the NOTICE text +from the Work, provided that such additional attribution notices +cannot be construed as modifying the License. You may add Your own +copyright statement to Your modifications and may provide additional or +different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works +as a whole, provided Your use, reproduction, and distribution of +the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Flora License to your work + +To apply the Flora License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Flora License, Version 1.1 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://floralicense.org/license/ + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..c822a12 --- /dev/null +++ b/NOTICE @@ -0,0 +1,9 @@ +Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Apache License, Version 2. +Please, see the LICENSE.APLv2.0 file for Apache License, Version 2 terms and conditions. + +Several source codes may have its original copyright owner and/or +be licensed under other than Apache License, Version 2, say, Flora License, Version 1.1. +Please, see copyright and license comments section in the header of each file, +and the LICENSE.Flora file for Flora License, Version 1.1 terms and conditions. + diff --git a/data/reader.js b/data/reader.js new file mode 100644 index 0000000..6345f03 --- /dev/null +++ b/data/reader.js @@ -0,0 +1,937 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + + +try { +var test; +var sample= null; +totalPageNum = 1; +var readability = { +} +var page = null; + parsedPages= {}; + pageETags = {}; + +function findBaseUrl() { + var noUrlParams = window.location.pathname.split("?")[0], + urlSlashes = noUrlParams.split("/").reverse(), + cleanedSegments = [], + possibleType = ""; + + for (var i = 0, slashLen = urlSlashes.length; i < slashLen; i+=1) { + var segment = urlSlashes[i]; + + if (segment.indexOf(".") !== -1) { + possibleType = segment.split(".")[1]; + + if(!possibleType.match(/[^a-zA-Z]/)) { + segment = segment.split(".")[0]; + } + } + + if(segment.indexOf(',00') !== -1) { + segment = segment.replace(',00', ''); + } + + if (segment.match(/((_|-)?p[a-z]*|(_|-))[0-9]{1,2}$/i) && ((i === 1) || (i === 0))) { + segment = segment.replace(/((_|-)?p[a-z]*|(_|-))[0-9]{1,2}$/i, ""); + } + + + var del = false; + + if (i < 2 && segment.match(/^\d{1,2}$/)) { + del = true; + } + + if(i === 0 && segment.toLowerCase() === "index") { + del = true; + } + + if(i < 2 && segment.length < 3 && !urlSlashes[0].match(/[a-z]/i)) { + del = true; + } + + if (!del) { + cleanedSegments.push(segment); + } + } + + return window.location.protocol + "//" + window.location.host + cleanedSegments.reverse().join("/"); + } + + +function findNextPageLink(elem) { + var possiblePages = {}, + allLinks = elem.getElementsByTagName('a'), + articleBaseUrl = findBaseUrl(); + + for(var i = 0, il = allLinks.length; i < il; i+=1) { + var link = allLinks[i], + linkHref = allLinks[i].href.replace(/#.*$/, '').replace(/\/$/, ''); + + if(linkHref === "" || linkHref === articleBaseUrl || linkHref === window.location.href || linkHref in parsedPages) { + continue; + } + + if(window.location.host !== linkHref.split(/\/+/g)[1]) { + continue; + } + + var linkText = getInnerText(link); + + if(linkText.match(regexps.extraneous)) { + continue; + } + + var linkHrefLeftover = linkHref.replace(articleBaseUrl, ''); + if(!linkHrefLeftover.match(/\d/)) { + continue; + } + + if(!(linkHref in possiblePages)) { + possiblePages[linkHref] = {"score": 0, "linkText": linkText, "href": linkHref}; + } else { + possiblePages[linkHref].linkText += ' | ' + linkText; + } + + var linkObj = possiblePages[linkHref]; + + if(linkHref.indexOf(articleBaseUrl) !== 0) { + linkObj.score -= 25; + } + + var linkData = linkText + ' ' + link.className + ' ' + link.id + link.innerHTML; + if(linkData.match(regexps.nextLink)) { + linkObj.score += 50; + } + if(linkData.match(/pag(e|ing|inat)/i)) { + linkObj.score += 25; + } + if(linkData.match(/(first|last)/i)) { + if(!linkObj.linkText.match(regexps.nextLink)) { + linkObj.score -= 65; + } + } + if(linkData.match(regexps.negative) || linkData.match(regexps.extraneous)) { + linkObj.score -= 50; + } + if(linkData.match(regexps.prevLink)) { + linkObj.score -= 200; + } + + var parentNode = link.parentNode, + positiveNodeMatch = false, + negativeNodeMatch = false; + while(parentNode) { + var parentNodeClassAndId = parentNode.className + ' ' + parentNode.id; + if(!positiveNodeMatch && parentNodeClassAndId && parentNodeClassAndId.match(/pag(e|ing|inat)/i)) { + positiveNodeMatch = true; + linkObj.score += 15; + } + if(!negativeNodeMatch && parentNodeClassAndId && parentNodeClassAndId.match(regexps.negative)) { + if(!parentNodeClassAndId.match(regexps.positive)) { + linkObj.score -= 25; + negativeNodeMatch = true; + } + } + + parentNode = parentNode.parentNode; + } + + if (linkHref.match(/p(a|g|ag)?(e|ing|ination)?(=|\/)[0-9]{1,2}/i) || linkHref.match(/(page|paging)/i)) { + linkObj.score += 25; + } + + if (linkHref.match(regexps.extraneous)) { + linkObj.score -= 15; + } + + var linkTextAsNumber = parseInt(linkText, 10); + if(linkTextAsNumber) { + if (linkTextAsNumber === 1) { + linkObj.score -= 10; + } + else { + linkObj.score += Math.max(0, 10 - linkTextAsNumber); + } + } + } + + var topPage = null; + for(var page in possiblePages) { + if(possiblePages.hasOwnProperty(page)) { + if(possiblePages[page].score > 100 && (!topPage || topPage.score < possiblePages[page].score)) { + topPage = possiblePages[page]; + } + } + } + + if(topPage) { + var nextHref = topPage.href.replace(/\/$/,''); + + parsedPages[nextHref] = true; + return nextHref; + console.log("Reader :: reader.js :: INFO - Second Page link = "+nextHref); + } + else { + console.log("Reader :: reader.js :: INFO - Second Page link = null"); + return null; + } + } + + function xhr() { + if (typeof XMLHttpRequest !== 'undefined' && (window.location.protocol !== 'file:' || !window.ActiveXObject)) { + return new XMLHttpRequest(); + } + else { + try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(sixerr) { } + try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(threrr) { } + try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch(err) { } + } + + return false; + } + + function successfulRequest(request) { + return (request.status >= 200 && request.status < 300) || request.status === 304 || (request.status === 0 && request.responseText); + } + + function ajax(url, options) { + var request = xhr(); + + function respondToReadyState(readyState) { + if (request.readyState === 4) { + if (successfulRequest(request)) { + if (options.success) { options.success(request); } + } + else { + if (options.error) { options.error(request); } + } + } + } + + if (typeof options === 'undefined') { options = {}; } + + request.onreadystatechange = respondToReadyState; + request.open('get', url, true); + request.setRequestHeader('Accept', 'text/html'); + + try { + request.send(options.postBody); + } + catch (e) { + if (options.error) { options.error(); } + } + + return request; + } + + curPageNum = 1; + maxPages = 30; + function appendNextPage(nextPageLink) { + + curPageNum+=1; + + var articlePage = document.createElement("DIV"); + articlePage.id = 'readability-page-' + curPageNum; + articlePage.className = 'SISO_page'; + articlePage.innerHTML = '

Page '+curPageNum+'

'; + + + if(curPageNum > maxPages) { + var nextPageMarkup = "
View Next Page
"; + + articlePage.innerHTML = articlePage.innerHTML + nextPageMarkup; + return; + } + (function(pageUrl, thisPage) { + ajax(pageUrl, { + success: function(r) { + + var eTag = r.getResponseHeader('ETag'); + if(eTag) { + if(eTag in pageETags) { + dbg("Exact duplicate page found via ETag. Aborting."); + articlePage.style.display = 'none'; + return; + } else { + pageETags[eTag] = 1; + } + } + + var page = document.createElement("DIV"); + + var responseHtml = r.responseText.replace(/\n/g,'\uffff').replace(/.*?<\/script>/gi, ''); + responseHtml = responseHtml.replace(/\n/g,'\uffff').replace(/.*?<\/script>/gi, ''); + responseHtml = responseHtml.replace(/\uffff/g,'\n').replace(/<(\/?)noscript/gi, '<$1div'); + responseHtml = responseHtml.replace(regexps.replaceBrs, '

'); + responseHtml = responseHtml.replace(regexps.replaceFonts, '<$1span>'); + + page.innerHTML = responseHtml; + + flags = 0x1 | 0x2 | 0x4; + + var nextPageLink = findNextPageLink(page), + content = grabArticle(page); + + if(!content) { + return; + } + + thisPage.innerHTML += content; + document.getElementById("reader_content_div").appendChild(thisPage); + + if(nextPageLink) { + appendNextPage(nextPageLink); + } + } + }); + }(nextPageLink, articlePage)); + } + + regexps = { + unlikelyCandidates: /combx|comment|community|disqus|extra|foot|header|menu|remark|rss|shoutbox|sidebar|sponsor|ad-break|agegate|pagination|pager|popup|tweet|twitter/i, + okMaybeItsACandidate: /and|article|body|column|main|shadow/i, + positive: /article|body|content|entry|hentry|main|page|pagination|post|text|blog|story|date/i, + negative: /combx|comment|com-|contact|foot|footer|footnote|masthead|media|meta|outbrain|promo|related|scroll|shoutbox|sidebar|sponsor|shopping|tags|script|tool|widget|scbox|reply|div_dispalyslide|galleryad|disqus_thread|cnn_strylftcntnt|topRightNarrow|fs-stylelist-thumbnails|replText|ttalk_layer|disqus_post_message|disqus_post_title|cnn_strycntntrgt|wpadvert|sharedaddy sd-like-enabled sd-sharing-enabled|fs-slideshow-wrapper|fs-stylelist-launch|reply_box|contentHeader|jive-paginator lw-label/i, + extraneous: /print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single/i, + divToPElements: /<(a|blockquote|dl|div|img|ol|p|pre|table|ul|article)/i, + replaceBrs: /(]*>[ \n\r\t]*){2,}/gi, + replaceFonts: /<(\/?)font[^>]*>/gi, + trim: /^\s+|\s+$/g, + normalize: /\s{2,}/g, + killBreaks: /((\s| ?)*){1,}/g, + videos: /http:\/\/(www\.)?(youtube|vimeo)\.com/i, + skipFootnoteLink: /^\s*(\[?[a-z0-9]{1,2}\]?|^|edit|citation needed)\s*$/i, + nextLink: /(next|right|weiter|continue|>([^\|]|$)|\u00BB([^\|]|$))/i, + prevLink: /(prev|earl|old|<|«)/i, + retainDiv: /whois_record/i + } + + function cleanHeaders(e) { + for (var headerIndex = 1; headerIndex < 3; headerIndex+=1) { + var headers = e.getElementsByTagName('h' + headerIndex); + for (var i=headers.length-1; i >=0; i-=1) { + if (getClassWeight(headers[i]) < 0 || getLinkDensity(headers[i]) > 0.33) { + headers[i].parentNode.removeChild(headers[i]); + } + } + } + } + + function clean(e, tag) { + var targetList = e.getElementsByTagName( tag ); + var isEmbed = (tag === 'object' || tag === 'embed'); + + for (var y=targetList.length-1; y >= 0; y-=1) { + if(isEmbed) { + var attributeValues = ""; + for (var i=0, il=targetList[y].attributes.length; i < il; i+=1) { + attributeValues += targetList[y].attributes[i].value + '|'; + } + + if (attributeValues.search(regexps.videos) !== -1) { + continue; + } + + if (targetList[y].innerHTML.search(regexps.videos) !== -1) { + continue; + } + } + + targetList[y].parentNode.removeChild(targetList[y]); + } + } + function cleanHTML5(e, tag) { + var targetList = e.getElementsByTagName( tag ); + for (var y=targetList.length-1; y >= 0; y-=1) { + targetList[y].parentNode.removeChild(targetList[y]); + } + } + function cleanSelect(e, tag) { + var targetList = e.getElementsByTagName( tag ); + for (var y=targetList.length-1; y >= 0; y-=1) { + targetList[y].style.display = 'none'; + } + } + function getCharCount(e,s) { + s = s || ","; + return getInnerText(e).split(s).length-1; + } + function getClassWeight(e) { + + var weight = 0; + + if (typeof(e.className) === 'string' && e.className !== '') + { + if(e.className.search(regexps.negative) !== -1) { + weight -= 25; } + + if(e.className.search(regexps.positive) !== -1) { + weight += 25; } + } + + if (typeof(e.id) === 'string' && e.id !== '') + { + if(e.id.search(regexps.negative) !== -1) { + weight -= 25; } + + if(e.id.search(regexps.positive) !== -1) { + weight += 25; } + } + + return weight; + } +function ChineseJapneseKorean(innerCharacter) { + if (!innerCharacter || innerCharacter.length == 0) return false; + var innerCharacterCode = innerCharacter.charCodeAt(0); + if (innerCharacterCode > 11904 && innerCharacterCode < 12031) return true; //CJK Radicals Supplement + if (innerCharacterCode > 12352 && innerCharacterCode < 12543) return true; //Hiragana + if (innerCharacterCode > 12736 && innerCharacterCode < 19903) return true; + if (innerCharacterCode > 19968 && innerCharacterCode < 40959) return true; //CJK Unified Ideographs + if (innerCharacterCode > 44032 && innerCharacterCode < 55215) return true; //Hangul Syllables + if (innerCharacterCode > 63744 && innerCharacterCode < 64255) return true; //CJK Compatibility Ideographs + if (innerCharacterCode > 65072 && innerCharacterCode < 65103) return true; //CJK Compatibility Forms + if (innerCharacterCode > 131072 && innerCharacterCode < 173791) return true; + if (innerCharacterCode > 194560 && innerCharacterCode < 195103) return true; + return false; +} + function cleanConditionally(e, tag) { + + + var tagsList = e.getElementsByTagName(tag); + var curTagsLength = tagsList.length; + + for (var i=curTagsLength-1; i >= 0; i-=1) { + var toRemove = false; + var weight = getClassWeight(tagsList[i]); + var contentScore = (typeof tagsList[i].readability !== 'undefined') ? tagsList[i].readability.contentScore : 0; + + if(weight+contentScore < 0) + { + if(tag === "div" || tag === "article") { + var readerDivClass5 = document.getElementsByClassName("view_cnt"); + var readerDivClass6 = document.getElementById("description"); + + if(readerDivClass5.length > 0) { + toRemove = false; + } + if(readerDivClass6!==null && readerDivClass6.innerHTML.length > 0) { + toRemove = false; + } + + } else { + tagsList[i].parentNode.removeChild(tagsList[i]); + } + } + else if ( getCharCount(tagsList[i],',') < 10) { + var p = tagsList[i].getElementsByTagName("p").length; + var img = tagsList[i].getElementsByTagName("img").length; + var li = tagsList[i].getElementsByTagName("li").length-100; + var input = tagsList[i].getElementsByTagName("input").length; + + var embedCount = 0; + var embeds = tagsList[i].getElementsByTagName("embed"); + for(var ei=0,il=embeds.length; ei < il; ei+=1) { + if (embeds[ei].src.search(regexps.videos) === -1) { + embedCount+=1; + } + } + + var linkDensity = getLinkDensity(tagsList[i]); + var contentLength = getInnerText(tagsList[i]).length; + var finalWord = null; + var checkCJK = null; + var checkCJKText = null; + var checkWordOfTag = function(){ + checkCJKText = getInnerText(tagsList[i]); + for(var h = 0;h < contentLength; h +=1){ + if(ChineseJapneseKorean(checkCJKText[h]) === true) { + finalWord = checkCJKText[h]; + checkCJK = true; + break; + } + } + return finalWord; + } + if ( img > p ) { + toRemove = true; + } else if(li > p && tag !== "ul" && tag !== "ol") { + toRemove = true; + } else if( input > Math.floor(p/3) ) { + toRemove = true; + } else if(contentLength < 25 && (img > 2 || img === 0) ) { + toRemove = true; + } else if(weight < 25 && linkDensity > 0.2) { + toRemove = true; + } else if(weight >= 25 && linkDensity > 0.5) { + toRemove = true; + } else if((embedCount === 1 && contentLength < 75) || embedCount > 1) { + toRemove = true; + } + if((checkWordOfTag() !== 'undefined') && checkCJK && toRemove){ + if(weight < 25 && linkDensity > 0.3){ + toRemove = true; + }else { + toRemove = false; + } + } + + var images = tagsList[i].getElementsByTagName("img"); + for(var im=0,il=images.length; im < il; im+=1) { + if ((images[im].height >= 150) && (images[im].width >= 200)) { + toRemove = false; + break; + } + } + if(tag === "div" || tag === "article") { + var readerDivClass = document.getElementsByClassName("whois_record"); + if(readerDivClass.length > 0) { + toRemove = false; + } + var readerDivClass1 = document.getElementsByClassName("sixteen columns hreview hentry hnews full"); + if(readerDivClass1.length > 0) { + toRemove = false; + } + var readerDivClass2 = document.getElementsByClassName("list"); + if(readerDivClass2.length > 0) { + toRemove = false; + } + var readerDivClass3 = document.getElementsByClassName("articleContent"); + if(readerDivClass3.length > 0) { + toRemove = false; + } + var readerDivClass4 = document.getElementsByClassName("content"); + if(readerDivClass4.length > 0) { + toRemove = false; + } + var readerDivClass5 = document.getElementsByClassName("view_cnt"); + if(readerDivClass5.length > 0) { + toRemove = false; + } + var readerDivClass6 = document.getElementById("description"); + if(readerDivClass6!==null && readerDivClass6.innerHTML.length > 0) { + toRemove = false; + } + } + + if(toRemove) { + tagsList[i].parentNode.removeChild(tagsList[i]); + } + } + } + } + function killBreaks(e) { + try { + e.innerHTML = e.innerHTML.replace(regexps.killBreaks,'
'); + } + catch (eBreaks) { + } + } + function cleanStyles(e) { + e = e || document; + var cur = e.firstChild; + + if(!e) { + return; } + + if(typeof e.removeAttribute === 'function' && e.className !== 'readability-styled') { + e.removeAttribute('style'); } + + while ( cur !== null ) { + if ( cur.nodeType === 1 ) { + if(cur.className !== "readability-styled") { + cur.removeAttribute("style"); + } + cleanStyles( cur ); + } + cur = cur.nextSibling; + } + } + +function cleanLinkHrefs(e) { + var links = e.getElementsByTagName("a"); + for(var i=0, il=links.length; i= 0; i-=1) { + var imgCount = articleParagraphs[i].getElementsByTagName('img').length; + var embedCount = articleParagraphs[i].getElementsByTagName('embed').length; + var objectCount = articleParagraphs[i].getElementsByTagName('object').length; + + if(imgCount === 0 && embedCount === 0 && objectCount === 0 && getInnerText(articleParagraphs[i], false) === '') { + articleParagraphs[i].parentNode.removeChild(articleParagraphs[i]); + } + } + + try { + articleContent.innerHTML = articleContent.innerHTML.replace(/]*>\s*

topCandidate.readability.contentScore) { + topCandidate = candidates[c]; } + } + + if (topCandidate === null || topCandidate.tagName === "BODY") + { + topCandidate = document.createElement("DIV"); + topCandidate.innerHTML = page.innerHTML; + page.innerHTML = ""; + page.appendChild(topCandidate); + initializeNode(topCandidate); + } + + var articleContent = document.createElement("DIV"); + articleContent.id = "readability-content"; + var siblingScoreThreshold = Math.max(10, topCandidate.readability.contentScore * 0.2); + var siblingNodes = topCandidate.parentNode.childNodes; + + + for(var s=0, sl=siblingNodes.length; s < sl; s+=1) { + var siblingNode = siblingNodes[s]; + var append = false; + + if(!siblingNode) { + continue; + } + + + if(siblingNode === topCandidate) + { + append = true; + } + + var contentBonus = 0; + if(siblingNode.className === topCandidate.className && topCandidate.className !== "") { + contentBonus += topCandidate.readability.contentScore * 0.2; + } + + if(typeof siblingNode.readability !== 'undefined' && (siblingNode.readability.contentScore+contentBonus) >= siblingScoreThreshold) + { + append = true; + } + + if(siblingNode.nodeName === "P") { + var linkDensity = getLinkDensity(siblingNode); + var nodeContent = getInnerText(siblingNode); + var nodeLength = nodeContent.length; + + if(nodeLength > 80 && linkDensity < 0.25) + { + append = true; + } + else if(nodeLength < 80 && linkDensity === 0 && nodeContent.search(/\.( |$)/) !== -1) + { + append = true; + } + } + + if(append) { + var nodeToAppend = null; + if(siblingNode.nodeName !== "DIV" && siblingNode.nodeName !== "P") { + nodeToAppend = document.createElement("DIV"); + try { + nodeToAppend.id = siblingNode.id; + nodeToAppend.innerHTML = siblingNode.innerHTML; + } + catch(er) { + nodeToAppend = siblingNode; + s-=1; + sl-=1; + } + } else { + nodeToAppend = siblingNode; + } + + if(nodeToAppend.className.search(regexps.retainDiv) !== -1) { + } + articleContent.appendChild(nodeToAppend.cloneNode(true)); + } + } + + + prepArticle(articleContent); + for (var pt=0; pt < nodesToScore.length; pt+=1) { + var parentNode = nodesToScore[pt].parentNode; + var grandParentNode = parentNode ? parentNode.parentNode : null; + delete parentNode.readability; + if (grandParentNode) { + delete grandParentNode.readability; + } + } + + if( articleContent.innerHTML == '' ) + { + return " " ; + } + + return articleContent.innerHTML; + } + +function getArticleTitle() { + var curTitle = "", + origTitle = ""; + + try { + curTitle = origTitle = document.title; + if(typeof curTitle !== "string") { + curTitle = origTitle = getInnerText(document.getElementsByTagName('title')[0]); + } + } + catch(e) {} + + if(curTitle.match(/ [\|\-] /)) + { + curTitle = origTitle.replace(/(.*)[\|\-] .*/gi,'$1'); + + if(curTitle.split(' ').length < 3) { + curTitle = origTitle.replace(/[^\|\-]*[\|\-](.*)/gi,'$1'); + } + } + else if(curTitle.indexOf(': ') !== -1) + { + curTitle = origTitle.replace(/.*:(.*)/gi, '$1'); + + if(curTitle.split(' ').length < 3) { + curTitle = origTitle.replace(/[^:]*[:](.*)/gi,'$1'); + } + } + else if(curTitle.length > 150 || curTitle.length < 15) + { + var hOnes = document.getElementsByTagName('h1'); + if(hOnes.length === 1) + { + curTitle = getInnerText(hOnes[0]); + } + } + + curTitle = curTitle.replace( regexps.trim, "" ); + + if(curTitle.split(' ').length <= 4) { + curTitle = origTitle; + } + return curTitle; +} + +function initReader() { + var article_block = grabArticle(); + var article_title = getArticleTitle() + if (article_block && article_block.length > 1000) { + var title = '

'+article_title+'

' + var meta = '\n'; + return meta + title + article_block; + } else { + return "undefined"; + } +} + +initReader(); +} +catch(e) { +console.log("Reader Error - Reader.js"); +} + diff --git a/inc/IntAddBookmarkForm.h b/inc/IntAddBookmarkForm.h new file mode 100644 index 0000000..b24f2a4 --- /dev/null +++ b/inc/IntAddBookmarkForm.h @@ -0,0 +1,141 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// !Internet +/*@file: IntAddBookmarkForm.h + *@brief: This header file contains the declarations of the AddBookmarkForm class. + * + */ + +#ifndef _INT_ADD_BOOKMARK_FORM_H_ +#define _INT_ADD_BOOKMARK_FORM_H_ + +#include +#include +#include "IntBookmarkData.h" +#include "IntMultipleWindowPresentationModel.h" + +class AddBookmarkForm + : public Tizen::Ui::Controls::Form + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::IKeypadEventListener + , public Tizen::Ui::Controls::IListViewItemEventListener + , public Tizen::Ui::Controls::IListViewItemProvider + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::ITextEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + , public Tizen::Ui::IFocusEventListener + { + public: + /** + * @brief The Default Constructor + */ + AddBookmarkForm(void); + + /** + * @brief The Default Destructor + */ + virtual ~AddBookmarkForm(void); + + /** + * @brief Add Radio Buttons to the list panel. + */ + void AddRadioButtonsToListPanel(void); + + /** + * @brief Shows alert message. + */ + void CreateMessage(Tizen::Base::String& str); + + /** + * @brief Initializes this instance of AddBookmarkForm. + */ + bool Initialize(void); + + // Initializes the controls of the UI for AddBookmarkForm. + virtual result OnInitializing(void); + + virtual result OnTerminating(void); + + // IListViewItemEventListener + virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state); + virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status); + virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction); + virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback); + + //IListViewItemProvider + virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth); + virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth); + virtual int GetItemCount(void); + + //IActionEventListener + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + //IFormBackEventListener + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + //IKeypadEventListener + virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction); + virtual void OnKeypadClosed(Tizen::Ui::Control& source); + virtual void OnKeypadOpened(Tizen::Ui::Control& source); + virtual void OnKeypadWillOpen(Tizen::Ui::Control& source); + + //IOrientationEventListener + virtual void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus); + + // ITextEventListener + virtual void OnTextValueChanged(const Tizen::Ui::Control& source); + virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source); + + //ISceneEventListener + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + //IFocusEventListener + virtual void OnFocusGained (const Tizen::Ui::Control &source); + virtual void OnFocusLost (const Tizen::Ui::Control &source); + + static const int IDA_CREATE_BOOKMARK_FOLDER; + static const int IDA_BUTTON_DONE; + static const int IDA_BUTTON_CANCEL; + static const int IDA_LIST_LEFT_SIDE_MARGIN; + static const int IDA_LIST_LEFT_SIDE_MARGIN_DROPDOWN; + private: + int __fontSize; + int __folderCount; // Number of bookmark folders + Tizen::Base::String __folderName; // Selected folder name + int __listHeight; + int __oldFolderCount; // Folder count when view is deactivated. + BookmarkData* __pBookmark; + Tizen::Ui::Controls::EditField* __pEditFieldTitle; // Title Edit-field + Tizen::Ui::Controls::EditField* __pEditFieldUrl; // URL Editfield + Tizen::Ui::Controls::ListView* __pList; // contains only one item + Tizen::Ui::Controls::Panel* __pListPanel; // Contains the list of Bookmark folders inluding default Bookmark and Create Bookmark Folder Button + Tizen::Ui::Scenes::SceneId __previousScene; // previous scene id + Tizen::Ui::Controls::ScrollPanel* __pScrollPanel; // The Main panel which is a scroll panel + WindowInfo* __pWindowInfo; // Contains window information of current scene + int __selectedIndex; // The index of check-button which is selected + bool __showFolderList; + Tizen::Base::String __titleOnViewDeactivated; + Tizen::Base::String __view; + Tizen::Base::String __urlOnViewDeactivated; + int __itemHeight; + int __dropdownItemHeight; + }; + +#endif /* _INT_ADD_BOOKMARK_FORM_H_ */ diff --git a/inc/IntAddressbar.h b/inc/IntAddressbar.h new file mode 100644 index 0000000..b09b60e --- /dev/null +++ b/inc/IntAddressbar.h @@ -0,0 +1,221 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntAddressbar + *@brief: This class defines common behaviour of Addressbar control. + * + */ + +#ifndef _INT_ADDRESSBAR_H_ +#define _INT_ADDRESSBAR_H_ + +#include +#include +#include +#include +#include "IntIAddressbarEventListener.h" + +/*enum AddressBarMode +{ + ADDRESSBAR_MODE_INVALID = -1, + ADDRESSBAR_MODE_READER = 0, + ADDRESSBAR_MODE_LOADING, + ADDRESSBAR_MODE_LOADING_COMPLETE, + ADDRESSBAR_MODE_EDIT, +};*/ + +class Addressbar +: public Tizen::Ui::Controls::Panel + , public Tizen::System::IDeviceEventListener + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::IKeypadEventListener + , public Tizen::Ui::IFocusEventListener + , public Tizen::Ui::ITextEventListener + + { + public: + /** + * @brief This is the default constructor for this class. + */ + Addressbar(void); + + /** + * @brief This is the default destructor for this class. + */ + virtual ~Addressbar(void); + + virtual result OnTerminating(void); + + // IActionEventListener + void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + //IKeypadActionEventListener + void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction); + void OnKeypadClosed(Tizen::Ui::Control& source); + void OnKeypadOpened(Tizen::Ui::Control& source); + void OnKeypadWillOpen(Tizen::Ui::Control& source); + void OnKeypadBoundsChanged(Tizen::Ui::Control &source); + + void OnFocusGained(const Tizen::Ui::Control& source); + void OnFocusLost(const Tizen::Ui::Control& source); + + virtual void OnTextValueChanged(const Tizen::Ui::Control& source); + virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source){} + + virtual void OnDeviceStateChanged(Tizen::System::DeviceType deviceType, const Tizen::Base::String &state); + + /** + * @brief Initializes this instance of Addressbar with the specified parameters. + */ + result Initialize(const Tizen::Graphics::Rectangle& rect); + + /** + * @brief Gets the current addressbar Mode. + */ + //AddressBarMode GetAddressbarMode(void); + + /** + * brief To remove the Http from the Url editfield + */ + Tizen::Graphics::Bitmap* GetLockedImageN(void); + + /** + * @brief Gets the current progress value Addressbar control in percentage + */ + int GetProgress(void); + + /** + * @brief Gets the currently displayed Url for the Addressbar control. + */ + Tizen::Base::String GetUrl(void); + + /** + * @brief Event when orientationChanged + */ + void OrientationChanged(int& width); + + /** + * brief To remove the Http from the Url editfield + */ + Tizen::Base::String RemoveHttpTextFromDisplayURL(void); + + /** + * @brief Save the text of address bar + */ + void SaveAddressbarEditText(); + + /** + * @brief Sets the specified Url for the Addressbar control. + * + */ + void SetUrl(const Tizen::Base::String& url); + + /** + * @brief ReSets the Guide Text for the Addressbar control. + * + */ + void ResetGuideText(void); + + + /** + * @brief Sets the event listener for the Addressbar control. + * + */ + void SetAddressbarEventListener(IAddressbarEventListener* pListener); + + /** + * @brief Sets the current addressbar Mode. + */ + //void SetAddressbarMode(AddressBarMode addMode); + + /** + * brief Sets the backward Button enable or disable as per the input parameter isEnabled. + */ + void SetBackButtonEnabled(bool isEnabled); + + /** + * @brief Sets the favicon bitmap. + */ + void SetFaviconBitmap(const Tizen::Graphics::Bitmap& favicon); + + /** + * @brief Sets the Forward Button enable or disable as per the input parameter isEnabled. + */ + void SetForwardButtonEnabled(bool isEnabled); + + /** + * @brief Updates the favicon bitmap/image depending on browsing mode. + */ + void UpdateFaviconBitmap(bool isPrivateOn); + + /** + * @brief Updates the progressbar Value. + */ + void UpdateProgress(const int percentage); + + void SetAddressbarURLFocus(); + + Tizen::Base::String GetAddressbarURL(); + + bool HasCurrentFocus(void); + void HideKeypad(void); + void OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs); + private: + /** + * @brief Updates the progressbar Value. + */ + void UpdateProgressBitmap(void); + + //Action IDs + static const int IDA_REFRESH_BTN_CLICKED; + static const int IDA_READER_BTN_CLICKED; + static const int IDA_STOP_BTN_CLICKED; + static const int IDA_GO_BACK; + static const int IDA_GO_FORWARD; + static const int IDA_CANCEL; + static const int IDA_CLEAR_URL; + + private: + + Tizen::Base::String __displayUrl; + Tizen::Base::String __editTextUrl; + + bool __isLoadingData; + bool __isLoadingCompleted; + bool __isClipboardOpen; + bool __isKeyboardConnected; + bool __isKeyPadOpened; + int __progressPercentage; + + Tizen::Ui::Controls::Label* __pAddressbarBg; + Tizen::Ui::Controls::Panel* __pBgPanel; + Tizen::Ui::Controls::Button* __pClearBtn; + Tizen::Graphics::Bitmap* __pFavIcon; + Tizen::Ui::Controls::Label* __pFaviconLabel; + Tizen::Ui::Controls::Label* __pLabelPrivateOn; + IAddressbarEventListener* __pListener; + Tizen::Ui::Controls::Label* __pPrivateIconLabel; + Tizen::Ui::Controls::Label* __pProgressbarLabel; + Tizen::Ui::Controls::Label* __pSearchLabel; + Tizen::Ui::Controls::EditField* __pAddressbarUrlField; + Tizen::Ui::Controls::Label* __pToolBarLabel; + Tizen::Ui::Controls::Label* __pAddressbarURLLabel; + Tizen::Ui::Controls::Button* __pAddressBackBtn; + bool __isAppBackGround; + }; + +#endif /* _INT_ADDRESSBAR_H_ */ diff --git a/inc/IntArticleReaderForm.h b/inc/IntArticleReaderForm.h new file mode 100644 index 0000000..25018c1 --- /dev/null +++ b/inc/IntArticleReaderForm.h @@ -0,0 +1,158 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// !Internet +/*@file: IntArticleReaderForm.h + *@brief: This header file contains the declarations of the ArticleReaderForm class. + * + */ + +#ifndef _INT_ARTICLE_READER_FORM_H_ +#define _INT_ARTICLE_READER_FORM_H_ + +#include +#include +#include + +#include "IntSharePopup.h" + + +class ArticleReaderForm + : public Tizen::Ui::Controls::Form + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::IKeypadEventListener + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::ITextEventListener + , public Tizen::Ui::ITouchEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + , public Tizen::Web::Controls::ITextSearchListener + , public Tizen::Web::Controls::IWebUiEventListener + + + { + public: + /** + * @brief The Default Constructor + */ + ArticleReaderForm(void); + + /** + * @brief The Default Destructor + */ + virtual ~ArticleReaderForm(void); + + /** + * @brief Initializes this instance of ArticleReaderForm. + */ + bool Initialize(void); + + // Initializes the controls of the UI for ArticleReaderForm. + virtual result OnInitializing(void); + + virtual result OnTerminating(void); + + //IActionEventListener + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + //IKeypadEventListener + virtual void OnKeypadWillOpen(Tizen::Ui::Control& source){} + virtual void OnKeypadOpened(Tizen::Ui::Control& source); + virtual void OnKeypadClosed(Tizen::Ui::Control& source); + virtual void OnKeypadBoundsChanged (Tizen::Ui::Control &source){} + virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction){} + + //IOrientationEventListener + virtual void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus); + + //ITextEventListener + virtual void OnTextValueChangeCanceled (const Tizen::Ui::Control &source){} + virtual void OnTextValueChanged (const Tizen::Ui::Control &source); + + //ITouchEventListener + virtual void OnTouchDoublePressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo){} + virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo){} + virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo){} + virtual void OnTouchLongPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo); + virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo){} + virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo){} + virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo){} + + //ISceneEventListener + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + //ITextSearchListener + virtual void OnTextFound(int totalCount, int currentOrdinal); + + //IWebUiEventListener + virtual void OnWebPageBlockSelected(Tizen::Web::Controls::Web& source, Tizen::Graphics::Point& startPoint, Tizen::Graphics::Point& endPoint); + virtual void OnWebPageShowRequested(Tizen::Web::Controls::Web& source){} + virtual Tizen::Web::Controls::Web* OnWebWindowCreateRequested(void){return null;} + virtual void OnWebWindowCloseRequested(Tizen::Web::Controls::Web& source) {} + + result InitSelectTextContextMenu(Tizen::Graphics::Point p); + result InitFindWordPanel(void); + void StartWordSearch(void); + + void RelayoutControls(void); + void FindNextWord(bool next); + + static const int IDA_MORE_BUTTON; + static const int IDA_BACK_BUTTON; + static const int IDA_SMALL_FONT_BUTTON; + static const int IDA_LARGE_FONT_BUTTON; + static const int IDA_SAVE_CLICKED; + static const int IDA_SHARE_CLICKED; + static const int IDA_PRINT_CLICKED; + + static const int IDA_COPY_TEXT_CLICKED; + static const int IDA_FIND_TEXT_CLICKED; + static const int IDA_SHARE_TEXT_CLICKED; + + static const int IDA_FINDWORD_CANCEL_CLICKED; + static const int IDA_FINDWORD_CLEAR_CLICKED; + static const int IDA_FINDWORD_NEXT_CLICKED; + static const int IDA_FINDWORD_PREV_CLICKED; + + private: + Tizen::Web::Controls::Web* __pWebReader; + Tizen::Ui::Controls::Panel* __pFooterPanel; + Tizen::Ui::Controls::Button* __pMoreBtn; + Tizen::Ui::Controls::Button* __pBackBtn; + Tizen::Ui::Controls::Button* __pSmallFontBtn; + Tizen::Ui::Controls::Button* __pLargeFontBtn; + Tizen::Ui::Controls::ContextMenu* __pMoreMenu; + Tizen::Web::Controls::HitElementResult* __pHitElementResult; + Tizen::Ui::Controls::ContextMenu* __pSelectionMenu; + + Tizen::Ui::Controls::Label * __pFindWordBgLabel; + Tizen::Ui::Controls::Button* __pFindWordClear; + Tizen::Ui::Controls::Label* __pFindWordCountLabel; + Tizen::Ui::Controls::Panel* __pFindWordControl; + Tizen::Ui::Controls::EditField* __pFindWordEditField; + Tizen::Ui::Controls::Button* __pFindWordNext; + Tizen::Ui::Controls::Button* __pFindWordPrev; + +// Tizen::Base::String __currentSelectedStr; + SharePopup* __pPopUp; + Tizen::Base::String* __pReaderData; + Tizen::Base::String* __pShareUrl; + Tizen::Base::String* __pShareTitle; + bool __randomValue; + }; + +#endif /* _INT_ARTICLE_READER_FORM_H_ */ diff --git a/inc/IntBookmarkData.h b/inc/IntBookmarkData.h new file mode 100644 index 0000000..9461d4f --- /dev/null +++ b/inc/IntBookmarkData.h @@ -0,0 +1,240 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +/** + * @file IntBookmark.h + * @brief This header file contains the declarations of the BookmarkData class. + * + * + */ +#ifndef _INT_BOOKMARK_DATA_H_ +#define _INT_BOOKMARK_DATA_H_ + + +#include +#include +/** + * @enum BookmarkType + * + * BookmarkType enum is used to define type of bookmark + * + */ +typedef enum BookmarkType +{ + BOOKMARK_TYPE_URL = 0, + BOOKMARK_TYPE_FOLDER +}type; + +/** + * @class Bookmark + * @brief This is a model class which contains all the properties of Bookmark class + * and the methods to get and set the values for those properties + */ +class BookmarkData + : public Tizen::Base::Object +{ +public: + /** + * @brief Default constructor + */ + BookmarkData(void); + + /** + *@brief Initialises the instance the class Bookmark with the specified parameter + */ + BookmarkData(const BookmarkData& bm); + + /** + *@brief Default destructor + */ + ~BookmarkData(void); + + /** + *@brief "=" operator overloading + */ + BookmarkData& operator =(const BookmarkData& pBookmark); + + /** + * This function gets the BookmarkId + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetBookmarkId(void); + + /** + * This function gets the BookmarkTitle + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetBookmarkTitle(void); + + /** + * This function gets the BookmarkType whether FOLDER or URL + * + * @return enum type + * @param No parameter + */ + type GetBookmarkType(void); + + /** + * This function gets the created time for the bookmark + * + * @return DateTime + * @param No parameter + */ + Tizen::Base::DateTime GetCreatedTime(void); + + /** + * This function gets the FaviconId + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetFaviconId(void); + + /** + * This function gets the path of the favicon of URL + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetIconPath(void); + + /** + * This function gets the modified time for the bookmark + * + * @return DateTime + * @param No parameter + */ + Tizen::Base::DateTime GetModifiedTime(void); + + /** + * This function gets the parentId + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetParentId(void); + + /** + * This function gets the URL + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetUrl(void); + + + /** + * This function sets the BookmarkId for the bookmark object + * + * @return No return type + * @param strBookmarkId The ID for the bookmark object + */ + void SetBookmarkId(const Tizen::Base::String& strBookmarkId); + + /** + * This function sets the BookmarkTitle for the bookmark object + * + * @return No return type + * @param strTitle The Title for the bookmark object + */ + void SetBookmarkTitle(Tizen::Base::String& strTitle); + + void SetBookmarkType(type bookmarkType); + + /** + * This function sets the createdTime for the bookmark object + * + * @return No return type + * @param strCreatedTime The createdTime for the bookmark + */ + void SetCreatedTime(const Tizen::Base::DateTime& strCreatedTime); + + /** + * This function sets the faviconid + * + * @return No return type + * @param strFaviconId The ID for the favicon object + */ + void SetFaviconId(const Tizen::Base::String& strFaviconId); + + /** + * This function sets the path for the favicon of the bookmark object + * + * @return No return type + * @param strFilePath The path for the favicon icon of bookmark + */ + void SetIconPath(const Tizen::Base::String& strFilePath); + + /** + * This function sets the ModifiedTime for the bookmark object + * + * @return No return type + * @param strModifiedTime The ModifiedTime for the bookmark + */ + void SetModifiedTime(const Tizen::Base::DateTime& strModifiedTime); + + /** + * This function sets the ParentId for the bookmark object + * + * @return No return type + * @param strParentID The parentId for the bookmark object + */ + void SetParentId(const Tizen::Base::String& strParentID); + + /** + * This function sets the URL for the bookmark object + * + * @return No return type + * @param strTitle The URL for the bookmark object + */ + void SetUrl(const Tizen::Base::String& strUrl); + + void SetFavIconBitmap(Tizen::Graphics::Bitmap& favIconImage); + + void SetFavIconBuffer(Tizen::Base::ByteBuffer& favIconBuffer); + + Tizen::Base::ByteBuffer* GetFavIconBuffer(); + + Tizen::Graphics::Bitmap* GetFavIconBitmap(); + + int GetFavIconWidth(); + + int GetFavIconHeight(); + + void SetFavIconWidth(int favIconWidth); + + void SetFavIconHeight(int favIconHeight); +private: + Tizen::Base::String __bookmarkId; + type __bookmarkType; + Tizen::Base::String __bookmarkTitle; + Tizen::Base::String __bookmarkUrl; + Tizen::Base::DateTime __createdTime; + Tizen::Base::String __faviconId; + Tizen::Base::String __iconPath; + Tizen::Base::DateTime __modifiedTime; + Tizen::Base::String __parentId; + Tizen::Base::ByteBuffer* __pFavIconData; + int __favIconWidth; + int __favIconHeight; +}; + +#endif //_INT_BOOKMARK_DATA_H_ diff --git a/inc/IntBookmarkListForm.h b/inc/IntBookmarkListForm.h new file mode 100644 index 0000000..a97d14f --- /dev/null +++ b/inc/IntBookmarkListForm.h @@ -0,0 +1,156 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: BookmarkListForm + *@brief: This class defines BookmarkListForm + * + */ + +#ifndef _INT_BOOKMARK_LIST_FORM_H_ +#define _INT_BOOKMARK_LIST_FORM_H_ + +#include +#include +#include "IntConfirmationPopup.h" +#include "IntSharePopup.h" + +class BookmarkListForm +: public Tizen::Ui::Controls::Form + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::Controls::IFastScrollListener + , public Tizen::Ui::IFocusEventListener + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::Controls::IListViewItemProvider + , public Tizen::Ui::Controls::IListViewItemEventListener + , public Tizen::Ui::IKeypadEventListener + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + , public Tizen::Ui::Controls::ISearchBarEventListener + + { + public: + + /** + * @brief The Default Constructor + * + */ + BookmarkListForm(void); + + /** + * @brief The Default Destructor + * + */ + virtual ~BookmarkListForm(void); + + /** + * @brief Initializes this instance of BookmarkListForm. + * + */ + bool Initialize(void); + + // IActionEventListener + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + // IFormBackEventListener + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + /** + * Initializes the controls of the UI for BookmarkListForm. + * + */ + virtual result OnInitializing(void); + virtual result OnTerminating(void); + + // IOrientationEventListener + void OnOrientationChanged (const Tizen::Ui::Control &source, Tizen::Ui::OrientationStatus orientationStatus); + + // ISceneEventListener + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + protected: + + // IListViewItemProvider + virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth); + virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth); + virtual int GetItemCount(void); + + // IFastScrollListener + virtual void OnFastScrollIndexSelected(Tizen::Ui::Control& source, Tizen::Base::String& index); + + //IFocusEventListener + virtual void OnFocusGained(const Tizen::Ui::Control& source) ; + virtual void OnFocusLost(const Tizen::Ui::Control& source) ; + + // IListViewItemEventListener + virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus status); + virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback); + virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status); + virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction); + + //IKeypadEventListener + virtual void OnKeypadWillOpen(Tizen::Ui::Control& source); + virtual void OnKeypadOpened(Tizen::Ui::Control& source); + virtual void OnKeypadClosed(Tizen::Ui::Control& source); + virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction); + virtual void OnKeypadBoundsChanged(Tizen::Ui::Control& source); + + //ISearchBarEventListener + virtual void OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode); + + void OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs); + + private: + static const int IDA_TABBAR_ITEM_1; + static const int IDA_TABBAR_ITEM_2; + static const int IDA_FOOTER_ITEM1; + static const int IDA_FOOTER_ITEM2; + static const int IDA_FOOTER_ITEM_ADDBOOKMARK; + static const int IDA_FORMAT_FOLDER; + static const int IDA_FORMAT_SITE; + static const int IDA_CONTEXT_ITEM_FOLDER_EDIT; + static const int IDA_CONTEXT_ITEM_FOLDER_DELETE; + static const int IDA_CONTEXT_ITEM_EDIT; + static const int IDA_CONTEXT_ITEM_SHARE; + static const int IDA_CONTEXT_ITEM_DELETE; + static const int IDA_FORMAT_ICON; + static const int IDA_FORMAT_URL; + + static const int IDA_CONFIRMATION_NO; + static const int IDA_CONFIRMATION_YES; + bool __noBookmarks; + Tizen::Base::String __parentID; + Tizen::Base::Collection::ArrayList* __pData; + ConfirmationPopup* __pConfirmationPopup; + Tizen::Ui::Controls::Footer* __pFooter; + Tizen::Ui::Controls::ListContextItem* __pItemContextFolder; + Tizen::Ui::Controls::ListContextItem* __pItemContextSite; + Tizen::Ui::Controls::ListView* __pListview; + SharePopup* __pPopUp; + + Tizen::Ui::Scenes::SceneId __previousSceneId; + Tizen::Ui::Controls::SearchBar* __pSearchBar; + Tizen::Ui::Controls::ListView* __pSearchListView; // The GroupedListView which contains the Search Bookmark lists + bool __searchBookmark; + Tizen::Base::String __searchText; + int __selectedindex; + Tizen::Base::String __selectedTitle; + int __fontSize; + }; + +#endif //_INT_BOOKMARK_LIST_FORM_H_ diff --git a/inc/IntBookmarkPresentationModel.h b/inc/IntBookmarkPresentationModel.h new file mode 100644 index 0000000..3d5c5f7 --- /dev/null +++ b/inc/IntBookmarkPresentationModel.h @@ -0,0 +1,336 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntBookmarkPresentationModel.h + *@brief: This is the header file for BookmarkPresentationModel class + */ + +#ifndef _INT_BOOKMARK_PRESENTATION_MODEL_H +#define _INT_BOOKMARK_PRESENTATION_MODEL_H + +#include +#include +#include + +#include "IntBookmarkData.h" +#include "IntPresentationModelBase.h" +#include "IntTypes.h" + +enum { + BOOKMARK_ID = 0, + BOOKMARK_TYPE, + BOOKMARK_PARENT, + BOOKMARK_ADDRESS, + BOOKMARK_TITLE, + BOOKMARK_CREATIONDATE, + BOOKMARK_SEQUENCE, + BOOKMARK_UPDATEDATA, + BOOKMARK_VISITDATE, + BOOKMARK_EDITABLE, + BOOKMARK_ACCESSACCOUNT, + BOOKMARK_FAVICON, + BOOKMARK_FAVICON_LENGTH, + BOOKMARK_FAVICON_W, + BOOKMARK_FAVICON_H, + BOOKMARK_CREATED_DATE, + BOOKMARK_ACCOUNT_NAME, + BOOKMARK_ACCOUNT_TYPE, + BOOKMARK_THUMBNAIL, + BOOKMARK_THUMBNAIL_LENGTH, + BOOKMARK_THUMBNAIL_W, + BOOKMARK_THUMBNAIL_H, + BOOKMARK_VERSION, + BOOKMARK_SYNC, + BOOKMARK_TAG1, + BOOKMARK_TAG2, + BOOKMARK_TAG3, + BOOKMARK_TAG4, + /*HISTORY_ICON_PATH, + HISTORY_FAVICONID, + HISTORY_THUMBNAIL, + HISTORY_BOOKMARK_ID, + HISTORY_VISITED_COUNT*/ +}; + +/** + * @class BookmarkPresentationModel + * @brief This class declares functions which will manage database + */ +class BookmarkPresentationModel +:public PresentationModelBase + { +public: + /** + * @brief The method used to get the already created instance of the FaviconManager + */ + static BookmarkPresentationModel* GetInstance(void); + /** + * This function deletes the bookmark from the bookmark table + * + * @return An error code + * @param bookmarkId The bookmarkId + * @exception E_SUCCESS The bookmark is successfully deleted + * @exception E_FAILURE The bookmark deletion is unsuccessful + */ + result DeleteBookmark(int bookmarkId); + + /** + * This function deletes the bookmark from the bookmark table + * + * @return An error code + * @param url URL of the bookmark + * @exception E_SUCCESS The bookmark is successfully deleted + * @exception E_FAILURE The bookmark deletion is unsuccessful + */ + result DeleteBookmark(const Tizen::Base::String& url); + + /** + * This function deletes the bookmark from the bookmark table + * + * @return An error code + * @param folderId The folderID + * @exception E_SUCCESS The bookmark is successfully deleted + * @exception E_FAILURE The bookmark deletion is unsuccessful + */ + result DeleteBookmarkByFolderId(int folderId); + + /** + * This function deletes the folder from the folder table + * + * @return An error code + * @param bookmarkId The folderId + * @exception E_SUCCESS The folder is successfully deleted + * @exception E_FAILURE The folder deletion is unsuccessful + */ + result DeleteFolder(int folderId); + + + /** + * This function checks whether the Bookmark with given URl already exists or not + * + * @return An error code + * @param URl + * @exception E_SUCCESS The method is successful + * @exception E_FAILURE The method is not successful as the list is not being created + * @remarks To check whether the Bookmark with given URl already exists or not + */ + result DoesBookmarkExist(const Tizen::Base::String& Url, bool &exist, const Tizen::Base::String& parentId = L"-1", bool checkParentId = false); + /** + * This function selects the bookmarks from the table + * + * @return An error code + * @param parentID parentId for bookmark : Folder or URL + * @param startIndex the OFFSET value + * @param limit The LIMIT till which the select statement will be executed + * @param bookmarkList The arraylist where the selected bookmarks will be saved + */ + result GetBookmark(const Tizen::Base::String& parentID, const int startIndex, const int limit, Tizen::Base::Collection::ArrayList& bookmarkList); + + + result GetBookmarkForHistory(int startIndex, Tizen::Base::Collection::ArrayList& bookmarkList); + + /** + * This function returns the no of bookmarks + * + * @return An error code + * @param parentID Folder or URL + */ + result GetBookmarkCount(const Tizen::Base::String& parentID, int& count); + + /** + * This function selects the bookmark folders from the table + * + * @return An error code + * @param parentID parentId for bookmark : Folder or URL + * @param startIndex the OFFSET value + * @param limit The LIMIT till which the select statement will be executed + * @param bookmarkList The arraylist where the selected bookmarks will be saved + */ + result GetFolder(const Tizen::Base::String& parentID, int startIndex,int limit, Tizen::Base::Collection::ArrayList& bookmarkList); + + + /** + * This function returns the no of bookmark folders + * + * @return An error code + * @param parentID Folder or URL + */ + result GetFolderBookmarkCount(const Tizen::Base::String& parentID, int& Count); + + /** + * This function selects the bookmark folders from the table + * + * @return An error code + * @param parentID parentId for bookmark : Folder or URL + * @param startIndex the OFFSET value + * @param limit The LIMIT till which the select statement will be executed + * @param bookmarkList The arraylist where the selected bookmarks will be saved + */ + result GetFoldersBookmarks(const Tizen::Base::String& parentID, const int startIndex, const int limit, Tizen::Base::Collection::ArrayList& bookmarkList); + + /** + * This function returns the no of bookmark folders. + * + * @return An error code + * @param parentID Folder or URL + */ + result GetFolderCount(const Tizen::Base::String& parentID, int& count); + + /** + * This function selects the searched bookmarks from the table + * + * @return An error code + * @param startIndex the OFFSET value + * @param limit The LIMIT till which the select statement will be executed + * @param BookmarkList The arraylist where the selected searched bookmarks will be saved + */ + result GetSearchBookmark(int startIndex,int limit, Tizen::Base::Collection::ArrayList& BookmarkList, Tizen::Base::String& text); + + + /** + * This function returns the no of searched Bookmarks + * + * @return An error code + * @param count The no of matching bookmarks will be returned in count. + */ + result GetSearchBookmarkCount(int& count, Tizen::Base::String& text); + + /** + * This function selects the searched folders from the table + * + * @return An error code + * @param startIndex the OFFSET value + * @param limit The LIMIT till which the select statement will be executed + * @param FolderList The arraylist where the selected searched folders will be saved + */ + result GetSearchFolder(int startIndex,int limit, Tizen::Base::Collection::ArrayList& FolderList, Tizen::Base::String& text); + + /** + * This function returns the no of searched Bookmarks and Folders + * + * @return An error code + * @param count The no of matching bookmarks and folders will be returned in count. + */ + result GetSearchFolderBookmarkCount(int& count, Tizen::Base::String& text); + + /** + * This function returns the no of searched Folders + * + * @return An error code + * @param count The no of matching Folders will be returned in count. + */ + result GetSearchFolderCount(int& count, Tizen::Base::String& text); + + /** + * This function selects the searched bookmark folders from the table + * + * @return An error code + * @param startIndex the OFFSET value + * @param limit The LIMIT till which the select statement will be executed + * @param BookmarkList The arraylist where the selected searched bookmarks will be saved + */ + result GetSearchFoldersBookmarks(int startIndex,int limit, Tizen::Base::Collection::ArrayList& BookmarkList, Tizen::Base::String& text); + + /** + * This function adds the folder to the folder table + * + * @return An error code + * @param bookmark The folder + * @exception E_SUCCESS The folder is inserted successfully to the table + * @exception E_FAILURE The folder is not inserted successfully + */ + result SaveFolder(BookmarkData& bookmark); + + /** + * This function adds the bookmarks to the bookmark table + * + * @return An error code + * @param bookmark The bookmark + * @exception E_SUCCESS The bookmark is inserted successfully to the table + * @exception E_FAILURE The bookmark is not inserted successfully + */ + result SaveBookmark(BookmarkData& bookmark); + + result SaveTempBookmark(BookmarkData& bookmark); +private: + /** + * @brief The Default Constructor + */ + BookmarkPresentationModel(void); + + /** + * @brief The Default Destructor + */ + ~BookmarkPresentationModel(void); + + /** + * copy constructor + */ + BookmarkPresentationModel(const BookmarkPresentationModel& settingModelObj); + + /** + * assignment operator + */ + + BookmarkPresentationModel& operator=(const BookmarkPresentationModel& settingModelObj); + + /** + *@brief Initialize storage service + */ + result Construct(void); + + /** + * @brief The method used to create the instance of the SettingsManager class + */ + static void CreateInstance(void); + + /** + * @brief The method used to remove the already created instance of the SettingsManager + */ + static void DestroyInstance(void); + + /** + * This function creates the list of BookMark + * + * @return An error code + * @param nBookmarkCount The no of BookMark present + * @param bookmarkList An ArrayList where the BookMark will be stored + * @exception E_SUCCESS The method is successful + * @exception E_FAILURE The method is not successful as the list is not being created + * @remarks To work properly , the bookmark count and and existing list should be passed + */ + result CreateBookmarkList(int nBookmarkCount, Tizen::Base::Collection::ArrayList& bookmarkList); + /** + * This function creates the list of BookMark folders + * + * @return An error code + * @param bookmarkCount The no of BookMark folders present + * @param bookmarkList An ArrayList where the BookMark will be stored + * @exception E_SUCCESS The method is successful + * @exception E_FAILURE The method is not successful as the list is not being created + * @remarks To work properly , the bookmark count and and existing list should be passed + */ + + result CreateFolderList(int bookmarkCount, Tizen::Base::Collection::ArrayList& bookmarkList); + +private: + static BookmarkPresentationModel* __pBookmarkPresentationModel; + + }; + +#endif //_INT_BOOKMARK_PRESENTATION_MODEL_H diff --git a/inc/IntBrightnessForm.h b/inc/IntBrightnessForm.h new file mode 100644 index 0000000..9b3820b --- /dev/null +++ b/inc/IntBrightnessForm.h @@ -0,0 +1,105 @@ + +// Copyright 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Apache License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//!Internet IntBrightness class +/*@file: IntBrightness.h + *@brief: This class defines IntBrightness used to change the brightness + * + */ + +#ifndef _INT_BRIGHTNESS_FORM_H_ +#define _INT_BRIGHTNESS_FORM_H_ + +#include +#include +#include + + +class BrightnessForm + : public Tizen::Ui::Controls::Form + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::IAdjustmentEventListener + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + , public Tizen::Ui::Controls::ISliderEventListener + +{ +public: + /** + * @brief The Default Constructor + * + * @return + */ + BrightnessForm(void); + + /** + * @brief The Default Destructor + * + * @return + */ + virtual ~BrightnessForm(void); + + /** + * @brief Initializes this Brightness Form. + * + * @return An error code + * @param[in] void + * @exception true The method is successful. + * @exception false An error occurred. + */ + bool Initialize(void); + + /** + * @brief Initializes the controls of the UI for Brightness. + * + * @return An error code + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_STATE This instance has already been constructed. + * @exception E_INVALID_ARG A specified input parameter is invalid. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_SYSTEM A system error has occurred. + * + */ + result OnInitializing(void); + void OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs); + +protected: + + //IActionEventListener + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + //IAdjustmentEventListener + void OnAdjustmentValueChanged(const Tizen::Ui::Control& source, int adjustment); + //IFormBackEventListener + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + //IOrientationEventListener + virtual void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus); + + //ISceenEventListener + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + //ISliderEventListener + virtual void OnSliderBarMoved(Tizen::Ui::Controls::Slider& source, int value); + +private: + bool __manualBrightness; + Tizen::Ui::Controls::Slider* __pBrightnessSlider; + Tizen::Ui::Controls::Label* __pLabel; +}; + +#endif /* _INT_BRIGHTNESS_FORM_H_ */ diff --git a/inc/IntCommonLib.h b/inc/IntCommonLib.h new file mode 100644 index 0000000..995d0da --- /dev/null +++ b/inc/IntCommonLib.h @@ -0,0 +1,114 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//!Internet +/*@file: IntCommonLib.h + *@brief: To define the common method of Internet application + */ + +#ifndef _INT_COMMON_LIB_H_ +#define _INT_COMMON_LIB_H_ + +#include + +/** +* @struct CommonBitmapTable +* +* Defines the table to store a bitmap +* +*/ +struct CommonBitmapTable +{ + Tizen::Graphics::Bitmap* ptr; + int refcount; + Tizen::Base::String filename; + int width; + int height; +}; + +/** +* @enum CommonBitmapId +* +* Defines a ID for a Bitmap path +* +*/ +enum CommonBitmapId +{ + +}; + +/** + * @class CommonUtil + * @brief This file declares common methods to be used + */ +class CommonUtil +{ +public: + + /** + * Returns a pointer to a bitmap value using ID + * + * @return Pointer to a bitmap value + * @param[in] CommonBitmapId The ID of the Bitmap + * @remarks To work properly, the existing CommonBitmapId has to be passed. + */ + static Tizen::Graphics::Bitmap* GetBitmap(uint id); + + /** + * Returns a pointer to a bitmap value using bitmap path, bitmap width and bitmap height + * + * @return Pointer to a bitmap value + * @param[in] strPath The path of the existing bitmap stored in res folder + * @param[in] width The width of the existing bitmap stored in res folder + * @param[in] height The height of the existing bitmap stored in res folder + * @remarks To work properly, the existing strPath, its width and height has to be passed. + */ + static Tizen::Graphics::Bitmap* GetBitmapN(const Tizen::Base::String& strPath, const int width, const int height); + + /** + * Gets a bitmap using ID assigned to it. + * + * @return Bitmap + * @param[in] Path + * @param[in] width + * @param[in] height + * @remarks Releases all the bitmaps stored + */ + static Tizen::Graphics::Bitmap* GetNinepatchedBitmapN(const Tizen::Base::String& strPath, const int width, const int height); + + /** + * Returns the string value using ID + * + * @return String + * @param[in] resourceId The ID of the resource string + * @remarks To work properly, the existing resourceId has to be passed. + */ + static Tizen::Base::String GetString(const Tizen::Base::String& resourceId); + + /** + * Gets the font size from the settings + * + * @return Int + * @param[in] void + * @remarks Gets the font size + */ + static int GetFontSize(void); + +private: + static CommonBitmapTable __commonBitmapTable[]; +}; + +#endif //_INT_COMMON_LIB_H_ diff --git a/inc/IntConfirmationPopup.h b/inc/IntConfirmationPopup.h new file mode 100644 index 0000000..f9cb297 --- /dev/null +++ b/inc/IntConfirmationPopup.h @@ -0,0 +1,66 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// !Internet +/*@file: IntConfirmationPopup.h + *@brief: This header file contains the declarations of the ConfirmationPopup + * + */ + +#ifndef CONFIRMATIONPOPUP_H_ +#define CONFIRMATIONPOPUP_H_ + +#include +#include + +class ConfirmationPopup + : public Tizen::Ui::Controls::Popup + , public Tizen::Ui::IPropagatedKeyEventListener + { +public: + ConfirmationPopup(void); + + virtual ~ConfirmationPopup(void); + + bool Initialize(void); + + void AddActionListener(Tizen::Ui::IActionEventListener& listener); + + Tizen::Base::String GetMessage(void); + + virtual result OnTerminating(void); + + void RemoveActionListener(Tizen::Ui::IActionEventListener& listener); + + void setMessage(Tizen::Base::String& str); + + //IPropagatedKeyEventListener + virtual bool OnKeyPressed (Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo){return false;} + virtual bool OnKeyReleased (Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo); + virtual bool OnPreviewKeyPressed (Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo){return false;} + virtual bool OnPreviewKeyReleased (Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo){return false;} + + +private: + + Tizen::Base::String __message; + Tizen::Ui::Controls::Button* __pNoButton; + Tizen::Ui::Controls::Label* __pPopupText; + Tizen::Ui::Controls::Button* __pYesButton; +}; + +#endif /* CONFIRMATIONPOPUP_H_ */ diff --git a/inc/IntCreateBookmarkFolderForm.h b/inc/IntCreateBookmarkFolderForm.h new file mode 100644 index 0000000..9f15aab --- /dev/null +++ b/inc/IntCreateBookmarkFolderForm.h @@ -0,0 +1,101 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntCreateBookMarkFolderForm + *@brief: This class creates Bookmark folder + * + */ + + +#ifndef _INT_CREATE_BOOKMARK_FOLDER_FORM_H_ +#define _INT_CREATE_BOOKMARK_FOLDER_FORM_H_ + +#include +#include +#include "IntBookmarkData.h" + +class CreateBookmarkFolderForm + : public Tizen::Ui::Controls::Form + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::IKeypadEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + , public Tizen::Ui::ITextEventListener +{ + +public: + /** + * @brief The Default Constructor + * + */ + + CreateBookmarkFolderForm(void); + + /** + * @brief The Default Destructor + */ + + virtual ~CreateBookmarkFolderForm(void); + + /** + * @brief Shows alert message + * + */ + void CreateMessage(Tizen::Base::String& str); + + /** + * @brief Initializes this instance of %CreateBookmarkFolderForm. + */ + bool Initialize(void); + + virtual result OnInitializing(void); + virtual result OnTerminating(void); + + // IActionEventListener + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + //IFormBackEventListener + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + //IKeypadListener + virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction); + virtual void OnKeypadClosed(Tizen::Ui::Control& source); + virtual void OnKeypadOpened(Tizen::Ui::Control& source); + virtual void OnKeypadWillOpen(Tizen::Ui::Control& source); + + //ISceneEventListener + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + // ITextEventListener + virtual void OnTextValueChanged(const Tizen::Ui::Control& source); + virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source); + +protected: + static const int IDA_BUTTON_DONE; + static const int IDA_BUTTON_CANCEL; +private: + int __modalMsgBoxResult; + BookmarkData* __pBookmark; + Tizen::Ui::Controls::EditField* __pFolderTitle; // Folder Title Editfield + Tizen::Ui::Controls::MessageBox* __pMsgBox; // Message Box to display alert if folder with same name already exists + Tizen::Ui::Scenes::SceneId __previousScene; + bool __ret; +}; + +#endif /* _INT_CREATE_BOOKMARK_FOLDER_FORM_H_ */ diff --git a/inc/IntDefaultCustomItem.h b/inc/IntDefaultCustomItem.h new file mode 100644 index 0000000..3da811e --- /dev/null +++ b/inc/IntDefaultCustomItem.h @@ -0,0 +1,80 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//!Internet +/*@file: DefaultCustomItem + *@brief: This class defines common behaviour of custom Item. + * + */ + +#ifndef _INT_DEFAULT_CUSTOM_ITEM_H_ +#define _INT_DEFAULT_CUSTOM_ITEM_H_ + + + +#include +#include +#include + + +class DefaultCustomItem + : public Tizen::Ui::Controls::CustomItem +{ + +public: + /** + * @brief The Default Constructor + */ + DefaultCustomItem(void); + + /** + * @brief The Default Destructor + */ + virtual ~DefaultCustomItem(void); + + /** + * @brief Initializes this instance of %DropDownCustomItem. + */ + result Construct(int width, int height); + + + //getter and setter methods for Text + + /** + * @brief The method used to get the text of CustomItem + */ + Tizen::Base::String GetText(void); + + /** + * @brief Add all the required elements and create the Custom Item. + */ + result Make(void); + + /** + * @brief The method used to set the text of CustomItem + */ + void SetText(Tizen::Base::String& text); +protected: + static const int IDA_FORMAT_STRING; + +private: + int __height; ///Height of the SettingToggleCustomItem Instance + Tizen::Base::String __text; ///The Text for the Toggle Button + int __width; ///Width of the SettingToggleCustomItem Instance + int __fontSize; ///fontsize from settings +}; + +#endif /* _INT_DEFAULT_CUSTOM_ITEM_H_ */ diff --git a/inc/IntDropDownCustomItem.h b/inc/IntDropDownCustomItem.h new file mode 100644 index 0000000..b8f70ba --- /dev/null +++ b/inc/IntDropDownCustomItem.h @@ -0,0 +1,112 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//!Internet +/*@file: DropDownCustomItem + *@brief: This class defines common behaviour of Drop down custom Item. + * + */ + +#ifndef _INT_DROPDOWN_CUSTOM_ITEM_H_ +#define _INT_DROPDOWN_CUSTOM_ITEM_H_ + + +#include +#include + +enum DropDownItemState +{ + DROP_DOWN_ITEM_STATE_OPENED = 0, + DROP_DOWN__ITEM_STATE_CLOSED +}; + +class DropDownCustomItem + : public Tizen::Ui::Controls::CustomItem +{ + +public: + /** + * Initializes this instance of DropDownCustomItem. + */ + result Construct(int width); + + + /** + * @brief The Default constructor + */ + DropDownCustomItem(void); + + + /** + * @brief The Default Destructor + */ + virtual ~DropDownCustomItem(void); + + //getter and setter methods for Main Text + + /** + * @brief The method used to get the Title text of CustomItem + */ + DropDownItemState GetCurState(void); + + /** + * @brief The method used to get the Title text of CustomItem + */ + Tizen::Base::String GetMainText(void); + + /** + * @brief The method used to get the Sub text of CustomItem + */ + Tizen::Base::String GetSubText(void); + + /** + * @brief Add all the required elements and create the Custom Item. + * + */ + result Make(void); + + /** + * @brief The method used to set the Title text of CustomItem + */ + void SetCurState(DropDownItemState); + + /** + * @brief The method used to set the Title text of CustomItem + */ + void SetMainText(const Tizen::Base::String& text); + + /** + * @brief The method used to set the Sub text of CustomItem + */ + void SetSubText(const Tizen::Base::String& text); + +protected: + static const int IDA_FORMAT_BITMAP; + static const int IDA_FORMAT_MAIN_STRING; + static const int IDA_FORMAT_SUB_STRING; + static const int IDA_FORMAT_DROPPER; + +private: + DropDownItemState __currentState; + int __height; ///Height of the SettingToggleCustomItem Instance + int __width; ///Width of the SettingToggleCustomItem Instance + + Tizen::Base::String __mainText; ///The MainText for the Toggle Button + Tizen::Base::String __subText; ///The SubText for the Toggle Button + int __fontSize; ///fontsize from settings +}; + +#endif /* _INT_DROPDOWN_CUSTOM_ITEM_H_ */ diff --git a/inc/IntEditBookmarkListForm.h b/inc/IntEditBookmarkListForm.h new file mode 100644 index 0000000..099cf15 --- /dev/null +++ b/inc/IntEditBookmarkListForm.h @@ -0,0 +1,122 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: EditBookmarkListForm + *@brief: This class defines EditBookmarkListForm used to edit the bookmark + * + */ + +#ifndef _INT_EDIT_BOOKMARK_LIST_FORM_H_ +#define _INT_EDIT_BOOKMARK_LIST_FORM_H_ + +#include +#include +#include "IntConfirmationPopup.h" +#include "IntNotificationPanel.h" + +class EditBookmarkListForm + : public Tizen::Ui::Controls::Form + , public Tizen::Base::Runtime::ITimerEventListener + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::Controls::IFastScrollListener + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::Controls::IListViewItemProvider + , public Tizen::Ui::Controls::IListViewItemEventListener + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + { +public: + EditBookmarkListForm(void); + + /** + * @brief The Default Destructor + */ + virtual ~EditBookmarkListForm(void); + + /** + * @brief Initializes this instance of EditBookmarkListForm. + * + */ + bool Initialize(void); + + public: + virtual result OnInitializing(void); + + // IListViewItemProvider + virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth); + virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth); + virtual int GetItemCount(void); + + // IActionEventListener + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + //IFastScrollListener + virtual void OnFastScrollIndexSelected(Tizen::Ui::Control& source, Tizen::Base::String& index); + + // IFormBackEventListener + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + // IOrientationEventListener + virtual void OnOrientationChanged (const Tizen::Ui::Control &source, Tizen::Ui::OrientationStatus orientationStatus); + + // IListViewItemEventListener + virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus status); + virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback); + virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status); + virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction); + virtual void OnListViewItemReordered(Tizen::Ui::Controls::ListView& listView, int indexFrom, int indexTo); + + //ITimerEventListener + virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer); + + //ISceenEventListener + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + void OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs); + +protected: + static const int IDA_BUTTON_CHECKED; + static const int IDA_TABBAR_ITEM_1; + static const int IDA_TABBAR_ITEM_2; + static const int IDA_DELETEITEM_CLICKED; + static const int IDA_SHAREITEM_CLICKED; + static const int IDA_CANCELITEM_CLICKED; + static const int IDA_FORMAT_FOLDER; + static const int IDA_FORMAT_SITE; + static const int IDA_FORMAT_ICON; + static const int IDA_FORMAT_BITMAP; + static const int IDA_BUTTON_UNCHECKED; + static const int IDA_FORMAT_URL; + +private: + Tizen::Base::String __parentID; + Tizen::Ui::Controls::CheckButton* __pCheckButton; + ConfirmationPopup* __pConfirmationPopup; + Tizen::Base::Collection::ArrayList* __pData; + Tizen::Base::Runtime::Timer* __pTimer; + Tizen::Ui::Controls::Label* __pInfoLabel; + Tizen::Ui::Controls::Panel* __pInfoPanel; + Tizen::Ui::Controls::ListView* __pListview; + Tizen::Base::Collection::ArrayList* __pSelectedList; + int __selectedItemCount; + int __fontSize; + NotificationPanel* __pNotification; + }; + +#endif /* _INT_EDIT_BOOKMARK_LIST_FORM_H_ */ diff --git a/inc/IntEditHistoryListForm.h b/inc/IntEditHistoryListForm.h new file mode 100644 index 0000000..e30fd1d --- /dev/null +++ b/inc/IntEditHistoryListForm.h @@ -0,0 +1,156 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntEditHistoryListForm + *@brief: This class defines EditHistoryListForm used to edit the history scene + * + */ + +#ifndef _INT_EDIT_HISTORY_LIST_FORM_H_ +#define _INT_EDIT_HISTORY_LIST_FORM_H_ + +#include +#include +#include "IntConfirmationPopup.h" +#include "IntNotificationPanel.h" + + +class EditHistoryListForm + : public Tizen::Ui::Controls::Form + , public Tizen::Base::Runtime::ITimerEventListener + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::Controls::IGroupedListViewItemEventListener + , public Tizen::Ui::Controls::IGroupedListViewItemProvider + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + { + public: + + /** + * @brief The Default constructor + */ + EditHistoryListForm(void); + + /** + * @brief The Default Destructor + */ + virtual ~EditHistoryListForm(void); + + /** + * @brief To Create Group Items. + * + */ + void CreateGroupItems(void); + + /** + * @brief Initializes this instance of EditHistoryListForm. + * + */ + bool Initialize(void); + + /** + * @brief converts the integer value of month to string value for that corresponding month. + * + */ + Tizen::Base::String GetMonth(int month); + + public: + + // IActionEventListener + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + // IFormBackEventListener + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + //IGroupedListViewItemProvider + Tizen::Ui::Controls::GroupItem* CreateGroupItem(int groupIndex, int itemWidth); + Tizen::Ui::Controls::ListItemBase* CreateItem(int groupIndex, int itemIndex, int itemWidth); + bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth); + bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth); + int GetGroupCount(void); + int GetItemCount(int groupIndex); + + /** + * Initializes the controls of the UI for EditHistoryListForm. + */ + virtual result OnInitializing(void); + + virtual result OnTerminating(void); + + + //ITimerEventListener + virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer); + + //IGroupedListViewItemEventListener + void OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus status); + void OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus status); + void OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction); + + //ISceneEventListener + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + //IOrientationEventListener + virtual void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus); + + void OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs); + protected: + static const int IDA_TABBAR_ITEM_1; + static const int IDA_TABBAR_ITEM_2; + static const int IDA_BUTTON_NEXT_FORM; + static const int IDA_FORMAT_ICON; + static const int IDA_FORMAT_TITLE; + static const int IDA_FORMAT_URL; + static const int IDA_SELECT_ALL_CHECKED; + static const int IDA_SELECT_ALL_UNCHECKED; + static const int IDA_DELETE_HISTORY; + static const int IDA_CANCEL; + + private: + bool __isNoHistoryPresent; + Tizen::Base::Collection::ArrayList* __pGroupData; + Tizen::Base::Runtime::Timer* __pTimer; + Tizen::Ui::Controls::GroupedListView* __pListView; // The GroupedListView which contains the history lists + + Tizen::Ui::Controls::CheckButton* __pSelectAllCheck; + Tizen::Ui::Controls::Label* __pSelectedLabel; + int __selectedCount; + int __fontSize; + ConfirmationPopup* __pConfirmationPopup; + NotificationPanel* __pNotification; + + class GroupItemClass + :public Tizen::Base::Object + { + public: + GroupItemClass() { __pData = NULL ; } + ~GroupItemClass(){ if(__pData!=null) __pData->RemoveAll(true); delete __pData; __pData = null;} + GroupItemClass(const GroupItemClass& groupItem){__pData = groupItem.__pData; } + GroupItemClass& operator =(const GroupItemClass& groupItem){if (this != &groupItem) __pData = groupItem.__pData; return *this;} + public: + Tizen::Base::DateTime __endTime; + Tizen::Base::Collection::ArrayList* __pData; + Tizen::Base::DateTime __startTime; + Tizen::Base::String __titleText; + + + }; + }; + +#endif /* _INT_EDIT_HISTORY_LIST_FORM_H_ */ diff --git a/inc/IntEditHomePageForm.h b/inc/IntEditHomePageForm.h new file mode 100644 index 0000000..c021883 --- /dev/null +++ b/inc/IntEditHomePageForm.h @@ -0,0 +1,114 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet EditHomePageScene class +/*@file: EditHomePageScene.h + *@brief: Allow user to set any page as Home page. + * + */ + +#ifndef _INT_EDIT_HOME_PAGE_FORM_H_ +#define _INT_EDIT_HOME_PAGE_FORM_H_ + +#include +#include +#include +#include +#include + +class EditHomePageForm + : public Tizen::Ui::Controls::Form + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + , public Tizen::Ui::ITextEventListener +{ +public: + /** + *@brief Default constructor + */ + EditHomePageForm(void); + + /** + * Default destructor + */ + virtual ~EditHomePageForm(void); + + /** + * @brief Shows alert message. + */ + void CreateMessage(Tizen::Base::String& str); + + /** + *@brief Constructing and Initializing EditHomePageScene + */ + bool Initialize(void); + +public: + /** + *brief Used to create instances and set styles for the form content. + */ + virtual result OnInitializing(void); + + /** + *brief Called on terminate of a form + */ + virtual result OnTerminating(void); + + // IActionEventListener + /** + *brief Called when an action event occurs. + */ + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + + // IFormBackEventListener + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + // ISceneEventListener + + /** + *brief Called after setting as current scene. + */ + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + + /** + *brief Called when the current scene is deactivated. + */ + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + // ITextEventListener + virtual void OnTextValueChanged(const Tizen::Ui::Control& source); + virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control& source); + + // IOrientationEventListener + virtual void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus); + +protected: + static const int IDA_BUTTON_DONE; + static const int IDA_BUTTON_CANCEL; + +private: + int __modalMsgBoxResult; + Tizen::Ui::Controls::MessageBox* __pMsgBox; // Message Box to display alert if folder with same name already exists + Tizen::Ui::Controls::EditField* __pUrlEditField; +}; + + + +#endif /* _INT_EDIT_HOME_PAGE_FORM_H_ */ diff --git a/inc/IntFaviconManager.h b/inc/IntFaviconManager.h new file mode 100644 index 0000000..4331828 --- /dev/null +++ b/inc/IntFaviconManager.h @@ -0,0 +1,137 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntFaviconManager.h + *@brief: This is the header file for FaviconManager class + */ + + +#ifndef _FAVICON_MANAGER_H +#define _FAVICON_MANAGER_H + +#include +#include +#include +#include +#include +#include + +#include "IntTypes.h" +#include "IntPresentationModelBase.h" + +/** + * @class FaviconManager + * @brief This class declares functions which will manage Favicon + */ +class FaviconManager +:public PresentationModelBase + { + +public: + /** + * @brief The method used to get the already created instance of the FaviconManager + */ + static FaviconManager* GetInstance(void); + + /** + * This function selects the favicons from the table + * + * @return A Bitmap Pointer + * @param no parameters + */ + Tizen::Graphics::Bitmap* GetDefaultFaviconN(void); + + /** + * This function selects the favicons from the table + * + * @return A Bitmap Pointer + * @param ID the Favicon ID + */ + Tizen::Graphics::Bitmap* GetFaviconN(Tizen::Base::String& ID); + + /** + * This function adds the favicons to the Favicon table + * + * @return String Type + * @param bitmap The bitmap for favicon + * @param URL The URL for the corresponding favicon + */ + Tizen::Base::String SaveFavicon(Tizen::Graphics::Bitmap& bitmap, Tizen::Base::String& URL); + + +private: + /** + * @brief The Default Constructor + */ + FaviconManager(void); + + /** + * @brief The Default Destructor + */ + ~FaviconManager(void); + + /** + * copy constructor + */ + FaviconManager(const FaviconManager& settingModelObj); + + /** + * assignment operator + */ + + FaviconManager& operator=(const FaviconManager& settingModelObj); + + /** + *@brief Initialize storage service + */ + result Construct(void); + + /** + * @brief The method used to create the instance of the SettingsManager class + */ + static void CreateInstance(void); + + /** + * @brief The method used to remove the already created instance of the SettingsManager + */ + static void DestroyInstance(void); + + /** + * This function generates the filename + * + * @return Filename + * @param none + */ + Tizen::Base::String GenerateFileName(void); + + /** + * This function generates the filename + * + * @return void + * @param bitmap The bitmap + * filePath The path where bitmap is supposed to be saved + */ + void SaveBitmapToFile(Tizen::Graphics::Bitmap& bitmap, Tizen::Base::String& filePath); + + +private: + static Tizen::Graphics::Bitmap* __pDefaultBitmap; + static FaviconManager* __pFaviconManagerInstance; + }; + +#endif // _FAVICON_MANAGER_H diff --git a/inc/IntFontManager.h b/inc/IntFontManager.h new file mode 100644 index 0000000..238c098 --- /dev/null +++ b/inc/IntFontManager.h @@ -0,0 +1,115 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: FontManager.h + *@brief: This header file contains the declarations of the %FontManager class. + */ + +#ifndef _INT_FONT_MANAGER_H_ +#define _INT_FONT_MANAGER_H_ + +#include +#include + + +/** +* @enum FontId +* +* Defines a ID for a different font size +* +*/ +enum FontId +{ + FONT_INVALID = -1, + + FONT_GT34 = 0, + FONT_GT32, + FONT_GT30, + FONT_GT26, + FONT_GT20, + FONT_GT14, + + FONT_GP40, + FONT_GP38, + FONT_GP36, + FONT_GP34, + FONT_GP30, + FONT_GP26, + FONT_GP24, + FONT_GP18, + + FONT_GS30, + FONT_GS34, + + MAX_FONT +}; + +/** +* @struct FontTable +* +* Defines a table for text fontName, fontStyle and fontSize +* +*/ +struct FontTable +{ + Tizen::Graphics::Font* pInstance; + Tizen::Base::String fontName; + int fontStyle; + int fontSize; +}; + +/** + * @class FontManager + * @brief This class declares functions which can change text font properties + */ +class FontManager +{ +public: + /** + * Gets the font using fontValue + * + * @return * This header file contains the declarations of the %FontManager class. + * + * pointer to a font value + * @param[in] fontValue The ID of the font + * @remarks To work properly, the existing fontValue has to be passed. + */ + static Tizen::Graphics::Font* GetFont(FontId fontValue); + + /** + * Release all the created fonts + * + * @return no return value + * @param[in] no input parameters + */ + static void ReleaseFonts(void); + +private: + /** + * Creates a font using fontValue + * + * @return no return value + * @param[in] fontValue The ID of the font + * @remarks To work properly, the existing fontValue has to be passed. + */ + static void CreateFont(FontId fontValue); + +}; + + +#endif //_INT_FONT_MANAGER_H_ diff --git a/inc/IntFormFactory.h b/inc/IntFormFactory.h new file mode 100644 index 0000000..389575d --- /dev/null +++ b/inc/IntFormFactory.h @@ -0,0 +1,85 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntFormFactory.h + *@brief: FormFactory class helps in creating appropriate forms with a specified form ID. + * It Should be derived from Tizen::Ui::Scenes::IFormFactory class + */ + + +#ifndef _INT_SCENE_FACTORY_H_ +#define _INT_SCENE_FACTORY_H_ + +#include + +/// Use 'extern' to eliminate duplicate data allocation. +extern const wchar_t* IDL_FORM_MAIN_VIEW_SCENE; +extern const wchar_t* IDL_FORM_HISTORY_LIST_SCENE; +extern const wchar_t* IDL_FORM_FIND_WORD_SCENE; +extern const wchar_t* IDL_FORM_EDIT_HISTORY_LIST_SCENE; +extern const wchar_t* IDL_FORM_SETTINGS_CLEAR_PRIVATE_DATA_SCENE; +extern const wchar_t* IDL_FORM_MULTIPLE_WINDOW_SCENE; +extern const wchar_t* IDL_FORM_MULTIPLE_WINDOW_GRID_SCENE; +extern const wchar_t* IDL_FORM_SETTINGS_SCENE; +extern const wchar_t* IDL_FORM_ADD_BOOKMARK_SCENE; +extern const wchar_t* IDL_FORM_BOOKMARK_LIST_SCENE; +extern const wchar_t* IDL_FORM_ARTICLE_READER_SCENE; +extern const wchar_t* IDL_FORM_EDIT_BOOKMARK_LIST_SCENE; +extern const wchar_t* IDL_FORM_CREATE_BOOKMARK_FOLDER_SCENE; +extern const wchar_t* IDL_FORM_FONT_SIZE_SCENE; +extern const wchar_t* IDL_FORM_EDIT_HOME_PAGE_SCENE; +extern const wchar_t* IDL_FORM_BRIGHTNESS_SCENE; + +/** + * @class FormFactory + * @brief FormFactory class helps in creating appropriate forms with a specified form ID. + * It Should be derived from Tizen::Ui::Scenes::IFormFactory class + */ +class FormFactory + : public Tizen::Ui::Scenes::IFormFactory + , public Tizen::Ui::Scenes::ISceneEventListener +{ +public: + /** + * Default constructor + */ + FormFactory(void); + /** + * Default destructor + */ + virtual ~FormFactory(void); + + /** + * Called with a form ID and scene ID when an instance of Form control is required. + * + * @return Pointer to a form + * @param[in] formId The ID of the form + * @param[in] sceneId The ID of the scene + * @remarks To work properly, the existing formId and sceneId has to be passed. + */ + virtual Tizen::Ui::Controls::Form* CreateFormN(const Tizen::Base::String& formId, const Tizen::Ui::Scenes::SceneId& sceneId); + void SetFontSize(Tizen::Ui::Container& container, int font); + + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, + const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, + const Tizen::Ui::Scenes::SceneId& nextSceneId){} +}; + +#endif // _INT_SCENE_FACTORY_H_ diff --git a/inc/IntHistoryData.h b/inc/IntHistoryData.h new file mode 100644 index 0000000..74b070e --- /dev/null +++ b/inc/IntHistoryData.h @@ -0,0 +1,250 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + + +/** + * Internet + * @file IntHistory.h + * @brief This is a model class which contains all the properties of History class + * and the methods to get and set the values for those properties + * + * This header file contains the declarations of the History class. + */ +#ifndef _INT_HISTORY_DATA_H_ +#define _INT_HISTORY_DATA_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +class History + : public Tizen::Base::Object +{ +public: + /** + * Default constructor + */ + History(void); + + /** + * Initialises the instance the class History with the specified parameter + */ + History(const History& hs); + + /** + * Default destructor + */ + ~History(void); + + /** + * "=" operator overloading + */ + History& operator =(const History& pHistory); + + /** + * This function is used to get the bookmark id + * + * @return bookmarkID + * @param No parameter + */ + Tizen::Base::String GetBookmarkId(void) const; + + /** + * This function gets the FaviconId + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetFaviconId(void) const; + + /** + * This function gets the HistoryId + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetHistoryId(void) const; + + /** + * This function gets the path of the favicon of URL + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetHistoryIconPath(void) const; + + /** + * This function gets the HistoryTitle + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetHistoryTitle(void) const; + /** + * This function gets the URL + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetHistoryUrl(void) const; + + /* + * This function is used to get thumbnail + * + * @return thumbnail + * @param No parameter + */ + Tizen::Graphics::Bitmap* GetThumbnail(void) const; + + Tizen::Base::String GetThumbnailPath(void) const; + + /** + * This function is used to get visited count + * + * @return visited count + * @param No parameter + */ + int GetVisitedCount(void) const; + + /** + * This function gets the visited time for the History + * + * @return DateTime + * @param No parameter + */ + Tizen::Base::DateTime GetVisitedTime(void) const; + + /** + * This function sets history to bookmark or removes the history from bookmarks + * + * @return No return type + * @param isBookmark true to add to bookmark, false to remove from bookmark + */ + void SetBookmarkId(const Tizen::Base::String& bookmarkId); + + /** + * This function sets the faviconid + * + * @return No return type + * @param strFaviconId The ID for the favicon object + */ + void SetFaviconId(const Tizen::Base::String& strFaviconId); + + /** + * This function sets the HistoryId for the History object + * + * @return No return type + * @param strHistoryId The ID for the History object + */ + void SetHistoryId(const Tizen::Base::String& strHistoryId); + + /** + * This function sets the HistoryTitle for the History object + * + * @return No return type + * @param strTitle The Title for the History object + */ + void SetHistoryTitle(Tizen::Base::String& strHistoryTitle); + + /** + * This function sets the URL for the History object + * + * @return No return type + * @param strTitle The URL for the History object + */ + void SetHistoryUrl(const Tizen::Base::String& strHistoryUrl); + + /** + * This function sets the path for the favicon of the History object + * + * @return No return type + * @param strFilePath The path for the favicon icon of History + */ + void SetIconPath(const Tizen::Base::String& strFilePath); + + /** + * This function sets thumbnail of a URL + * + * @return No return type + * @param thumbnail to set thumbnail of URL + */ + void SetThumbnail(Tizen::Graphics::Bitmap* thumbnail); + + /** + * This function sets thumbnail path of a URL + * + * @return No return type + * @param thumbnailPath to set thumbnail path of URL + */ + void SetThumbnailPath(Tizen::Base::String& thumbnailPath); + + /** + * This function sets the createdTime for the History object + * + * @return No return type + * @param strCreatedTime The createdTime for the bookmark + */ + void SetVisitedTime(const Tizen::Base::DateTime& strVisitedTime); + + /** + * This function sets visited count of a URL + * + * @return No return type + * @param visitedCount to set visited count of URL + */ + void SetVisitedCount(int& visitedCount); + + void SetFavIconBitmap(Tizen::Graphics::Bitmap& favIconImage); + + void SetFavIconBuffer(Tizen::Base::ByteBuffer& favIconBuffer); + + Tizen::Base::ByteBuffer* GetFavIconBuffer(); + + Tizen::Graphics::Bitmap* GetFavIconBitmap(); + + int GetFavIconWidth(); + + int GetFavIconHeight(); + + void SetFavIconWidth(int favIconWidth); + + void SetFavIconHeight(int favIconHeight); + +private: + Tizen::Base::String __bookmarkId; + Tizen::Base::String __faviconId; + Tizen::Base::String __historyId; + Tizen::Base::String __historyTitle; + Tizen::Base::String __historyUrl; + Tizen::Base::String __iconPath; + Tizen::Base::String __thumbnailPath; + Tizen::Graphics::Bitmap* __pThumbnail; + int __visitedCount; + Tizen::Base::DateTime __visitedTime; + Tizen::Base::ByteBuffer* __pFavIconData; + int __favIconWidth; + int __favIconHeight; +}; + +#endif //_INT_HISTORY_DATA_H_ diff --git a/inc/IntHistoryListForm.h b/inc/IntHistoryListForm.h new file mode 100644 index 0000000..2b41c90 --- /dev/null +++ b/inc/IntHistoryListForm.h @@ -0,0 +1,230 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet HistoryListForm class +/*@file: HistoryListForm.h + *@brief: This class defines HistoryListForm used define history + * + */ + +#ifndef _INT_HISTORY_LIST_FORM_H_ +#define _INT_HISTORY_LIST_FORM_H_ + +#include +#include +#include + +/** + * @class HistoryListForm + * @brief This class declares functions which displays history of browsed items, also one can search for items + */ +class HistoryListForm + : public Tizen::Ui::Controls::Form + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::IFocusEventListener + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::Controls::IGroupedListViewItemProvider + , public Tizen::Ui::Controls::IGroupedListViewItemEventListener + , public Tizen::Ui::IKeypadEventListener + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::Controls::ISearchBarEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + , public Tizen::System::ISettingEventListener +{ +public: + /** + * @brief The Default Constructor + */ + HistoryListForm(void); + /** + * @brief The Default Destructor + */ + virtual ~HistoryListForm(void); + + /** + * @brief Initializes this HistoryListForm. + */ + bool Initialize(void); + + /** + * @brief creates group items and store them in arraylist for later use. + */ + void CreateGroupItems(void); + + /** + * @brief converts the integer value of month to string value for that corresponding month. + */ + Tizen::Base::String GetMonth(int month); + + // IActionEventListener + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + //IFocusEventListener + virtual void OnFocusGained(const Tizen::Ui::Control& source) ; + virtual void OnFocusLost(const Tizen::Ui::Control& source) ; + + // IFormBackEventListener + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + //IGroupedListViewItemEventListener + void OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus status); + void OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus status); + void OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction); + + /** + * brief Initializes the controls of the UI for HistoryListForm. + */ + virtual result OnInitializing(void); + + virtual result OnTerminating(void); + + //IOrientationEventListener + virtual void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus); + + //IGroupedListViewItemProvider + Tizen::Ui::Controls::GroupItem* CreateGroupItem(int groupIndex, int itemWidth); + Tizen::Ui::Controls::ListItemBase* CreateItem(int groupIndex, int itemIndex, int itemWidth); + bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth); + bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth); + int GetGroupCount(void); + int GetItemCount(int groupIndex); + + //IKeypadEventListener + virtual void OnKeypadWillOpen(Tizen::Ui::Control& source); + virtual void OnKeypadOpened(Tizen::Ui::Control& source); + virtual void OnKeypadClosed(Tizen::Ui::Control& source); + virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction); + virtual void OnKeypadBoundsChanged(Tizen::Ui::Control& source); + + //ISceneEventListener + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + //ISearchBarEventListener + virtual void OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode); + + void OnSettingChanged(Tizen::Base::String& key); + +protected: + static const int IDA_TABBAR_ITEM_1; + static const int IDA_TABBAR_ITEM_2; + static const int IDA_EDIT_HISTORY_LIST_FORM; + static const int IDA_FORMAT_ICON; + static const int IDA_FORMAT_TITLE; + static const int IDA_FORMAT_URL; + static const int IDA_FORMAT_BOOKMARK; + +private: + bool __isNoHistoryPresent; + Tizen::Base::Collection::ArrayList* __pBookmarkList; + Tizen::Base::Collection::ArrayList* __pGroupData; + Tizen::Ui::Controls::GroupedListView* __pGroupedListView; // The GroupedListView which contains the history lists + Tizen::Ui::Controls::SearchBar* __pSearchBar; + Tizen::Base::Collection::ArrayList* __pSearchedData; + Tizen::Ui::Controls::GroupedListView* __pSearchListView; // The GroupedListView which contains the Search history lists + bool __searchHistory; + Tizen::Base::String __searchText; + Tizen::Ui::Scenes::SceneId __previousSceneId; + int __fontSize; +}; + +/** + * @class GroupItemClass + * @brief This class helps in storing group item data + */ +class GroupItemClass + :public Tizen::Base::Object +{ + + +public: + GroupItemClass(void); + ~GroupItemClass(void); + GroupItemClass(const GroupItemClass& groupItem); + GroupItemClass& operator =(const GroupItemClass& groupItem); + /** + * This function gets the GetEndTime of History + * + * @return A DateTime + * @param No parameter + */ + Tizen::Base::DateTime GetEndTime(void); + + /** + * This function gets the GetHistoryData of History + * + * @return A Pointer to ArrayList + * @param No parameter + */ + Tizen::Base::Collection::ArrayList* GetHistoryData(void); + + /** + * This function gets the GetStartTime of History + * + * @return A DateTime + * @param No parameter + */ + Tizen::Base::DateTime GetStartTime(void); + + /** + * This function gets the GetTitleText of History + * + * @return A String + * @param No parameter + */ + Tizen::Base::String GetTitleText(void); + + /** + * This function sets the StartTime for the History object + * + * @return No return type + * @param startTime The StartTime for the History + */ + void SetStartTime(Tizen::Base::DateTime& startTime); + + /** + * This function sets the endTime for the History object + * + * @return No return type + * @param endTime The endTime for the History + */ + void SetEndTime(Tizen::Base::DateTime& endTime); + + /** + * This function sets the titleText for the History object + * + * @return No return type + * @param titleText The titleText for the History + */ + void SetTitleText(Tizen::Base::String& titleText); + + /** + * This function sets the data for the History object + * + * @return No return type + * @param pData The data for the History + */ + void SetHistoryData(Tizen::Base::Collection::ArrayList* pData); + +private: + Tizen::Base::DateTime __startTime; + Tizen::Base::DateTime __endTime; + Tizen::Base::String __titleText; + Tizen::Base::Collection::ArrayList* __pData; + +}; +#endif /* _INT_HISTORY_LIST_FORM_H_ */ diff --git a/inc/IntHistoryPresentationModel.h b/inc/IntHistoryPresentationModel.h new file mode 100644 index 0000000..f11d353 --- /dev/null +++ b/inc/IntHistoryPresentationModel.h @@ -0,0 +1,266 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + + +//!Internet +/*@file: IntHistoryPresentationModel.h + *@brief: This is the header file for HistoryPresentationModel class + */ + + +#ifndef _INT_HISTORY_PRESENTATION_MODEL_H +#define _INT_HISTORY_PRESENTATION_MODEL_H + +#include +#include +#include + + +#include "IntHistoryData.h" +#include "IntPresentationModelBase.h" +#include "IntTypes.h" + +enum { + HISTORY_ID = 0, + HISTORY_URL, + HISTORY_TITLE, + HISTORY_COUNTER, + HISTORY_VISITED_TIME, + HISTORY_FAVICON, + HISTORY_FAVICON_LENGTH, + HISTORY_FAVICON_W, + HISTORY_FAVICON_H, + HISTORY_SNAPSHOT, + HISTORY_SNAPSHOT_STRIDE, + HISTORY_SNAPSHOT_W, + HISTORY_SNAPSHOT_H, +// HISTORY_BOOKMARK_ID, + HISTORY_VISITED_COUNT + /*HISTORY_ICON_PATH, + HISTORY_FAVICONID, + HISTORY_THUMBNAIL, + HISTORY_BOOKMARK_ID, + HISTORY_VISITED_COUNT*/ +}; +//ID INTEGER PRIMARY KEY AUTOINCREMENT, ADDRESS TEXT, TITLE TEXT, COUNTER INTEGER, VISITDATE DATETIME, FAVICON BLOB, +//FAVICON_LENGTH INTEGER, FAVICON_W INTEGER, FAVICON_H INTEGER, SNAPSHOT BLOB, SNAPSHOT_STRIDE INTEGER, SNAPSHOT_W INTEGER, SNAPSHOT_H INTEGER +/** + * @class HistoryPresentationModel + * @brief This class declares functions which will manage Browser History + */ +class HistoryPresentationModel + :public PresentationModelBase +{ +public: + /** + * @brief The method used to get the already created instance of the HistoryPresentationModel + */ + static HistoryPresentationModel* GetInstance(void); + + /** + * This function deletes all the histories. + * + * @return An error code + * @param No parameter + */ + result ClearHistory(void); + + /** + * This function creates the list of History + * + * @return An error code + * @param nHistoryCount The no of History present + * @param historyList An ArrayList where the History will be stored + * @param maxCount is used for maximum most visited site else its value is default to -1 + * @exception E_SUCCESS The method is successful + * @exception E_FAILURE The method is not successful as the list is not being created + * @remarks To work properly , the history count and and existing list should be passed + */ + result CreateHistoryList(int nHistoryCount, Tizen::Base::Collection::ArrayList& historyList, int maxCount = -1); + + /** + * This function deletes particular history of history ID from the history table + * + * @return An error code + * @param historyId The historyId + * @exception E_SUCCESS The history is successfully deleted + * @exception E_FAILURE The history deletion is unsuccessful + */ + result DeleteHistory(int historyId); + + /** + * This function deletes particular history of history URL. + * + * @return An error code + * @param No parameter + */ + result DeleteHistory(Tizen::Base::String& historyUrl); + + /** + * This function deletes Multiple histories from the history table + * + * @return An error code + * @param pHistoryIdList The Arraylist of ids of history to be deleted + * @exception E_SUCCESS The history is successfully deleted + * @exception E_FAILURE The history deletion is unsuccessful + */ + result DeleteMultipleHistory(Tizen::Base::Collection::ArrayList* pHistoryIdList); + + /** + * This function adds the history to the history table + * + * @return An error code + * @param history The history + * @exception E_SUCCESS The history is inserted successfully to the table + * @exception E_FAILURE The history is not inserted successfully + */ + result SaveHistory(History& history); + + result SaveTempHistory(History& history); + + /** + * This function selects the history from the table + * + * @return An error code + * @param startIndex the OFFSET value + * @param limit The LIMIT till which the select statement will be executed + * @param historyList The arraylist where the selected history will be saved + */ + result GetHistory( int startIndex, int limit, Tizen::Base::Collection::ArrayList& historyList); + + /** + * This function returns the no of history + * + * @return An error code + * @param count The no of History present will be saved in count. + */ + result GetHistoryCount(int& count); + + /** + * This function returns the history count from the table on the basis of the time range + * + * @return An error code + * @param startTime the startTime + * @param endTime the end time + */ + result GetHistoryCountWithTimeRange(Tizen::Base::DateTime& startTime, Tizen::Base::DateTime& endTime, int& count); + + /** + * This function selects the history from the table within given time range + * + * @return An error code + * @param startTime start value of time + * @param endTime end value of time + * @param startIndex the OFFSET value + * @param limit The LIMIT till which the select statement will be executed + * @param historyList The arraylist where the selected history will be saved + */ + result GetHistoryWithTimeRange(Tizen::Base::DateTime& startTime, Tizen::Base::DateTime& endTime,int startIndex,int limit, Tizen::Base::Collection::ArrayList& pHistoryList); + + /** + * This function used to get most visited site in a arraylist + * + * @return An error code + * @param historyList The arraylist where the most visited sites will be saved. + */ + result GetMostVisitedSites(Tizen::Base::Collection::ArrayList& historyList); + + /** + * This function returns the no of searched text history + * + * @return An error code + * @param count The no of History present will be saved in count. + * @param text text entered for search + */ + result GetSearchHistoryCount(int& count, Tizen::Base::String& text); + + /** + * This function selects the searched history from the table + * + * @return An error code + * @param startIndex the OFFSET value + * @param limit The LIMIT till which the select statement will be executed + * @param text text entered for search + * @param historyList The arraylist where the selected history will be saved + */ + result GetSearchHistory(int startIndex,int limit, Tizen::Base::Collection::ArrayList& historyList, Tizen::Base::String& text); + + /** + * This function used to given URL count + * + * @return An error code + * @param url URL to get its count + * @param count count of a URL + */ + result GetUrlCount(const Tizen::Base::String& url, int& count); + + void UpdateHistoryFavIcon(History& history, Tizen::Graphics::Bitmap& favIconImage); + +private: + + /** + * @brief The Default Constructor + */ + HistoryPresentationModel(void); + + /** + * @brief The Default Destructor + */ + ~HistoryPresentationModel(void); + + /** + * copy constructor + */ + HistoryPresentationModel(const HistoryPresentationModel& settingModelObj); + + /** + * assignment operator + */ + + HistoryPresentationModel& operator=(const HistoryPresentationModel& settingModelObj); + + /** + *@brief Initialize storage service + */ + result Construct(void); + + /** + * @brief The method used to create the instance of the SettingsManager class + */ + static void CreateInstance(void); + + /** + * @brief The method used to remove the already created instance of the SettingsManager + */ + static void DestroyInstance(void); + + /** + * This function is used to generate file name + * + * @return filename name of a file + * @param No parameter + */ + Tizen::Base::String GenerateFileName(void); + + Tizen::Base::String GetStringFromDate(Tizen::Base::DateTime& date); + + static HistoryPresentationModel* __pHistoryPresentationModel; + + Tizen::Base::Collection::ArrayList *__pDataList; +}; + +#endif //_INT_HISTORY_PRESENTATION_MODEL_H diff --git a/inc/IntIAddressbarEventListener.h b/inc/IntIAddressbarEventListener.h new file mode 100644 index 0000000..619317c --- /dev/null +++ b/inc/IntIAddressbarEventListener.h @@ -0,0 +1,61 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet IntIAddressbarEventListener class +/*@file: IntIAddressbarEventListener.h + *@brief: The %IntIAddressbarEventListener interface is the listener interface for receiving the Addressbar events such as + * the event for clicking refresh,stop loading etc. + * + */ + +#ifndef _INT_IADDRESSBAR_EVENT_LISTENER_H_ +#define _INT_IADDRESSBAR_EVENT_LISTENER_H_ + +class Addressbar; + +/** + * @interface IAddressbarEventListener + * @brief This interface implements the listener for Addressbar Events. + * + * The %IAddressbarEventListener interface is the listener interface for receiving the Addressbar events such as + * the event for clicking refresh,stoThis class defines HistoryListScene used define historyp loading etc. + * + */ +class IAddressbarEventListener +{ +public: + virtual ~IAddressbarEventListener(void) {}; + virtual void OnAddressBarFocusGained(const Addressbar&) = 0; + virtual void OnAddressBarFocusLost(const Addressbar&, bool addressbarKeyPadState) = 0; + virtual void OnAddressBarKeypadClosed(const Addressbar&, bool footerState = true ) = 0; + virtual void OnAddressBarKeypadOpened(const Addressbar&) = 0; + virtual void OnAddressBarKeypadWillOpen(const Addressbar&) = 0; + virtual void OnAddressBarKeypadBoundsChanged(const Addressbar&) = 0; + //virtual void OnAddressBarModeChanged(const Addressbar&) = 0; + virtual void OnAddressCancelledClicked(const Addressbar&) = 0; + virtual void OnClipboardClosed(const Addressbar&) = 0; + //virtual void OnBackClicked(const Addressbar&) = 0; + //virtual void OnForwardClicked(const Addressbar&) = 0; +// virtual void OnReaderClicked(const Addressbar&) = 0; + virtual void OnRefreshClicked(const Addressbar&) = 0; + virtual void OnStopClicked(Addressbar&) = 0; + virtual void OnUrlValueChanged(Addressbar&) = 0; + virtual void OnUrlSubmitted(Addressbar&) = 0; +}; + + +#endif /* _INT_IADDRESSBAR_EVENT_LISTENER_H_ */ diff --git a/inc/IntISettingChangeListener.h b/inc/IntISettingChangeListener.h new file mode 100644 index 0000000..304c8a9 --- /dev/null +++ b/inc/IntISettingChangeListener.h @@ -0,0 +1,48 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet ISettingsChangeEventListener class +/*@file: IntISettingsChangeEventListener.h + *@brief: The %IntISettingsChangeEventListener + * + */ + +#ifndef _INT_SETTINGS_CHANGE_LISTENER_H_ +#define _INT_SETTINGS_CHANGE_LISTENER_H_ + +/** + * @interface IntISettingsChangeListener + * @brief This interface implements the listener for Addressbar Events. + * + * The %IntIAddressbarEventListener interface is the listener interface for receiving the Addressbar events such as + * the event for clicking refresh,stoThis class defines HistoryListScene used define historyp loading etc. + * + */ +class ISettingChangeEventListener + : public Tizen::Base::Object +{ +public: + virtual ~ISettingChangeEventListener(void) {}; + virtual void OnClearCache(void) = 0; + virtual void OnClearCookie(void) = 0; + virtual void OnClearFormData(void) = 0; + virtual void OnClearPasswords(void) = 0; + virtual void OnSettingsChange(int settingvalue) = 0; + virtual void OnSettingsReset(void) = 0; +}; + +#endif /* _INT_SETTINGS_CHANGE_LISTENER_H_ */ diff --git a/inc/IntInternetApp.h b/inc/IntInternetApp.h new file mode 100644 index 0000000..4d27e7f --- /dev/null +++ b/inc/IntInternetApp.h @@ -0,0 +1,97 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: Internet.h + *@brief: provides basic features necessary to define an UiApp. + */ + +#ifndef _INT_INTERNET_APP_H_ +#define _INT_INTERNET_APP_H_ + +#include +#include +#include +#include + +#include "IntMainFrame.h" +#include "IntMultipleWindowPresentationModel.h" + +class InternetApp + : public Tizen::App::UiApp + , public Tizen::App::IAppControlProviderEventListener + , public Tizen::System::IScreenEventListener + , public Tizen::System::ISettingEventListener +{ +public: + /** + * UiApp must have a factory method that creates an instance of itself. + */ + static Tizen::App::UiApp* CreateInstance(void); + void ShowPopup(Tizen::Base::String& pTitle, Tizen::Base::String& pText); + +public: + /** + *@brief Default constructor + */ + InternetApp(void); + /** + *@brief Default destructor + */ + virtual ~InternetApp(void); + +public: + bool OnAppInitializing(Tizen::App::AppRegistry& appRegistry); + + bool OnAppInitialized(void); + + bool OnAppWillTerminate(void); + + bool OnAppTerminating(Tizen::App::AppRegistry& appRegistry, bool forcedTermination = false); + + void OnBackground(void); + + void OnBatteryLevelChanged(Tizen::System::BatteryLevel batteryLevel); + + void OnForeground(void); + + void OnLowMemory(void); + + void OnScreenOff(void); + + void OnScreenOn(void); + + //ISettingEventListener + void OnSettingChanged(Tizen::Base::String& key); + + //IAppControlProviderEventListener + void OnAppControlRequestReceived(RequestId reqId, const Tizen::Base::String &operationId, const Tizen::Base::String *pDataType, const Tizen::Base::String *pUriScheme, const Tizen::Base::Collection::IMap *pArgs); + + long long GetAvailableMemory(void); + + virtual void OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs); +private: + MultipleWindowPresentationModel* __pMultiWindowManager; + WindowInfo* __pNewWindowInfo;//the new window object to be created either by the normal launch of application or as an appcontrol launch + MainFrame* pSceneManagementFrame; + Tizen::Base::String __operationId; + const Tizen::Base::String* __value; + bool __isShowMsg; + Tizen::App::AppControl* __pAc; +}; + +#endif // _INT_INTERNET_APP_H_ diff --git a/inc/IntMainForm.h b/inc/IntMainForm.h new file mode 100644 index 0000000..dcf7ff0 --- /dev/null +++ b/inc/IntMainForm.h @@ -0,0 +1,410 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet MainForm class +/*@file: MainForm.h + *@brief: The %MainForm provides the common functionalities for the Main View of the Browser including the addressbar, + * loading,handling events etc. + */ + +#ifndef _INT_MAIN_FORM_H_ +#define _INT_MAIN_FORM_H_ + +#include +#include +#include + +#include "IntAddressbar.h" +#include "IntHistoryData.h" +#include "IntHistoryPresentationModel.h" +#include "IntIAddressbarEventListener.h" +#include "IntISettingChangeListener.h" +#include "IntMultipleWindowPresentationModel.h" +#include "IntNotificationPanel.h" +#include "IntSharePopup.h" + + +enum AddressBarMode +{ + ADDRESSBAR_MODE_INVALID = -1, + ADDRESSBAR_MODE_READER = 0, + ADDRESSBAR_MODE_LOADING, + ADDRESSBAR_MODE_LOADING_COMPLETE, + ADDRESSBAR_MODE_EDIT, +}; + +class MainForm + : public Tizen::Ui::Controls::Form + , public Tizen::Ui::IFocusEventListener + , public Tizen::Ui::Controls::IFormMenuEventListener + , public Tizen::Ui::Controls::IListViewItemEventListener + , public Tizen::Ui::Controls::IListViewItemProvider + , public Tizen::Ui::IActionEventListener + , public IAddressbarEventListener + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::IKeypadEventListener + , public Tizen::Web::Controls::ILoadingListener + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::ITextEventListener + , public Tizen::Ui::IPropagatedTouchEventListener + , public Tizen::Ui::ITouchEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + , public ISettingChangeEventListener + , public Tizen::Web::Controls::IWebKeypadEventListener + , public Tizen::Web::Controls::IWebUiEventListenerF + , public Tizen::Web::Controls::ITextSearchListener + +{ +public: + /** + *@brief Default constructor + */ + MainForm(void); + + /** + *@brief Default destructor + */ + virtual ~MainForm(void); + + /** + * @brief The method initializes the screen variables and controls to be used by the user. + * + */ + bool Initialize(void); + + /** + * @brief Initializes this instance of %MainForm. + * + */ + result InitWebControl(); + + /** + * @brief Initializes this instance of Reader Panel. + */ + result CreateReaderPanel(void); + + Tizen::Base::String GetImagePath(void); + + void LoadUrl(Tizen::Base::String& url); + + //IFocusEventListener + void OnFocusGained(const Tizen::Ui::Control& source); + void OnFocusLost(const Tizen::Ui::Control& source); + + //IFormMenuEventListener + virtual void OnFormMenuRequested (Tizen::Ui::Controls::Form &source); + + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + //IAddressbarEventListener + void OnAddressBarFocusGained(const Addressbar& addBar); + + void OnAddressBarFocusLost(const Addressbar& addBar, bool addressbarKeyPadState); + + void OnAddressCancelledClicked(const Addressbar&); + + void OnAddressBarKeypadClosed(const Addressbar&, bool footerState = true); + + void OnAddressBarKeypadOpened(const Addressbar&); + + void OnAddressBarKeypadWillOpen(const Addressbar&); + + void OnAddressBarKeypadBoundsChanged(const Addressbar& addBar); + + void OnAddressBarModeChanged(/*const Addressbar&*/); + + virtual void OnClipboardClosed(const Addressbar&); + + void OnBackClicked(/*const Addressbar&*/); + + void OnForwardClicked(/*const Addressbar&*/); + + void OnRefreshClicked(const Addressbar&){} + + void OnSearchClicked(const Addressbar&){} + + void OnStopClicked(Addressbar&); + + void OnUrlValueChanged(Addressbar&); + + void OnUrlSubmitted(Addressbar&); + + //ILoadingeventListener + virtual void OnEstimatedProgress(int progress); + virtual void OnFaviconReceived(const Tizen::Graphics::Bitmap& favicon); + + virtual bool OnHttpAuthenticationRequestedN(const Tizen::Base::String& host, const Tizen::Base::String& realm, const Tizen::Web::Controls::AuthenticationChallenge& authentication); + + virtual void OnHttpAuthenticationCanceled(void); + + virtual result OnInitializing(void); + + virtual void OnKeypadWillOpen(Tizen::Ui::Control& source); + + virtual void OnKeypadOpened(Tizen::Ui::Control& source); + + virtual void OnKeypadClosed(Tizen::Ui::Control& source); + + virtual void OnKeypadBoundsChanged (Tizen::Ui::Control &source); + + virtual void OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction){} + + void OnLoadingErrorOccurred(Tizen::Web::Controls::LoadingErrorType error, const Tizen::Base::String& reason); + + virtual void OnLoadingStarted(void); + + virtual void OnLoadingCanceled(void); + + virtual void OnLoadingCompleted(void); + + bool OnLoadingRequested(const Tizen::Base::String& url, Tizen::Web::Controls::WebNavigationType type); + + virtual void OnPageTitleReceived(const Tizen::Base::String& title); + + virtual Tizen::Web::Controls::DecisionPolicy OnWebDataReceived(const Tizen::Base::String& mime, const Tizen::Net::Http::HttpHeader& httpHeader); + + //IOrientationEventListener + virtual void OnOrientationChanged (const Tizen::Ui::Control &source, Tizen::Ui::OrientationStatus orientationStatus); + + //ISceenEventListener + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + virtual result OnTerminating(void); + + void SetImageLoadEnabled(void); + + void SetJavascriptEnabled(void); + + // IListViewItemEventListener + /** + *Called when the state of an element in the ListContextItem is changed. + */ + virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state); + + /** + *Called when the state of an element in the ListViewItem in the ListView or GroupedListView is changed. + */ + virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status); + + /** + *Called when the ListItem is swept. + */ + virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction); + + /** + *Called when the item or the element is long pressed. + */ + virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback){AppLog("MainForm::OnListViewItemLongPressed called");}; + + + //IListViewItemProvider + virtual Tizen::Ui::Controls::ListItemBase * CreateItem (int index, int itemWidth); + virtual bool DeleteItem (int index, Tizen::Ui::Controls::ListItemBase *pItem, int itemWidth); + virtual int GetItemCount (void); + + //IWebUiEventListener + virtual void OnWebPageBlockSelected(Tizen::Web::Controls::Web& source, Tizen::Graphics::FloatPoint& startPoint, Tizen::Graphics::FloatPoint& endPoint); + virtual void OnWebPageShowRequested(Tizen::Web::Controls::Web& source); + virtual Tizen::Web::Controls::Web* OnWebWindowCreateRequested(void); + virtual void OnWebWindowCloseRequested(Tizen::Web::Controls::Web& source); + + //IWebKeypadEventListener + virtual void OnWebKeypadClosed(Tizen::Web::Controls::Web& source); + virtual void OnWebKeypadOpened(Tizen::Web::Controls::Web& source); + virtual void OnWebKeypadWillOpen(Tizen::Web::Controls::Web& source); + virtual void OnWebKeypadBoundsChanged(Tizen::Web::Controls::Web& source); + + //ITouchEventListener + virtual void OnTouchDoublePressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo); + virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo){} + virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo){} + virtual void OnTouchLongPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo); + virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo); + virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo); + virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo); + + //IPropagatedTouchEventListener + virtual bool OnTouchPressed(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo); + virtual bool OnTouchReleased(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo); + virtual bool OnTouchMoved(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo); + virtual bool OnTouchCanceled(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo); + virtual bool OnPreviewTouchPressed(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo); + virtual bool OnPreviewTouchReleased(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo); + virtual bool OnPreviewTouchMoved(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo); + + virtual void OnTextFound(int totalCount, int currentOrdinal); + + //ISettingsChangeListener + void OnClearCache(void); + void OnClearCookie(void); + void OnClearFormData(void); + void OnClearPasswords(void); + void OnSettingsChange(int settingvalue); + void OnSettingsReset(void); + + virtual void OnTextValueChangeCanceled (const Tizen::Ui::Control &source){} + virtual void OnTextValueChanged (const Tizen::Ui::Control &source); + + void UpdateImageContent(Tizen::Base::ByteBuffer* aBuffer, Tizen::Base::String imageName); + void ShowIndicatorNotification(const Tizen::Base::String& messageText, const Tizen::Base::String& contentPath); + + void SetForwardButtonEnabled(bool isEnabled); + void SetBackButtonEnabled(bool isEnabled); + + void UpdateProgress(int percentage); + int GetProgress(void); + void UpdateProgressBitmap(void); + void ReaderClicked(); + + /** + * @brief Sets the current addressbar Mode. + */ + void SetAddressbarMode(AddressBarMode addMode); + + void SetUrl(const Tizen::Base::String& url); + + void OnSharePopupControlStarted(void); + + virtual void OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs); + + void AddressBarCancelledClicked(const Addressbar& addBar); + +private: + double findDistance(int x1,int y1,int x2, int y2); + void FindNextWord(bool next = true); + result InitAddressbar(void); + result InitFooter(void); + result InitOptionMenu(void); + result InitFindWordPanel(void); + result InitImageContextMenu(Tizen::Graphics::Point p); + result InitImageLinkContextMenu(Tizen::Graphics::Point p); + result InitSelectTextContextMenu(Tizen::Graphics::Point p, bool pasteOption, bool onlyPasteOption); + result InitSelectTextContextMenuF(Tizen::Graphics::FloatPoint p, bool pasteOption, bool onlyPasteOption); + result InitMostVisitedSitesPanel(Tizen::Ui::OrientationStatus orientationStatus); + result InitMostVisitedSitesView(Tizen::Ui::OrientationStatus orientationStatus); + void MoveUiControls(void); + void UpdateFavicon(void); + void RelayoutControls(bool showAddressbar,bool relayoutFooter = true); + void ShowFindWordPanel(bool show = true, bool isTouchPressed = false); + void ShowMostVisitedSitesPanel(void); + void StartWordSearch(); + AddressBarMode GetAddressbarMode(void); + Tizen::Base::String RemoveHttpTextFromDisplayURL(void); + +private: + + static const int IDA_FORMAT_BITMAP; + static const int IDA_FORMAT_DELETE_BITMAP; + static const int IDA_FORMAT_TITLE_STRING; + static const int IDA_FORMAT_URL_STRING; + static const int IDA_CONTEXT_ITEM_DELETE; + + Tizen::Graphics::Point __adressPanelPosition; + AddressBarMode __curAddressBarMode; + Tizen::Base::String __currentSearchStr; + Tizen::Base::String __currentSelectedStr; + int __distanceMoved; + int __webControlHeight; + float __webControlHeightF; + float __previousZoomLevel; + int __maxOccurrances; + int __currentWordIndex; + bool __isLoaded; + //bool __inputEventToBeSupressed; + + bool __isLoadingData; + bool __isLoadingCompleted; + bool __isLongPressedDone; + bool __isKeypadOpened; + int __progressPercentage; + + AddressBarMode __currentAddMode; + Tizen::Base::String __displayUrl; + Tizen::Base::String __editTextUrl; + + Addressbar* __pAddressbar; + History* __pHistory; + Tizen::Graphics::Point __contextMenuPosition; + Tizen::Ui::Controls::Label* __pArticleReaderLabel; + Tizen::Ui::Controls::Panel* __pArticleReaderPanel; + Tizen::Ui::Controls::Panel* __pBlankPanel; + Tizen::Ui::Controls::Label * __pFindWordBgLabel; + Tizen::Ui::Controls::Label * __pFindWordBgLabelRightToLeft; + Tizen::Ui::Controls::Button* __pFindWordClear; + Tizen::Ui::Controls::Button* __pFindWordClearRightToLeft; + Tizen::Ui::Controls::Label* __pFindWordCountLabel; + Tizen::Ui::Controls::Label* __pFindWordCountLabelRightToLeft; + Tizen::Ui::Controls::Panel* __pFindWordControl; + + Tizen::Ui::Controls::Panel* __pFindWordPanelLeftToRight; + Tizen::Ui::Controls::Panel* __pFindWordPanelRightToLeft; + + Tizen::Ui::Controls::EditField* __pFindWordEditField; + Tizen::Ui::Controls::EditField* __pFindWordEditFieldRightToLeft; + Tizen::Ui::Controls::Button* __pFindWordNext; + Tizen::Ui::Controls::Button* __pFindWordPrev; +// Tizen::Ui::Controls::Panel* __pFindWordPanel; + Tizen::Ui::Controls::Panel* __pFooterPanel; + Tizen::Web::Controls::HitElementResult* __pHitElementResult; + Tizen::Ui::Controls::ContextMenu* __pImageMenu; +// Tizen::Ui::Controls::ContextMenu* __pMenu; + + Tizen::Ui::Controls::OptionMenu* __pOptionMenu; + Tizen::Ui::Controls::Button* __pMoreButton; + Tizen::Ui::Controls::Button* __pMultiWindowButton; +// Tizen::Ui::Controls::Button* __pNewWindowButton; + SharePopup* __pPopUp; + Tizen::Ui::Controls::Label* __pCheckLabel; + AddressBarMode __prevAddressBarMode; + Tizen::Ui::Controls::Button* __pReaderCloseBtn; + Tizen::Base::String* __pReaderData; + Tizen::Media::Image* __pSaveImage; + Tizen::Web::Controls::Web* __pWebReader; + Tizen::Web::Controls::Web* __pWebViewer; + + Tizen::Ui::Controls::ListView* __pMostVisitedListView; + + Tizen::Graphics::Point __touchPoint1; + Tizen::Graphics::Point __touchPoint2; + Tizen::Graphics::Point __webControlPosition; + Tizen::Graphics::FloatPoint __webControlPositionF; + + Tizen::Ui::Controls::ListContextItem* __pItemContext; + Tizen::Ui::Controls::ListContextItem* __pItemContextLandscape; + Tizen::Base::Collection::ArrayList* __pMostVisitedSites; + Tizen::Ui::Controls::EditField* __pFooterUrlField; + Tizen::Ui::Controls::Button* __pGoBackBtn; + Tizen::Ui::Controls::Button* __pGoForwardBtn; + Tizen::Ui::Controls::Button* __pRefreshBtn; + Tizen::Ui::Controls::Label* __pProgressbarLabel; + Tizen::Ui::Controls::Label* __pFooterLabel; + Tizen::Ui::Controls::Button* __pStopBtn; + Tizen::Ui::Controls::Button* __pClearBtn; + Tizen::Ui::Controls::Button* __pReaderBtn; + Tizen::Graphics::Point __longPressPoint; + NotificationPanel* __pNotification; + int __fontSize; + WindowInfo* __pWindowInfo; +// bool __isHwKeySupported; +}; + +#endif //_INT_MAIN_FORM_H_ + diff --git a/inc/IntMainFrame.h b/inc/IntMainFrame.h new file mode 100644 index 0000000..888cddf --- /dev/null +++ b/inc/IntMainFrame.h @@ -0,0 +1,52 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet InternetFrame class +/*@file: InternetFrame.h + *@brief: Internet Frame + */ + +#ifndef _INT_INTERNET_FRAME_H_ +#define _INT_INTERNET_FRAME_H_ + +#include +#include + +class MainFrame + : public Tizen::Ui::Controls::Frame + , public Tizen::Ui::Controls::IFrameEventListener +{ +public: + /** + *@brief Default constructor + */ + MainFrame(void); + /** + *@brief Default destructor + */ + virtual ~MainFrame(void); + virtual result OnInitializing(void); + virtual result OnTerminating(void); + + virtual void OnFrameActivated (const Tizen::Ui::Controls::Frame &source); + virtual void OnFrameDeactivated (const Tizen::Ui::Controls::Frame &source){} + virtual void OnFrameMinimized (const Tizen::Ui::Controls::Frame &source){} + virtual void OnFrameRestored (const Tizen::Ui::Controls::Frame &source){} + virtual void OnFrameTerminating (const Tizen::Ui::Controls::Frame &source){} +}; + +#endif //_INT_INTERNET_FRAME_H_ diff --git a/inc/IntMultipleWindowForm.h b/inc/IntMultipleWindowForm.h new file mode 100644 index 0000000..e426365 --- /dev/null +++ b/inc/IntMultipleWindowForm.h @@ -0,0 +1,163 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntMultipleWindowForm.h + *@brief: The IntMultipleWindowForm provides multiple instance of mainscenes and displays them in a Listview + * + */ + +#ifndef _INT_MULTIPLE_WINDOW_FORM_H_ +#define _INT_MULTIPLE_WINDOW_FORM_H_ + +#include +#include +#include +#include +#include + +class MultipleWindowForm + : public Tizen::Ui::Controls::Form + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::Controls::IListViewItemEventListener + , public Tizen::Ui::Controls::IListViewItemProvider + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + +{ +public: + /** + *@brief Default constructor + */ + MultipleWindowForm(void); + + /** + *@brief Default destructor + */ + virtual ~MultipleWindowForm(void); + + /** + *@brief Constructing and Initializing MultipleWindowForm + */ + bool Initialize(void); + +public: + /** + *Used to create instances and set styles for the form content. + */ + virtual result OnInitializing(void); + + /** + *Called on terminate of a form + */ + virtual result OnTerminating(void); + + // ISceneEventListener + + /** + *Called after setting as current scene. + */ + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + + /** + *Called when the current scene is deactivated. + */ + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + // IFormBackEventListener + /** + *Called when the current Form control needs to be closed to revert back to the previous Form control. + */ + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + // IActionEventListener + /** + *Called when an action event occurs. + */ + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + // IListViewItemEventListener + /** + *Called when the state of an element in the ListContextItem is changed. + */ + virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state); + + /** + *Called when the state of an element in the ListViewItem in the ListView or GroupedListView is changed. + */ + virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status); + + /** + *Called when the ListItem is swept. + */ + virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction); + + /** + *Called when the item or the element is long pressed. + */ + virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback); + + //IListViewItemProvider + /** + *Called when items need to be loaded. + */ + virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth); + + /** + *Called when items need to be loaded. + */ + virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth); + + /** + *Called when the IconListView is about to be drawn and requests the listener to set the number of total items. + */ + virtual int GetItemCount(void); + + //IOrientationEventListener + /** + *Called when an orientation event occurs. + */ + void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus); + + virtual void OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs); + +private: + static const int IDA_FORMAT_BITMAP = 500; + static const int IDA_FORMAT_DELETE_BITMAP = 501; + static const int IDA_FORMAT_TITLE_STRING = 502; + static const int IDA_FORMAT_URL_STRING = 503; + static const int IDA_BUTTON_NEW = 504; + static const int IDA_BUTTON_BACK = 505; + static const int IDA_BUTTON_CLOSEALL = 506; + static const int IDA_FORMAT_CUSTOM = 507; + + static const int IDA_CONFIRMATION_NO = 1000; + static const int IDA_CONFIRMATION_YES = 1001; + + // __pList Pointer to ListView + Tizen::Ui::Controls::ListView* __pList; + // __pListIconImage Pointer to Bitmap contains list icon image + Tizen::Graphics::Bitmap* __pListIconImage; + // __pListDeleteImage Pointer to Bitmap contains list delete image + Tizen::Graphics::Bitmap* __pListDeleteImage; + ConfirmationPopup* __pConfirmationPopup; + Tizen::Graphics::Point __startPosition; + int __fontSize; +}; + +#endif /* _INT_MULTIPLE_WINDOW_FORM_H_ */ diff --git a/inc/IntMultipleWindowPresentationModel.h b/inc/IntMultipleWindowPresentationModel.h new file mode 100644 index 0000000..8270041 --- /dev/null +++ b/inc/IntMultipleWindowPresentationModel.h @@ -0,0 +1,238 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntMultipleWindowPresentationModel.h + *@brief: MultipleWindowPresentationModel is used to maintain browser window information + * + */ +#ifndef _INT_MULTIPLE_WINDOW_PRESENTATION_MODEL_H_ +#define _INT_MULTIPLE_WINDOW_PRESENTATION_MODEL_H_ + +#include +#include +#include +#include + +#include "IntFaviconManager.h" +#include "IntFormFactory.h" +#include "IntSceneRegister.h" + +enum Key +{ + SELECTED_SCENE_ID +}; +class MainForm; + +class WindowInfo +: public Tizen::Base::Object + { + public: + /** + * WindowInfo default constructor + */ + WindowInfo(); + + /** + * WindowInfo default destructor + */ + ~WindowInfo(); + + public: + Tizen::Base::String faviconUrl; + Tizen::Base::String faviconFilePath; + Tizen::Base::String formID; + int ID; + bool isAppcontrolTriggered; + bool isJavascriptInitiated; + bool isFirstLaunch; + Tizen::Base::String pageTitle; + Tizen::Base::String pageUrl; + Tizen::Web::Controls::Web* pCurrentWeb; + Tizen::Graphics::Bitmap* pFavicon; + static Tizen::Graphics::Bitmap* pFormCanvasBitmap; + Tizen::Graphics::Bitmap* pWebCanvasBitmap; + Tizen::Base::String sceneID; + private: + static int __windowId; + }; + +class MultipleWindowPresentationModel +{ +public: + + /** + * This method add the windowInfo object in ArrayList + * + * @return An error code + * @param[in] WindowInfo The windowInfo object to be added. + * @exception E_SUCCESS The method is successful. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @remarks This method performs a shallow copy. It adds just the pointer; not the element itself. + */ + result AddWindoInfo(WindowInfo* pWindowInfo); + + /** + *@name CreateNewMainViewScene + *@brief Create new instance of MainScene form + *@param[in] no input parameter + *@retval no return value + */ + WindowInfo* CreateNewMainViewSceneN(const Tizen::Base::String& Url = L"", bool isAppControlTriggered = false); + + /** + * To get active Window URL and title + * + * @return An error code + * @param title + * @param url + * @exception E_SUCCESS The method is successful. + */ + WindowInfo* GetActiveWindowInfo(void); + + /** + * This method returns the ArrayList object + * + * @return ArrayList* + * @param[in] void + * @remarks Return the ArrayList object + */ + Tizen::Base::Collection::ArrayList* GetAllWindowArrayList(void); + + /** + * To get current sceneID of Main Form + * + * @return An error code + * @param currentSceneID The Current Scene ID + * @exception E_SUCCESS The method is successful. + */ + void GetCurrentSceneId(Tizen::Base::String& currentSceneId); + + /** + * @brief The method used to get the already created instance of the MultipleWindowPresentationModel + */ + static MultipleWindowPresentationModel* GetInstance(void); + + /** + * Object is returned corresponding to its key value + * + * @return An error code + * @param[in] key The key of the object needed + * @param[in] Object A pointer to a pointer to an objec_t + * @exception E_SUCCESS The method is successful. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @remarks To work properly, existing key has to be passed + */ + result GetValue(Key key, Tizen::Base::Object**); + + /** + * To set current sceneID of Main Form + * + * @return An error code + * @param currentSceneID The Current Scene ID + * @exception E_SUCCESS The method is successful. + */ + void SetCurrentSceneID(const Tizen::Base::String& currentSceneID); + + /** + * Object is set corresponding to its key value + * + * @return An error code + * @param[in] key The key of the object to be set + * @param[in] Object A pointer to an object + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_ARG A specified input parameter is invalid, or + * the comparer has failed to compare the keys. + * @exception E_OBJ_NOT_FOUND The specified @c key is not found in the map. + * @remarks To work properly, existing key and object has to be passed + */ + result SetValue(Key key, Tizen::Base::Object*); + + /** + * Uninitialize MultiWindowManager + * + * @return no return value + * @param[in] no input parameters + */ + void UnInitialize(void); + + /** + * Uninitialize MultiWindowManager + * + * @return no return value + * @param[in] pTitle The Title of the popup to be created + * @param[in] pText The Text of the popup to be created + */ + void ShowPopup(Tizen::Base::String& pTitle, Tizen::Base::String& pText); + +private: + + /** + * Default constructor, It is declared as private to make this class a singleton class + */ + MultipleWindowPresentationModel(void); + + /** + * Default destructor + */ + virtual ~MultipleWindowPresentationModel(void); + + /** + * copy constructor + */ + MultipleWindowPresentationModel(const MultipleWindowPresentationModel& multipleWindowModelObj); + + /** + * assignment operator + */ + + MultipleWindowPresentationModel& operator=(const MultipleWindowPresentationModel& multipleWindowModelObj); + + /** + * Initializing MultiWindowManager + * + * @return An error code + * @param[in] no input parameters + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_ARG A specified input parameter is invalid, or + * the @c capacity or the @c loadFactor is negative. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + */ + + result Construct(void); + + /** + * @brief The method used to create the instance of the MultipleWindowPresentationModel class + */ + static void CreateInstance(void); + + /** + * @brief The method used to remove the already created instance of the MultipleWindowPresentationModel + */ + static void DestroyInstance(void); + + +private: + static Tizen::Base::String __currentSceneId; + static Tizen::Base::Collection::HashMapT< Key, Tizen::Base::Object* > __keyAndValues; + static Tizen::Base::Collection::ArrayList* __pAllWindowList; + static WindowInfo* __pCurWindowInfo; + static MultipleWindowPresentationModel* __pMultiWindowManager; + bool __isShowInProcess; +}; + +#endif // _INT_MULTIPLE_WINDOW_PRESENTATION_MODEL_H_ diff --git a/inc/IntNotificationPanel.h b/inc/IntNotificationPanel.h new file mode 100644 index 0000000..8646089 --- /dev/null +++ b/inc/IntNotificationPanel.h @@ -0,0 +1,83 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/basic features necessary to define an UiApp. +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// !Internet +/*@file: IntNotification.h + *@brief: This header file contains the declarations of the Notification + * + */ + +#ifndef _INT_NOTIFICATION_H_ +#define _INT_NOTIFICATION_H_ + +#include +#include +#include +#include "IntTypes.h" + +class NotificationPanel + : public Tizen::Ui::Controls::Panel + , public Tizen::Base::Runtime::ITimerEventListener + { + public: + /** + * @brief The Default Constructor + */ + NotificationPanel(Tizen::Ui::Controls::Form& aForm); + + /** + * @brief The Default Destructor + */ + ~NotificationPanel(void); + + // ITimerEventListener + void OnTimerExpired(Tizen::Base::Runtime::Timer& timer); + + /** + * This function gets the Sets the __position (FooterPanelheight) + * + * @return No return type. + * @param int position. + */ + void SetPositionDiff(int pos); + + /** + * This function displays the Notification + * + * @return No return type. + * @param none. + */ + void ShowNotification(void); + + /** + * This function gets the Sets the text of the Notification + * + * @return No return type. + * @param message The Notification Message. + */ + void SetText(Tizen::Base::String& message); + + void OrientationChanged(); + + private: + Tizen::Ui::Controls::Form& __form; + Tizen::Ui::Controls::Label* __pLabel; + int __position; + Tizen::Base::Runtime::Timer* __pTimer; + }; + +#endif /* _INT_NOTIFICATION_H_ */ diff --git a/inc/IntPresentationModelBase.h b/inc/IntPresentationModelBase.h new file mode 100644 index 0000000..c347982 --- /dev/null +++ b/inc/IntPresentationModelBase.h @@ -0,0 +1,184 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntPresentationModelBase.h + *@brief: This is the header file for PresentationModelBase class + */ + + +#ifndef _INT_PRESENTATION_MODEL_BASE_H_ +#define _INT_PRESENTATION_MODEL_BASE_H_ + +#include +#include +#include + +#include "IntTypes.h" +#include "IntBookmarkData.h" +#include "IntHistoryData.h" + +/** + * @class PresentationModelBase + * @brief This class declares functions which will manage database + */ +class PresentationModelBase +{ +public: + /** + * Default constructor + */ + PresentationModelBase(void); + + /** + * Default destructor + */ + ~PresentationModelBase(void); + + /** + * Initialize storage service + */ + result Initialize(); + + /** + * Deinitialize storage service + */ + result UnInitialize(void); + +public: + + /** + * This function deletes the database + * + * @return An error code + * @param No parameter + * @exception E_SUCCESS The database closed successfully + * @exception E_FAILURE The database is not closed successfully + */ + result CloseDb(void); + + result CommitDb(void); + + /** + * This function creates the table in database + * + * @return An error code + * @param tableType The name of the table + * @exception E_SUCCESS The table is created successfully in database + * @exception E_FAILURE The table creation in database is not successful + */ + result CreateDBTables(BrowserDbTableTypes tableType); + + /** + * This function drops the existing tables from database + * + * @return An error code + * @param No parameter + * @exception E_SUCCESS The table is dropped successfully from database + * @exception E_FAILURE The table drop is unsuccessful + */ + result DropDBTables(void); + + result DbIsNextRowPresent(bool& nextRowpresent); + + /** + * This function drops the existing tables from database + * + * @return An error code + * @param No parameter + * @exception E_SUCCESS The table is dropped successfully from database + * @exception E_FAILURE The table drop is unsuccessful + */ + result ExecuteQuery(const Tizen::Base::String& pszFormatQuery, int& nRowCount); + + /** + * This function drops the existing tables from database + * + * @return An error code + * @param No parameter + * @exception E_SUCCESS The table is dropped successfully from database + * @exception E_FAILURE The table drop is unsuccessful + */ + result ExecuteBookmarkQuery(const Tizen::Base::String& pszFormatQuery, int& nRowCount, BookmarkData& bookmark); + + result ExecuteHistoryQuery(const Tizen::Base::String& pszFormatQuery, int& nRowCount, History& history); + + result ExecuteUpdateHistoryFavIconQuery(const Tizen::Base::String& formatQuery, int& nRowCount, History& history); + + result GetColumn(int nIndex, Tizen::Base::String& strVal); + + result GetColumn(int nIndex, int& nIntVal); + + result GetColumn(int nIndex, double& dblVal); + + result GetColumn(int nIndex, Tizen::Base::DateTime& dtVal); + + result GetColumn(int nIndex,Tizen::Base::ByteBuffer& favIconBuffer); + + static bool GetCurrentDateTime(Tizen::Base::DateTime& dt); + + Tizen::Base::String GetStringFromDate(Tizen::Base::DateTime& date); + /** + * This function gives the last inserted row id + * + * @return An error code + * @param tableName The name of the table + * @param rowId The rowId in which last inserted rowId will be saved. + * @exception E_SUCCESS The method is successful + * @exception E_FAILURE The method is not successful + * @remarks To work properly , the table name should be passed properly + */ + result GetLastInsertedId(Tizen::Base::String& tableName, int& rowId); + + /** + * This function calls the CreateDBTables function for all the tables + * + * @return An error code + * @param No parameter + */ + result InitializeDBTables(void); + + result IsNullColumn(int nIndex, bool& isColumNull); + + /** + * This function creates the database and constructs it. + * + * @return An error code + * @param No parameter + * @exception E_SUCCESS The database created successfully + * @exception E_FAILURE The database creation is failed + */ + result OpenDb(void); + + result RollbackDb(void); + +public: + Tizen::Base::String DB_FILE_PATH; + + static const int MAX_DB_QUERY_SIZE; + static const int QUERY_TYPE_LENGTH; + +private: + bool __isBeginTransaction; + + Tizen::Io::Database* __pDataBase; + Tizen::Io::DbEnumerator* __pDbEnum; + Tizen::Io::DbStatement* __pDbStatement; + +}; + + #endif //_INT_PRESENTATION_MODEL_BASE_H_ diff --git a/inc/IntRadioCustomItem.h b/inc/IntRadioCustomItem.h new file mode 100644 index 0000000..3ca1053 --- /dev/null +++ b/inc/IntRadioCustomItem.h @@ -0,0 +1,100 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet RadioCustomItem class +/*@file: IntRadioCustomItem.h + *@brief: The %IntRadioCustomItem defines radio custom item. + * + */ + +#ifndef _INT_RADIO_CUSTOM_ITEM_H_ +#define _INT_RADIO_CUSTOM_ITEM_H_ + +#include +#include +#include "IntTypes.h" + +class RadioCustomItem + : public Tizen::Ui::Controls::CustomItem +{ +public: + /** + * @brief The Default Constructor + */ + RadioCustomItem(void); + + /** + * @brief The Default Destructor + */ + virtual ~RadioCustomItem(void); + + /** + * @brief Initializes this instance of %DropDownCustomItem. + * + * @return An error code + * @param[in] width The width of the Custom Item + * @param[in] height The height of the Custom Item + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_STATE This instance has already been constructed. + * @exception E_INVALID_ARG A specified input parameter is invalid. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_SYSTEM A system error has occurred. + * + */ + result Construct(int width, int height); + + //getter and setter methods for Text + + /** + * @brief The method used to get the text of CustomItem + * @return An error code + */ + Tizen::Base::String GetText(void); + + /** + * @brief Add all the required elements and create the Custom Item. + * + * @return An error code + * @param[in] void An instance of the Rectangle class @n + * This instance represents the x and y coordinates of the top-left corner of the created window along with + * the width and height of the window. + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_STATE This instance has already been constructed. + * @exception E_INVALID_ARG A specified input parameter is invalid. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_SYSTEM A system error has occurred. + * + */ + result Make(void); + + /** + * @brief The method used to set the text of CustomItem + * @return An error code + */ + void SetText(Tizen::Base::String& text); + +protected: + static const int IDA_FORMAT_STRING; + +private: + int __height; ///Height of the SettingToggleCustomItem Instance + Tizen::Base::String __text; ///The Text for the Toggle Button + int __width; ///Width of the SettingToggleCustomItem Instance + int __fontSize; ///fontsize from settings +}; + +#endif /* _INT_RADIO_CUSTOM_ITEM_H_ */ diff --git a/inc/IntReaderFontSizeForm.h b/inc/IntReaderFontSizeForm.h new file mode 100644 index 0000000..1e20023 --- /dev/null +++ b/inc/IntReaderFontSizeForm.h @@ -0,0 +1,89 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet IntFontSize class +/*@file: IntFontSize.h + *@brief: This class defines IntFontSize used to change the font size + * + */ + +#ifndef _INT_READER_FONT_SIZE_FORM_H_ +#define _INT_READER_FONT_SIZE_FORM_H_ + +#include +#include + +class ReaderFontSizeForm + : public Tizen::Ui::Controls::Form + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::Scenes::ISceneEventListener + , public Tizen::Ui::Controls::ISliderEventListener +{ +public: + /** + * @brief The Default Constructor + */ + ReaderFontSizeForm(void); + + /** + * @brief The Default Destructor + */ + virtual ~ReaderFontSizeForm(void); + + /** + * @brief Initializes this IntFontSize Form. + * @return An error code + * @param[in] void + * @exception true The method is successful. + * @exception false An error occurred. + */ + bool Initialize(void); + + /** + * @brief Initializes the controls of the UI for IntFontSize. + * + * @return An error code + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_STATE This instance has already been constructed. + * @exception E_INVALID_ARG A specified input parameter is invalid. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_SYSTEM A system error has occurred. + * + */ + result OnInitializing(void); + +protected: + //IActionEventListener + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + //IFormBackEventListener + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + //ISceenEventListener + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + //ISliderEventListener + virtual void OnSliderBarMoved(Tizen::Ui::Controls::Slider& source, int value); + +private: + Tizen::Ui::Controls::Slider* __pFontSlider; + Tizen::Base::Integer* __pFontValue; +}; + +#endif /* _INT_READER_FONT_SIZE_FORM_H_ */ diff --git a/inc/IntSceneRegister.h b/inc/IntSceneRegister.h new file mode 100644 index 0000000..d452b47 --- /dev/null +++ b/inc/IntSceneRegister.h @@ -0,0 +1,95 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntSceneRegister.h + *@brief: This header file contains the declarations of the %SceneRegister class. + * + */ + +#ifndef _INT_SCENE_REGISTER_H_ +#define _INT_SCENE_REGISTER_H_ + +/// Use 'extern' to eliminate duplicate data allocation. +extern const wchar_t* IDSCN_MAIN_VIEW; +extern const wchar_t* IDSCN_BOOKMARK_VIEW; +extern const wchar_t* IDSCN_HISTORY_LIST; +extern const wchar_t* IDSCN_FIND_WORD; +extern const wchar_t* IDSCN_EDIT_HISTORY_LIST; +extern const wchar_t* IDSCN_SETTINGS_CLEAR_PRIVATE_DATA; +extern const wchar_t* IDSCN_MULTIPLE_WINDOW; +extern const wchar_t* IDSCN_MULTIPLE_WINDOW_GRID; +extern const wchar_t* IDSCN_SETTINGS; +extern const wchar_t* IDSCN_ADD_BOOKMARK; +extern const wchar_t* IDSCN_ARTICLE_READER; +extern const wchar_t* IDSCN_EDIT_BOOKMARK_LIST; +extern const wchar_t* IDSCN_CREATE_BOOKMARK_FOLDER; +extern const wchar_t* IDSCN_FONT_SIZE; +extern const wchar_t* IDSCN_EDIT_HOMEPAGE_VIEW; +extern const wchar_t* IDSCN_BRIGHTNESS; + +class SceneRegister +{ +public: + /** + * Registers all the scenes using Register~SceneRegisterScene() method of the SceneManager class + * + */ + static void RegisterAllScenes(void); + + /** + * Registers New main view scene for multi window + * + * @return no return value + * @param[in] sceneID The sceneID of new view. + * @param[in] formID The formID of new View. + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_ARG A specified input parameter is invalid. + * @exception E_OBJ_ALREADY_EXIST The specified @c sceneId already exists. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_INVALID_STATE This instance has not been constructed as yet. + * @remarks Register the new main view in scenemanager. + */ + static result RegisterNewMainView(const Tizen::Base::String& sceneID, const Tizen::Base::String& FormID); + + /** + * Unregister and destroy the scene + * + * @return An error code + * @param[in] sceneID The sceneID of new view. + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_ARG A specified input parameter is invalid. + * @exception E_OBJ_ALREADY_EXIST The specified @c sceneId already exists. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_INVALID_STATE This instance has not been constructed as yet. + * @remarks Unregister and destroy the scene + */ + static result DestroyAndUnRegisterScene(const Tizen::Base::String& sceneID); + +private: + /** + * Default constructor + */ + SceneRegister(void); + + /** + * Default destructor + */ + ~SceneRegister(void); +}; + +#endif // _INT_SCENE_REGISTER_H_ diff --git a/inc/IntSettingClearPrivateDataForm.h b/inc/IntSettingClearPrivateDataForm.h new file mode 100644 index 0000000..0445e48 --- /dev/null +++ b/inc/IntSettingClearPrivateDataForm.h @@ -0,0 +1,212 @@ + +// Copyright 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Apache License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License.SETTINGSCLEARPRIVATEDATAFORM_H_ +// +//!Internet SettingsClearPrivateDataForm class +/*@file: IntSettingsClearPrivateDataForm.h + *@brief: The SettingsClearPrivateDataForm used to create private data scene + * + */ + +#ifndef _INT_SETTINGS_CLEAR_PRIVATE_DATA_FORM_H_ +#define _INT_SETTINGS_CLEAR_PRIVATE_DATA_FORM_H_ + +#include +#include + +using namespace Tizen::Ui; + +class SettingsClearPrivateDataForm + : public Controls::Form + , public IActionEventListener + , public Controls::IFormBackEventListener + , public Tizen::Ui::Controls::IListViewItemProvider + , public Tizen::Ui::Controls::IListViewItemEventListener + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::Scenes::ISceneEventListener +{ +public: + /** + * Default constructor + */ + SettingsClearPrivateDataForm(void); + + /** + * Default destructor + */ + virtual ~SettingsClearPrivateDataForm(void); + + /** + *@name Initialize + *@brief Constructing and Initializing ClearPrivateDataScene + *@param[in] no input parameters + *@retval TRUE Initialize success + *@retval FALSE Initialize failure + * + */ + bool Initialize(void); + + /** + *@name OnInitializing + *@brief Used to create instances and set styles for the form content. + *@param[in] no input parameters + *@retval TRUE Initialize success + *@retval FALSE Initialize failure + */ + virtual result OnInitializing(void); + + /** + *@name OnTerminating + *@brief Called on terminate of a form + *@param[in] no input parameters + *@retval TRUE Terminate success + *@retval FALSE Terminate failure + */ + virtual result OnTerminating(void); + + //IListViewItemProvider + /** + *@name CreateItem + *@brief Called when items need to be loaded. + *@param[in] index The index of the list + *@param[in] itemWidth The width of the element + *@retval no return value + */ + virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth); + + /** + *@name DeleteItem + *@brief Called when items need to be loaded. + *@param[in] index The index of the list + *@param[in] pItem The pointer to the item to be deleted + *@param[in] itemWidth The width of the element + *@retval no return value + */ + virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth); + + /** + *@name GetItemCount + *@brief Called when the IconListView is about to be drawn and requests the listener to set the number of total items. + *@param[in] no input parameter + *@retval no return value + */ + virtual int GetItemCount(void); + + // IActionEventListener + /** + *@name OnActionPerformed + *@brief Called when an action event occurs. + *@param[in] source The source of the event + *@param[in] actionId The information about the action event + *@retval no return value + */ + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + // IFormBackEventListener + /** + *@name OnSceneDeactivated + *@brief Called when the current Form control needs to be closed to revert back to the previous Form control. + *@param[in] source The source of the event + *@retval no return value + */ + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + // IListViewItemEventListener + /** + *@name OnListViewContextItemStateChanged + *@brief Called when the state of an element in the ListContextItem is changed. + *@param[in] listView The source of the event + *@param[in] index The index of the list + *@param[in] elementId The element ID + *@param[in] state The status of the element + *@retval no return value + */ + virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state); + + /** + *@name OnListViewItemStateChanged + *@brief Called when the state of an element in the ListViewItem in the ListView or GroupedListView is changed. + *@param[in] listView The source of the event + *@param[in] index The index of the list + *@param[in] elementId The element ID + *@param[in] status The status of the element + *@retval no return value + */ + virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status); + + /** + *@name OnListViewItemSwept + *@brief Called when the ListItem is swept. + *@param[in] listView The source of the event + *@param[in] index The index of the list + *@param[in] direction The sweep direction + *@retval no return value + */ + virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction); + + /** + *@name OnListViewItemLongPressed + *@brief Called when the item or the element is long pressed. + *@param[in] listView The source of the event + *@param[in] index The index of the list + *@param[in] elementId The element ID + *@param[in] invokeListViewItemCallback Indicates whether to invoke ListView item callback after this method returns + *@retval no return value + */ + virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback); + + //IOrientationEventListener + /** + *@name OnOrientationChanged + *@brief Called when an orientation event occurs. + *@param[in] source The source of the event + *@param[in] orientationStatus The information about the orientation event + *@remarks The orientation changed event is fired on %Control for which orientation mode change has been enabled by calling SetOrientation(). + *@retval no return value + */ + void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus); + + // ISceneEventListener + /** + *@name OnSceneActivatedN + *@brief Called after setting as current scene. + *@param[in] previousSceneId The scene ID of the deactivated scene + *@param[in] currentSceneId The scene ID of the newly activated scene + *@param[in] IList A pointer to an argument list that is user-specified + *@retval no return value + */ + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + + /** + *@name OnSceneDeactivated + *@brief Called when the current scene is deactivated. + *@param[in] currentSceneId The scene ID of the scene being deactivated + *@param[in] nextSceneId The scene ID of the newly activated scene + *@param[in] IList A pointer to an argument list that is user-specified + *@retval no return value + */ + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + +protected: + static const int IDA_FORMAT_TITLE_STRING; + static const int IDA_BUTTON_DELETE; + static const int IDA_BUTTON_CANCEL; + +private: + int __clearItem; + // __pList Pointer to ListView + Tizen::Ui::Controls::ListView* __pList; +}; + +#endif /* _INT_SETTINGS_CLEAR_PRIVATE_DATA_FORM_H_ */ diff --git a/inc/IntSettingForm.h b/inc/IntSettingForm.h new file mode 100644 index 0000000..892ab50 --- /dev/null +++ b/inc/IntSettingForm.h @@ -0,0 +1,215 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet SettingForm class +/*@file: IntSettingForm.h + *@brief: The %IntSettingForm defines settings. + * + */ + +#ifndef _INT_SETTING_FORM_H_ +#define _INT_SETTING_FORM_H_ + +#include +#include + +#include "IntMultipleWindowPresentationModel.h" +#include "IntConfirmationPopup.h" +#include "IntNotificationPanel.h" + +class SettingForm + : public Tizen::Ui::Controls::Form + , public Tizen::Ui::Controls::IFormBackEventListener + , public Tizen::Ui::Controls::IGroupedListViewItemEventListener + , public Tizen::Ui::Controls::IGroupedListViewItemProvider + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::IOrientationEventListener + , public Tizen::Ui::Scenes::ISceneEventListener +{ +public: + /** + * @brief The Default Constructor + */ + SettingForm(void); + + /** + * @brief The Default Destructor + */ + virtual ~SettingForm(void); + + /** + * @brief Initializes this SettingForm Form. + */ + bool Initialize(void); + + /** + * @brief Initializes the controls of the UI for SettingForm. + */ + result OnInitializing(void); + + //IActionEventListener + void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + //IGroupedListViewItemProvider + Tizen::Ui::Controls::GroupItem* CreateGroupItem(int groupIndex, int itemWidth); + + Tizen::Ui::Controls::ListItemBase* CreateItem(int groupIndex, int itemIndex, int itemWidth); + + bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth); + + bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth); + + int GetGroupCount(void); + + int GetItemCount(int groupIndex); + + //IGroupedListViewItemEventListener + void OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus status); + + void OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus status); + + void OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction); + + //IFormBackEventListener + void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + + //IOrientationEventListener + void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus); + + //ISceneEventListener + virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs); + + virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId); + + void OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs); + enum + { + SETTING_INVALID = -1, + SETTING_HOMEPAGE_TITLE = 0, + SETTING_CURRENT_PAGE, //1 + SETTING_BLANK_PAGE, //2 + SETTING_MOST_VISITED_SITE, //3 + //SETTING_EMPTY_PAGE, //1 + SETTING_FAVORITE_URL, //4 + SETTING_DEFAULT_VIEW_TITLE, //5 + SETTING_FIT_TO_WIDTH, //6 + SETTING_READABLE, //7 + SETTING_RUN_JAVASCRIPT, //8 + SETTING_DISPLAY_IMAGES, //9 + SETTING_BLOCK_POPUP, //10 + SETTING_CLEAR_CACHE, //11 + SETTING_CLEAR_HISTORY, //12 + SETTING_SHOW_SECURITY_WARNINGS, //13 + SETTING_ACCEPT_COOKIES, //14 + SETTING_CLEAR_COOKIE_DATA, //15 + SETTING_REMEMBER_FORM_DATA, + SETTING_CLEAR_FORM_DATA, //16 + SETTING_REMEMBER_PASSWORD, + SETTING_CLEAR_PASSWORDS, //17 + SETTING_SEARCH_ENGINE_TITLE, //20 + SETTING_SEARCH_ENGINE_YAHOO, //21 + SETTING_SEARCH_ENGINE_NAVER, //22 + SETTING_SEARCH_ENGINE_GOOGLE, //23 + SETTING_RESET_TO_DEFAULT, //24 + SETTING_MAX //25 + + }; + + enum SettingListItemType + { + ITEM_TYPE_NORMAL = 0, + ITEM_TYPE_TOGGLE, + ITEM_TYPE_DROPDOWN, + ITEM_TYPE_RADIO, + }; + + class SettingItemInfo + { + public: + /** + * @brief The Default Constructor + */ + SettingItemInfo(void); + + /** + * @brief The Default Destructor + */ + virtual ~SettingItemInfo(void){}; + + public: + int childCount; //only for ITEM_TYPE_DROPDOWN type items + bool isOpen; //true for opened and false for closed + bool isSelected; //only for ITEM_TYPE_RADIO && ITEM_TYPE_TOGGLE type of items + SettingListItemType itemType; + Tizen::Base::String titleText; + Tizen::Base::String subText; + }; + + int groupCount; + int* pGroupItemCount; + SettingItemInfo settingInfo[SETTING_MAX]; +private: + /** + * @brief Initializes this instance of settings default values. + */ + void InitializeSettingValues(void); + + /** + * @brief Opens a popup to clear cache data. + */ + void ClearCache(void); + + /** + * @brief Opens a popup to clear all the cookies. + */ + void ClearCookie(void); + + /** + * @brief Opens a popup to clear all Saved Form Data. + */ + void ClearFormData(void); + + /** + * @brief Opens a popup to clear all Saved Passwords. + */ + void ClearPasswords(void); + + /** + * @brief Opens a popup to clear the browser history + */ + void ClearHistory(void); + + /** + * @brief Opens a popup for resetting the default settings. + */ + void ResetToDefault(void); + +private: + Tizen::Base::String __currentURL; + int __fontValue; + ConfirmationPopup* __pConfirmationPopup; + Tizen::Ui::Controls::GroupedListView* __pList; + NotificationPanel* __pNotification; + Tizen::Ui::Controls::Popup* __pResetPopup; + WindowInfo* __pWindowInfo; // Contains window information of current scene + bool __isCurrentPageDisable; + int __fontSize; + +}; + + +#endif /* _INT_SETTING_FORM_H_ */ diff --git a/inc/IntSettingPresentationModel.h b/inc/IntSettingPresentationModel.h new file mode 100644 index 0000000..4a3f697 --- /dev/null +++ b/inc/IntSettingPresentationModel.h @@ -0,0 +1,482 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntSettingsManager.cpp + *@brief: Used to define SettingsManager + */ + +#ifndef _INT_SETTINGS_PRESENTATION_MODEL_H_ +#define _INT_SETTINGS_PRESENTATION_MODEL_H_ + +#include +#include +#include +#include +#include + +#include "IntISettingChangeListener.h" + + +enum SettingValues +{ + REGISTRY_SETTING_INVALID = -1, + REGISTRY_SETTING_HOMEPAGE = 0, + REGISTRY_SETTING_DEFAULT_VIEW, //1 + REGISTRY_SETTING_RUN_JAVASCRIPT, //2 + REGISTRY_SETTING_DISPLAY_IMAGES, //3 + REGISTRY_SETTING_HTML5_VIDEOS, //4 + REGISTRY_SETTING_WORD_WRAPPING, //5 + REGISTRY_SETTING_BLOCK_POPUP, //6 + REGISTRY_SETTING_ACCEPT_COOKIES, //7 + REGISTRY_SETTING_AUTOSAVE_ID_PASSWORD, //8 + REGISTRY_SETTING_SHOW_SECURITY_WARNINGS, //9 + REGISTRY_SETTING_SEARCH_ENGINE, //10 + REGISTRY_SETTING_CASE_SENSITIVE, //11 + REGISTRY_SETTING_RUN_READER, //12 + REGISTRY_SETTING_READER_FONT_SIZE, //13 + REGISTRY_SETTING_FAVORITE_URL_VALUE, //14 + REGISTRY_SETTING_REMEMBER_FORM_DATA, //15 + REGISTRY_SETTING_REMEMBER_PASSWORD, //16 + MAX_REGISTRY_SETTING //17 +}; + +class SettingPresentationModel +{ +public: + + + /** + * @brief The method initializes the registry and the SettingsManager values. + * + * @return An error code + * @param[in] void + * + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_STATE This instance has already been constructed. + * @exception E_INVALID_ARG A specified input parameter is invalid. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_SYSTEM A system error has occurred. + * + */ + result Construct(void); + + /** + * @brief The method used to add a listener to get the setting change events + */ + void AddSettingsEventListener(const ISettingChangeEventListener& pListener); + + + + /** + * @name ClearCache + * @brief The method used to clear the cache of web browser + * @param[in] void + * @return String The Search URL + */ + void ClearCache(void); + + /** + * @name ClearCookie + * @brief The method used to clear the cache of web browser + * @param[in] void + * @return void + */ + void ClearCookie(void); + + /** + * @name ClearFormData + * @brief The method used to clear the Form Data of web browser + * @param[in] void + * @return void + */ + void ClearFormData(void); + + /** + * @name ClearPasswords + * @brief The method used to clear the Passwords of web browser + * @param[in] void + * @return void + */ + void ClearPasswords(void); + + /** + * @brief The method used to get the default view + * @param[in] void + * @return String The default view value + * + */ + Tizen::Base::String GetDefaultView(void); + + /** + * @brief The method used to get the Favorite URL + * @param[in] void + * @return String The Favorite URL + */ + Tizen::Base::String GetFavoriteUrl(void); + + /** + * @brief The method used to get the already created instance of the SettingPresentationModel + */ + static SettingPresentationModel* GetInstance(void); + + /** + * @brief The method used to set the homepage value + * @param[in] void + * @return String The Homepage Value + */ + Tizen::Base::String GetHomepage(void); + + /** + * @brief The method used to get the value of reader font size + * @param[in] void + * @return int fontSize of reader + */ + int GetReaderFontSize(void); + + /** + * @brief The method used to get the Save Password string value. + * @param[in] void + * @return String The Save Password String + */ + Tizen::Base::String GetSavePassword(void); + + /** + * @brief The method used to get the Search Engine string value. + * @param[in] void + * @return String The Search Engine String + */ + Tizen::Base::String GetSearchEngine(void); + + /** + * @brief The method used to get the Search URL Based on the default search engine value. + * @param[in] void + * @return String The Search URL + */ + Tizen::Base::String GetSearchUrl(const Tizen::Base::String& searchText); + + bool GetPrivateOn(void); + + /** + * @brief The method used to get the Block popup as true or false + * @param[in] void + * @return bool true to enable and false for disable + */ + bool IsBlockPopUp(void); + + /** + * @brief The method used to get the Cookies Enabled as true or false + * @param[in] void + * @return bool true to enable and false for disable + */ + bool IsCookiesEnabled(void); + + /** + * @brief The method used to get the case sensitivity as true or false + * @param[in] void + * @return bool true to enable and false for disable + */ + bool IsCaseSensitiveEnabled(void); + + /** + * @brief The method used to get the Display Images value as true or false + * @param[in] void + * @return bool true to enable and false for disable + */ + bool IsDisplayImagesEnabled(void); + + /** + * @brief The method used to get the HTML5 Videos as true or false + * @param[in] void + * @return bool true to enable and false for disable + */ + bool IsHtml5VideosEnabled(void); + + /** + * @brief The method used to get the Remember password Enabled as true or false + * @param[in] void + * @return bool true to enable and false for disable + */ + bool IsRememberFormData(void); + + /** + * @brief The method used to get the Remember password Enabled as true or false + * @param[in] void + * @return bool true to enable and false for disable + */ + bool IsRememberPassword(void); + + /** + * @brief The method used to get the Javascript enabled value as true or false + * @param[in] void + * @return bool true to enable and false for disable + */ + bool IsRunJavascriptEnabled(void); + + /** + * @brief The method used to get the Run Reader as true or false + * @param[in] void + * @return bool true to enable and false for disable + */ + bool IsRunReaderEnabled(void); + + /** + * @brief The method used to get the Security Warnings as true or false + * @param[in] void + * @return bool true to enable and false for disable + */ + bool IsSecurityWarningsEnabled(void); + + /** + * @brief The method used to get the Word Wrap as true or false + * @param[in] void + * @return bool true to enable and false for disable + */ + bool IsWordWrapEnabled(void); + + /** + * @brief The method loads the data and the SettingsManager values from the registry. + * + * @return An error code + * @param[in] void + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_STATE This instance has already been constructed. + * @exception E_INVALID_ARG A specified input parameter is invalid. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_SYSTEM A system error has occurred. + * + */ + result LoadRegistry(void); + + /** + * @brief The method used to remove the ISettingsChangeListener + */ + void RemoveSettingsEventListener(ISettingChangeEventListener& pListener); + + /** + * @brief The method resets the registry and the SettingsManager values to default. + * + * @return An error code + * @param[in] void + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_STATE This instance has already been constructed. + * @exception E_INVALID_ARG A specified input parameter is invalid. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_SYSTEM A system error has occurred. + * + */ + result ResetRegistry(void); + + /** + * @brief The method used to set the Default values of settings + */ + void SetDefaultValues(void); + + /** + * @brief The method used to set the default view + * @param[in] String The default view value + * @return void + */ + void SetDefaultView(const Tizen::Base::String& viewLevel); + + /** + * @brief The method used to set the homepage value + * @param[in] String The Homepage Value + * @return void + */ + void SetHomepage(const Tizen::Base::String& homePage); + + /** + * @brief The method used to set the Javascript enabled value to true or false + * @param[in] bool true to enable and false for disable + * @return void + */ + void SetRunJavascriptEnabled(bool runJsEnabled); + + /** + * @brief The method used to set the Display Images value to true or false + * @param[in] bool true to enable and false for disable + * @return void + */ + void SetDisplayImagesEnabled(bool displayImages); + + /** + * @brief The method used to set the HTML5 Videos to true or false + * @param[in] bool true to enable and false for disable + * @return void + */ + void SetHtml5VideosEnabled(bool html5Videos); + + /** + * @brief The method used to set the Word Wrap to true or false + * @param[in] bool true to enable and false for disable + * @return void + */ + void SetWordWrapEnabled(bool wordWrap); + + /** + * @brief The method used to set the Block popup to true or false + * @param[in] bool true to enable and false for disable + * @return void + */ + void SetBlockPopUp(bool blockPopUp); + + /** + * @brief The method used to set the Cookies Enabled to true or false + * @param[in] bool true to enable and false for disable + * @return void + */ + void SetCookiesEnabled(bool cookiesEnabled); + + /** + * @brief The method used to set the Save Password string value. + * @param[in] String The Save Password String + * @return void + */ + void SetSavePassword(const Tizen::Base::String& savePassword); + + /** + * @brief The method used to set Remember form data to true or false + * @param[in] bool true to enable false for disable + * @return void + */ + void SetRememberFormData(bool rememberFormData); + + /** + * @brief The method used to set Remember password to true or false + * @param[in] bool true to enable false for disable + * @return void + */ + void SetRememberPassword(bool rememberPassword); + + /** + * @brief The method used to enabling the Security Warnings to true or false + * @param[in] bool true to enable and false for disable + * @return void + */ + void SetSecurityWarningsEnabled(bool securityWarnings); + + /** + * @brief The method used to set the Default Search Engine. + * @param[in] String The Search Engine String + * @return void + */ + void SetSearchEngine(const Tizen::Base::String& searchEngine); + + + + void SetCaseSensitiveEnabled(bool caseSensitive); + + /** + * @brief The method used to enabling the Reader to true or false + * @param[in] bool true to enable and false for disable + * @return void + */ + void SetRunReaderEnabled(bool runReader); + + /** + * @brief The method used to set the value of reader font size + * @param[in] int fontSize of reader + * @return void + */ + void SetReaderFontSize(int fontSize); + + /** + * @name GetWebSettings + * @brief The method used to get web browser settings + * @param[in] void + * @return WebSetting The Settings of web browser + */ + Tizen::Web::Controls::WebSetting& GetWebSettings(void); + + /** + * @name SetFavoriteValue + * @brief The method used to set favourite URL for web browser + * @param[in] val favorite value to set + * @return An error code + * @exception E_INVALID_ARG The length of the specified string for a section or entry is smaller than or equal to @c 0, or the specified string is a @c null value or string with '\0' and '\n'. + * @exception E_KEY_NOT_FOUND The specified key is not used in the application preferences. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_KEY_ALREADY_EXIST The key has already been used in the application preferences. + * @exception E_SUCCESS The method is successful. + */ + result SetFavoriteValue(const Tizen::Base::String& val); + + void SetPrivateOn(bool isPrivateOn); + +private: + /** + * @brief The Default Constructor + */ + SettingPresentationModel(void); + + /** + * @brief The Default Destructor + */ + ~SettingPresentationModel(void); + + /** + * copy constructor + */ + SettingPresentationModel(const SettingPresentationModel& settingModelObj); + + /** + * @brief The method used to create the instance of the SettingsManager class + */ + static void CreateInstance(void); + + /** + * @brief The method used to remove the already created instance of the SettingsManager + */ + static void DestroyInstance(void); + /** + * assignment operator + */ + SettingPresentationModel& operator=(const SettingPresentationModel& settingModelObj); + + result SetValue(const int settingValueName, const Tizen::Base::String& val); + +private: + static SettingPresentationModel* __pSettingsPresentationModel; + + Tizen::Base::Collection::ArrayList __listenerList; + Tizen::Base::String __homePage; + Tizen::Base::String __defaultViewLevel; + Tizen::Base::String __favouriteURL; + bool __runJsEnabled; + bool __displayImages; + bool __html5Videos; + bool __wordWrap; + bool __blockPopUp; + bool __rememberFormData; + bool __rememberPassword; + bool __cookies; + Tizen::Base::String __savePassword; + bool __securityWarnings; + Tizen::Base::String __searchEngine; + bool __caseSensitive; + bool __runReader; + int __fontSize; + bool __isPrivateOn; + Tizen::Web::Controls::WebSetting __setting; + + // Tizen::Io::Registry* __pRegistry; + Tizen::Base::String __entry[MAX_REGISTRY_SETTING]; + Tizen::Base::String __values[MAX_REGISTRY_SETTING]; +}; + +#endif // _INT_SETTINGS_PRESENTATION_MODEL_H_ diff --git a/inc/IntSettingToggleCustomItem.h b/inc/IntSettingToggleCustomItem.h new file mode 100644 index 0000000..a30622e --- /dev/null +++ b/inc/IntSettingToggleCustomItem.h @@ -0,0 +1,104 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet SettingToggleCustomItem class +/*@file: SettingToggleCustomItem.h + *@brief: The SettingToggleCustomItem used to toggle the item. + * + */ + +#ifndef _INT_SETTING_TOGGLE_CUSTOM_ITEM_H_ +#define _INT_SETTING_TOGGLE_CUSTOM_ITEM_H_ + +#include +#include +#include "IntTypes.h" + +class SettingToggleCustomItem + : public Tizen::Ui::Controls::CustomItem +{ + +public: + /** + * @brief The Default constructor + */ + SettingToggleCustomItem(void); + + /** + * @brief The Default destructor + */ + virtual ~SettingToggleCustomItem(void); + + /** + * @brief Initializes this instance of %DropDownCustomItem. + * + * @return An error code + * @param[in] void An instance of the Rectangle class @n + * This instance represents the x and y coordinates of the top-left corner of the created window along with + * the width and height of the window. + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_STATE This instance has already been constructed. + * @exception E_INVALID_ARG A specified input parameter is invalid. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_SYSTEM A system error has occurred. + * + */ + result Construct(int width, int height); + + //getter and setter methods for __text + + /** + * @brief The method used to get the text of CustomItem + * + * @return A String + */ + Tizen::Base::String GetText(void); + + /** + * @brief Add all the required elements and create the Custom Item. + * + * @return An error code + * @param[in] void An instance of the Rectangle class @n + * This instance represents the x and y coordinates of the top-left corner of the created window along with + * the width and height of the window. + * @exception E_SUCCESS The method is successful. + * @exception E_INVALID_STATE This instance has already been constructed. + * @exception E_INVALID_ARG A specified input parameter is invalid. + * @exception E_OUT_OF_MEMORY The memory is insufficient. + * @exception E_SYSTEM A system error has occurred. + * + */ + result Make(void); + + /** + * @brief The method used to set the text of CustomItem + */ + + void SetText(Tizen::Base::String& text); + + + +private: + int __height; ///Height of the SettingToggleCustomItem Instance + int __width; ///Width of the SettingToggleCustomItem Instance + + Tizen::Base::String __text; ///The Text for the Toggle Button + int __fontSize; ///fontsize from settings + +}; + +#endif /* _INT_SETTING_TOGGLE_CUSTOM_ITEM_H_ */ diff --git a/inc/IntSharePopup.h b/inc/IntSharePopup.h new file mode 100644 index 0000000..a1ff2fb --- /dev/null +++ b/inc/IntSharePopup.h @@ -0,0 +1,196 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// !Internet +/*@file: IntSharePopUp.h + *@brief: This header file contains the declarations of the SharePopup + * + */ + +#ifndef INTSHAREPOPUP_H_ +#define INTSHAREPOPUP_H_ + +#include +#include +#include +#include + + +class ShareInfo : public Tizen::Base::Object + +{ +public: + /** + * @brief The Default constructor + */ + ShareInfo(void); + + /** + * @brief The Default destructor + */ + ~ShareInfo(void); + + /** + * @brief The method used to get the Page title + * @param[in] void + * @return String The Page title + */ + Tizen::Base::String GetPageTitle(void); + + /** + * @brief The method used to get the Page URL + * @param[in] void + * @return String The Page URL + */ + Tizen::Base::String GetPageURL(void); + + /** + * @brief The method used to set the Page title + * @param[in] aPageTitle + */ + void SetPageTitle(Tizen::Base::String aPageTitle); + + /** + * @brief The method used to set the Page URL + * @param[in] aPageURL + */ + void SetPageUrl(Tizen::Base::String aPageURL); + + void SetImageAttached(bool imageAttached); + + bool GetImageAttached(); + + void SetImagePath(Tizen::Base::String aImagePath); + + Tizen::Base::String GetImagePath(void); + +private: + Tizen::Base::String __pageTitle; + Tizen::Base::String __pageURL; + Tizen::Base::String __imagePath; + bool isImageAttached; +}; + +class SharePopup + : public Tizen::App::IAppControlEventListener + , public Tizen::Base::Runtime::ITimerEventListener + , public Tizen::Ui::Controls::IListViewItemEventListener + , public Tizen::Ui::Controls::IListViewItemProvider + , public Tizen::Ui::Controls::Popup + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::IPropagatedKeyEventListener + , public Tizen::App::IAppControlResponseListener + + { + public: + /** + * @brief The Default Constructor + */ + SharePopup(void); + + /** + * @brief The Default Destructor + */ + ~SharePopup(void); + + /** + * @brief Initializes this SettingForm Form. + * + * @return An error code + * @exception true The method is succeIOrientationEventListenerssful. + * @exception false An error Occured. + */ + bool Initialize(void); + + virtual result OnTerminating(void); + + /** + * This function adds the share info object in the array list + * + * @return An Error Code + * @param An Object of ShareInfo. + */ + result AddShareInfo(ShareInfo* pShareInfo); + + void RemoveAllShareInfo(); + + //ITimerEventListener + virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer); + + //IActionEventListener + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + // IAppControlListener + void OnAppControlCompleted(const Tizen::Base::String& providerId, const Tizen::Base::String& operationId, const Tizen::Base::Collection::IList* pResultList); + + //IListViewItemProvider + virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth); + virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth); + virtual int GetItemCount(void); + + // IListViewItemEventListener + virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state); + virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status); + virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction); + virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback); + + /** + * This function displays the Notification + * + * @return No return type. + * @param none. + */ + void StartMessageAppControl(void); + + /** + * This function Starts the EmailApp Control + * + * @return No return type. + * @param none. + */ + void StartEmailAppControl(void); + /** + * This function Starts third party apps that supports share_text appcontrol + * + * @return No return type. + * @param index. + */ + void StartAppControl(int index); + void OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData); + + //IPropagatedKeyEventListener + virtual bool OnKeyPressed (Tizen::Ui::Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo){return false;} + virtual bool OnKeyReleased (Tizen::Ui::Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo); + virtual bool OnPreviewKeyPressed (Tizen::Ui::Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo){return false;} + virtual bool OnPreviewKeyReleased (Tizen::Ui::Control &source, const Tizen::Ui::KeyEventInfo &keyEventInfo){return false;} + + protected: + static const int IDA_CANCEL_BUTTON; + static const int ID_FORMAT_MESSAGE_STRING; + static const int ID_FORMAT_EMAIL_STRING; + static const int ID_FORMAT_FACEBOOK_STRING; + static const int ID_FORMAT_TWITTER_STRING; + + private: + Tizen::Ui::Controls::ListView* __pList; + Tizen::Base::Collection::ArrayList* __pShareList; + bool __appControlOngoing; + Tizen::Base::Runtime::Timer* __pTimer; + Tizen::Base::Collection::IList* __pAppControlList; + }; + +#endif /* INTSHAREPOPUP_H_ */ diff --git a/inc/IntSharePopup.h.bak b/inc/IntSharePopup.h.bak new file mode 100644 index 0000000..595cd37 --- /dev/null +++ b/inc/IntSharePopup.h.bak @@ -0,0 +1,158 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// !Internet +/*@file: IntSharePopUp.h + *@brief: This header file contains the declarations of the SharePopup + * + */ + +#ifndef INTSHAREPOPUP_H_ +#define INTSHAREPOPUP_H_ + +#include +#include +#include + +class ShareInfo : public Tizen::Base::Object +{ +public: + /** + * @brief The Default constructor + */ + ShareInfo(void); + + /** + * @brief The Default destructor + */ + ~ShareInfo(void); + + /** + * @brief The method used to get the Page title + * @param[in] void + * @return String The Page title + */ + Tizen::Base::String GetPageTitle(void); + + /** + * @brief The method used to get the Page URL + * @param[in] void + * @return String The Page URL + */ + Tizen::Base::String GetPageURL(void); + + /** + * @brief The method used to set the Page title + * @param[in] aPageTitle + */ + void SetPageTitle(Tizen::Base::String aPageTitle); + + /** + * @brief The method used to set the Page URL + * @param[in] aPageURL + */ + void SetPageUrl(Tizen::Base::String aPageURL); + +private: + Tizen::Base::String __pageTitle; + Tizen::Base::String __pageURL; +}; + +class SharePopup + : public Tizen::App::IAppControlEventListener + , public Tizen::Ui::Controls::IListViewItemEventListener + , public Tizen::Ui::Controls::IListViewItemProvider + , public Tizen::Ui::Controls::Popup + , public Tizen::Ui::IActionEventListener + { + public: + /** + * @brief The Default Constructor + */ + SharePopup(void); + + /** + * @brief The Default Destructor + */ + ~SharePopup(void); + + /** + * @brief Initializes this SettingForm Form. + * + * @return An error code + * @exception true The method is succeIOrientationEventListenerssful. + * @exception false An error Occured. + */ + bool Initialize(void); + + virtual result OnTerminating(void); + + /** + * This function adds the share info object in the array list + * + * @return An Error Code + * @param An Object of ShareInfo. + */ + result AddShareInfo(ShareInfo* pShareInfo); + + //IActionEventListener + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + + // IAppControlListener + void OnAppControlCompleted(const Tizen::Base::String& providerId, const Tizen::Base::String& operationId, const Tizen::Base::Collection::IList* pResultList); + + //IListViewItemProvider + virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth); + virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth); + virtual int GetItemCount(void); + + // IListViewItemEventListener + virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state); + virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status); + virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction); + virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback); + + /** + * This function displays the Notification + * + * @return No return type. + * @param none. + */ + void StartMessageAppControl(void); + + /** + * This function Starts the EmailApp Control + * + * @return No return type. + * @param none. + */ + void StartEmailAppControl(void); + + + protected: + static const int IDA_CANCEL_BUTTON; + static const int ID_FORMAT_MESSAGE_STRING; + static const int ID_FORMAT_EMAIL_STRING; + static const int ID_FORMAT_FACEBOOK_STRING; + static const int ID_FORMAT_TWITTER_STRING; + + private: + Tizen::Ui::Controls::ListView* __pList; + Tizen::Base::Collection::ArrayList* __pShareList; + }; + +#endif /* INTSHAREPOPUP_H_ */ diff --git a/inc/IntTypes.h b/inc/IntTypes.h new file mode 100644 index 0000000..f8220e1 --- /dev/null +++ b/inc/IntTypes.h @@ -0,0 +1,73 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntTypes.h + *@brief: This is the header file for TableType + */ +#ifndef _INT_TYPES_H +#define _INT_TYPES_H + +#include + +static const int NB_DB_PRIMARY_KEY = -1; +static const int MAX_NB_DB_ID_LEN = 100; +static const int MAX_NB_DB_TITLE_LEN = 100000; +static const int MAX_NB_DB_CONTENT_LEN = 100000; + +static const int MAX_NOTE_TABLE_COLUMN = 15; +static const int MAX_NOTEBOOK_TABLE_COLUMN = 8; + +static const int IDA_BUTTON_NO = 1000; +static const int IDA_BUTTON_YES = 1001; + +const int DEVICE_BRIGHTNESS_CHANGE_EVENT = 994; +const int UPDATE_LIST_COMPLETE = 995; +const int UPDATE_MAINFORM_FOOTER_ON_WINDOWCLOSED = 996; +const int APPCONTROL_LAUNCH_MAX_LIMIT_REACHED = 997; +const int FORE_GROUND_APP_EVENT = 998; +const int BACK_GROUND_APP_EVENT = 999; +static const unsigned int CUSTOM_COLOR_GREY = Tizen::Graphics::Color32<124,124,124>::Value; +static const unsigned int CUSTOM_COLOR_TRANSPARENT = Tizen::Graphics::Color32<0,0,0>::Value; +static const unsigned int CUSTOM_BACKGROUND_COLOR_LISTVIEW = Tizen::Graphics::Color32<236,240,242>::Value; +static const unsigned int CUSTOM_BACKGROUND_COLOR_LISTVIEW_PRESSED_HIGHLIGHTED = Tizen::Graphics::Color32<42, 137, 194>::Value; +static const unsigned int CUSTOM_COLOR_LISTVIEW_TEXT = Tizen::Graphics::Color32<249,249,249>::Value; +static const unsigned int CUSTOM_COLOR_BROWN = Tizen::Graphics::Color32<32, 32, 32>::Value; +static const unsigned int CUSTOM_COLOR_INFO_LABEL = Tizen::Graphics::Color32<68, 68, 68>::Value; +static const unsigned int CUSTOM_BACKGROUND_COLOR_PREVIEW_PANEL = Tizen::Graphics::Color32<81,81,81>::Value; +static const unsigned int CUSTOM_BACKGROUND_COLOR_PREVIEW_PANEL_INACTIVE = Tizen::Graphics::Color32<0,0,0,20>::Value; +static const unsigned int CUSTOM_COLOR_PREVIEW_PANEL_PRESSED_RECTANGLE = Tizen::Graphics::Color32<7,180,211>::Value; +static const unsigned int CUSTOM_COLOR_LISTVIEW_TEXT2 = Tizen::Graphics::Color32<70,70,70>::Value; +static const unsigned int CUSTOM_COLOR_SETTINGS_TEXT = Tizen::Graphics::Color32<128, 128, 128>::Value; +static const unsigned int CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND = Tizen::Graphics::Color32<248, 246, 239>::Value; +static const unsigned int CUSTOM_COLOR_SETTINGS_LISTITEM_RADIO_BACKGROUND = Tizen::Graphics::Color32<220, 218, 211>::Value; +static const unsigned int CUSTOM_COLOR_SETTINGS_GROUPTITLE = Tizen::Graphics::Color32<59, 115, 182>::Value; +static const unsigned int CONTEXT_ITEM_DELETE_COLOR = Tizen::Graphics::Color32<208, 82, 82>::Value; + +enum BrowserDbTableTypes +{ + DB_TYPE_INVALID = -1, + DB_TYPE_BOOKMARKURLS, + //DB_TYPE_BOOKMARKFOLDERS, + DB_TYPE_HISTORYDATA, + DB_TYPE_FAVICON, + DB_TYPE_MAX +}; + + +#endif // _INT_TYPES_H + diff --git a/manifest.xml b/manifest.xml new file mode 100644 index 0000000..c3876f0 --- /dev/null +++ b/manifest.xml @@ -0,0 +1,107 @@ + + + kmcele1k0n + 1.0.0 + C++App + + x86 + vfpv3 + + + 2.0 + + http://tizen.org/privilege/bookmark.read + http://tizen.org/privilege/web.privacy + http://tizen.org/privilege/web.service + http://tizen.org/privilege/alarm + http://tizen.org/privilege/bookmark.write + http://tizen.org/privilege/application.launch + http://tizen.org/privilege/power + http://tizen.org/privilege/content.write + http://tizen.org/privilege/appmanager.launch + http://tizen.org/privilege/notification + + + + + + Internet + 网络 + ინტერნეტი + Internet + Браузер + Internet + Internet + Internetið + Internet + Internet + Internetas + Internet + Internet + Интернет + 瀏覽器 + Internet + Internet + Ինտերնետ + Internet + Internet + الإنترنت + Internet + Internet + İnternet + Интернет + Internet + Шолушы + Internet + 互联网 + Internet + Internet + Internet + Internet + इंटरनेट + Internet + Internet + Internet + Internet + Internet + Интернет + 網際網路 + インターネット + Internet + 인터넷 + Internet + Internett + Internet + Internet + an tIdirlíon + Internets + Internet + + + mainmenu.png + + + + http://tizen.org/appcontrol/operation/view + file + http + https + javascript + + + application/xml + image/svg+xml + text/html + http://tizen.org/appcontrol/operation/view + + + + + On + On + Off + On + + + + diff --git a/packaging/apps.Internet.spec b/packaging/apps.Internet.spec new file mode 100755 index 0000000..4b3c34e --- /dev/null +++ b/packaging/apps.Internet.spec @@ -0,0 +1,80 @@ +Name: apps.Internet +Summary: Internet application +Version: 1.0.0.1 +Release: 1 +Group: TO_BE/FILLED_IN +License: TO BE FILLED IN +Source0: %{name}-%{version}.tar.gz +BuildRequires: cmake +BuildRequires: pkgconfig(osp-content) +BuildRequires: pkgconfig(osp-appfw) +BuildRequires: osp-appfw-internal-devel +BuildRequires: pkgconfig(osp-uifw) +BuildRequires: osp-uifw-internal-devel +BuildRequires: pkgconfig(osp-media) +BuildRequires: osp-media-internal-devel +BuildRequires: pkgconfig(osp-image) +BuildRequires: osp-image-internal-devel +BuildRequires: pkgconfig(osp-net) +BuildRequires: osp-net-internal-devel +BuildRequires: pkgconfig(osp-shell) +BuildRequires: osp-shell-internal-devel +BuildRequires: pkgconfig(osp-json) +BuildRequires: pkgconfig(osp-web) +BuildRequires: pkgconfig(osp-image-core) +BuildRequires: pkgconfig(osp-locations) +BuildRequires: pkgconfig(osp-shell) +BuildRequires: pkgconfig(osp-shell-core) +BuildRequires: hash-signer + +%description +Verification application: Internet + +%prep +%setup -q + +%build +MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` +%ifarch %{ix86} +%if 0%{?simulator} +CXXFLAGS="$CXXFLAGS -D_OSP_DEBUG_ -D_OSP_X86_ -D_OSP_EMUL_" cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER} +%else +CXXFLAGS="$CXXFLAGS -D_OSP_DEBUG_ -D_OSP_X86_ " cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER} +%endif +%else +CXXFLAGS="$CXXFLAGS -D_OSP_DEBUG_ -D_OSP_ARMEL_" cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER} +%endif + +# Call make instruction with smp support +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}/usr/share/license +cp LICENSE.Flora %{buildroot}/usr/share/license/%{name} +%make_install +###### for package signing step ###### +PKG_ID=kmcele1k0n +%define tizen_sign 1 +%define tizen_sign_base /usr/apps/${PKG_ID} +%define tizen_sign_level platform +%define tizen_author_sign 1 +%define tizen_dist_sign 1 + +%post +/sbin/ldconfig +PKG_ID=kmcele1k0n +echo "/usr/etc/package-manager/backend/tpk -i /usr/apps/"${PKG_ID} +/usr/etc/package-manager/backend/tpk -i /usr/apps/${PKG_ID} +cp -f /usr/lib/osp/osp-ui-app-loader /usr/apps/${PKG_ID}/bin/Internet + +%postun +/sbin/ldconfig +PKG_ID=kmcele1k0n +echo "/usr/etc/package-manager/backend/tpk -u "${PKG_ID} +/usr/etc/package-manager/backend/tpk -u ${PKG_ID} + +%files +%defattr(-,root,root,-) +/usr/apps/* +/usr/share/license/%{name} diff --git a/res/.workflow b/res/.workflow new file mode 100644 index 0000000000000000000000000000000000000000..b7228a4f2ac78019a1bc24ec3ea969ff5579b2a1 GIT binary patch literal 260 zcmZ4UmVvdnh`~6&C|$24vnn-DFE6nqvn(~apg^xQGpRH)CndE=uROmfJ1r-_TrW32 zB{fISIWey+v6uk@7?~KDd>D9=Gk{8qQuCbi3o1((1bng*%M$fVOEPoxeKLzntbG_b zQgc#sQ}arS3mNJd7%PexOh~fR6`~tqDMLj8(BZ-$d-Oo|=s6Y@C02qgt7yC=JM(zr eTxJGFPX?A^psy+lK>EsAfCN_s*a09WOaK7zJ5X2v literal 0 HcmV?d00001 diff --git a/res/ara-AE.xml b/res/ara-AE.xml new file mode 100644 index 0000000..5e78842 --- /dev/null +++ b/res/ara-AE.xml @@ -0,0 +1,345 @@ + + + + إخطار الويب + سحب + لا توجد نتائج + 11 + لصق + إعدادات محتوى الصفحة + الإعدادات المتقدمة لمواقع ويب فردية + صفحة المستخدم الرئيسية + مدير الإطارات + تلقائي + مسح السجل + الصفحة الحالية + أغلق جميع الإطارات المفتوحة وانتقل إلى الصفحة الرئيسية + قبول ملفات تعريف الارتباط + مشاركة + الصينية (GBK) + اللاتينية-1 (ISO-8859-1) + وضع المطور + 06 + تحميل الصور + تم + الضبط + ضخم + مشكلة في الاتصال بالبيانات + 08 + ضبط الصفحة الحالية كصفحة رئيسية + الضبط + مسح + اليابانية (SHIFT JIS) + المستخدم المحفوظ وكلمة المرور + فتح + عدم السؤال مرة أخرى + حفظ للقراءة عند عدم الاتصال + إضافة Livebox + 07 + إنشاء مجلد + إضافة + مرتفعة + حفظ أسماء المستخدمين وكلمات المرور الخاصة بمواقع الويب + اليابانية (EUC-JP) + مدير التحميل + 04 + الصينية (Big5) + كبير + إعدادات موقع الويب + إغلاق الكل + تحديد العناصر + اختيار الكل + إعادة التحميل + الانتقال إلى السابق + هل تريد مسح السجل؟ + لا توجد عناصر + المجلد + تخصيص وكيل المستخدم + عرض سطح المكتب + 09 + نسخ عنوان الارتباط + فتح في صفحة جديدة + أربـ + لا يوجد علامات + إضافة علامة + عرض الصور + إرسال بالبريد الإلكتروني + غير مسموح + عرض نظرة عامة للصفحات التي تم فتحها حديثا + كبير + Picasa + عرض مختصر + البحث في الصفحة + كلمة المرور + العنوان + ترميز النص + تم المسح + الضبط + تم تحديد عنصر واحد + تصغير + البطاقات + اختيار النص فعال + مجلد جديد + مضافة إلى الإشارات المرجعية + السماح + مقروء + عرض الصور + تلقائي + 10 + منفذ الوكيل + تعديل + هل تريد حذف محفوظات المستعرض؟ + أدخل اسم المجلد + إرسال عبر رسالة + عرض حسب + ثلا + إثنـ + الإطار المتعدد + موجود مسبقا + نسخ الموقع الإلكتروني + تذكر الأفضلية + إلغاء إمكانية الوصول إلى الموقع + هل تريد حذف كافة ملفات تعريف الارتباط؟ + هل تريد حذف كل‏‫ بيانات النموذج‬ المحفوظة؟ + خطأ في الشبكة + إيقاف + البحث في الصفحة + لا توجد مواقع تمت زيارتها + سبت + تنزيل + إضافة علامة + هل تريد حذف المحتوى المخزن محليا وقواعد البيانات؟ + فشل + إغلاق إطار + وسط + الأسبوع الأخير + يتعذر عرض صفحة الويب. لا توجد استجابة من الخادم + حذف علامة مرجعية + إضافة إلى سجل القصاصات + أقدم + السابق + المزيد + نقل + أمس + وضع التحديد + بدون علامة + تم الإنشاء + أدخل بطاقة SIM + تمت إزالة العلامة + مسح إعدادات أذونات الإخطارات + مشاركة الارتباط + تعيين النص لملء نموذج الويب تلقائيا + موافق + صغير + نسخ الصورة + التوصيل الآمن + بيانات النموذج + الأكثر زيارة + اختيار + المجلد + تعذر فتح إطار جديد. تم فتح أقصى عدد من الإطارات بالفعل + السماح للمواقع بتشغيل JavaScript + تحديث تلقائي + إطار جديد + لا + السماح للمواقع بحفظ بيانات ملفات تعريف الارتباط وقراءتها + انقر نقرا مزدوجا لإغلاق العلبة. + تشغيل + تم بلوغ أقصى عدد من العلامات (%d) + يتم التحميل. يرجى الانتظار... + إلغاء + تم إلغاء تفعيل بيانات الهاتف المحمول. اتصل باستخدام شبكة Wi-Fi أو قم بتفعيل بيانات الهاتف المحمول + ملفات تعريف الارتباط + صفحة فارغة + بحث + 02 + إلغاء تفعيل الوضع الخاص + مسح الذاكرة المؤقتة + كلمة المرور + اسم المستخدم + عرض مواقع الويب المتوفرة على أجهزة الكمبيوتر على جهاز الهاتف المحمول بسهولة. تحسن هذه الميزة من حجم النص لتيسير القراءة. ملاحظة: قد يتم تغيير النص + تعديل العلامات + مسح البيانات المخزنة + هل تريد حذف جميع بيانات مواقع الويب وأذونات المواقع؟ + اختيار الكل + أبدا + حدد المجلد + آخر صفحة معروضة + خيارات المطور + اللغة المصدر + العلامات + مسح + اليوم + نعم + لصق + التالي + تتعذر الإضافة إلى الشاشة الرئيسية. موقع الويب هذا لا يسمح بمعاينته + عميل مستخدم + فشل غير متوقع + مسح أذونات إخطارات الويب؟ + أحد + تم الحفظ + انقر نقرا مزدوجا لفتح صفحة الويب. + معلومات إضافية عن صفحة الويب + عادي + تم تحديد %d عناصر + أضف للعلامات + عرض الصور + جاري بدء التنزيل... + خالي + العلامات + حجم الخط + الانتقال إلى التالي + Are you sure you want to clear history? + مسح كافة بيانات ملفات الارتباط + لم يتم حفظ محفوظات الإنترنت + حذف بيانات الاستعراض + اليابانية (ISO-2022-JP) + نسخ + اسم المجلد + منع الإطارات المنبثقة + علامات تبويب تمت مزامنتها + إضافة الى الرئيسية + حفظ + شهادة غير صالحة + وضع التصفح المتخفي + 01 + الخصوصية والأمان + طباعة + توجد مشاكل في شهادة الأمان الخاصة بهذا الموقع + السطوع + مسح؟ + حجم الخط + اكتشاف تلقائي + تذكر بيانات النموذج + مسح + إلغاء + تحذير الأمان + تنزيل؟ + ابحث عن عنوان URL أو أدخله + مسح بيانات النموذج + تذكر كلمات المرور + انتقال إلى السجلات + اليوم + رفض + الخصوصية + إنعاش + اختصار للويب + مسح كلمات المرور + ضبط كصفحة رئيسية + إلغاء + ضخم + جاري الإخطار... + Google + آخر 7 أيام + (لا يوجد بطاقات) + التشغيل دوما + المحفوظات + انقر مرة أخرى لإغلاق الإنترنت + أدخل اسم الإشارة المرجعية + مطلوب التوثيق + حفظ الارتباط + عدم الإظهار مرة أخرى + نسخ إلى الحافظة + تغيير اسم المجلد + حفظ تلقائي للمعرف/كلمة المرور + الضبط إلى جميع الإعدادات الافتراضية. متابعة؟ + الجوال + تحديد الإشارات المرجعية‬ + إغلاق + صغير + إعادة الضبط إلى الافتراضي + الكورية (EUC-KR) + LTE/GSM/WCDMA (اتصال تلقائي) + تغيير اسم البطاقة + إنشاء مجلد + الصفحة الرئيسية + الموقع الالكتروني غير صالح + عرض سطح المكتب + القائمة + لم يتم العثور على URL + عرض المحمول + فتح في إطار جديد + بريد إلكتروني + تم إنشاء اختصارا + فشل اتصال البيانات + ملء النماذج تلقائيا + السماح للمواقع بطلب الوصول إلى موقعك + خميس + إعادة تسمية المجلد + تمت الإزالة من الإشارات المرجعية + علامة + فتح الصفحات للمعاينة + ملائمة للعرض + 07 + شبكة البيانات + Unicode (UTF-8) + تمت إضافة إشارة مرجعية + المحفوظات + آخر شهر + تمت + تعديل العلامة + حذف جميع كلمات المرور المحفوظة؟ + اللائحة + إضافة لإش.مرجعية + 05 + سياسة الأمان تقيد استخدام متصفح الإنترنت + 03 + الموقع + غير قادر على إضافة علامة. وصل إلى الحد الأقصى لعدد العلامات + اسأل دائما + حفظ الصفحة + تحديد كلمة + عرض تحذيرات الأمان + إنشاء مجلد + مسح الكل + هل تريد حذف العلامات المحددة؟ + مسح البيانات المخصصة + مسح كافة بيانات المستعرض وإعادة تعيين كافة الإعدادات إلى الوضع الافتراضي + عرض الصور على صفحات الويب + القاموس + العرض الافتراضي + فرز حسب العلامة + تثبيت تطبيق الويب + حول المتصفح + تفعيل الوضع الخاص + سجل القصاصات + محرك البحث + تذكر البيانات التي قمت بكتابتها في نماذج لاستخدامها لاحقا + لا يوجد عنوان + منذ %d أسبوع + إضافة إلى الشاشة الرئيسية + تمكين الموقع + أدخل الموقع الالكتروني + يدوي + لا يوجد مواقع ماضية + تشغيل JAVAscript + يطالب %s بتحديد موقعك + جمعة + النسخة + رسالة + الذاكرة المؤقتة + تعديل + عام + الصفحات المحفوظة + السماح لـ %s بعرض الإخطارات + حظر الإطارات المنبثقة على صفحات الويب + حفظ الصورة + المواقع الأكثر زيارة + أمس + أدخل العنوان + 12 + تم مسح الكل + تم تحديد %d عنصر + يتعذر حفظ صورة + الرسائل + إعادة ترتيب + ‏‫‏‫تغيير حجم النص تلقائيا + هل تريد حذف معلومات الوصول إلى موقع الويب؟ + عرض القائمة + نقل العلامات المحددة؟ + الذاكرة لا تكفي + لا يوجد ذاكرة كافية. امسح بعض العناصر + diff --git a/res/aze-AZ.xml b/res/aze-AZ.xml new file mode 100644 index 0000000..8b3c96a --- /dev/null +++ b/res/aze-AZ.xml @@ -0,0 +1,345 @@ + + + + Veb bildiriş + Dart + Heç bir nəticə tapılmamışdır + Noy. + Yapışdır + Səhifə məzmunu parametrləri + Fərdi vebsaytlar üçün təkmil parametrlər + İstifadəçinin baş səhifəsi + PƏNCƏRƏ MENECERİ + Avtomatik + Tarixçəni sil + Cari səhifə + Açılmış bütün pəncərələri bağlayın və başlanğıc ekrana keçin + Kukiləri qəbul edin + Paylaş + Çin dili (GBK) + Latin-1 (ISO-8859-1) + Yaradıcı rejimi + İyun + Şəkilləri yükləyin + Hazırdır + Parametrlər + Nəhəng + Məlumat bağlantısı ilə əlaqədar problem + Avq + Cari səhifəni başlanğıc səhifə kimi qur + Parametrlər + Sil + Yaponca (SHIFT JIS) + Saxlanmış ID və parol + Aç + Bir də soruşma + Oflayn oxunuş üçün saxla + Livebox əlavə etmək + İyul + Qovluq yaradın + Əlavə et + Yüksək + Veb saytlar üçün istifadəçi adları və parolları saxla + Yaponca (EUC-JP) + Yükləmə meneceri + Aprel + Çin dili (Big5) + Geniş + Vebsayt parametrləri + Hamısını bağla + Elementləri seç + Hamısını seç + Yenidən yüklə + Geriyə gedin + Tarixçə silinsin? + Elementlər yoxdur + QOVLUQ + Fərdi istifadəçi agenti + İş masası görünüşü + Sent + URL linkn kopyl + Yeni səhifədə açın + Çərş. + Nişanlar yoxdur + Etiket əlavə et + Şəkil göstərlsn + Epoçt ilə göndərin + İcazə verilmir + Yeni açılmış pəncərələrin icmalını göstər + Geniş + Picasa + Miniatür görüntüsü + Səhifədə tapın + Şifrə + Başlıq + Mətn şifrələnir + Silindi + Parametrlər + 1 element seçildi + Kiçilt + Yarlıklar + Mətn seçimi qoşulub + Yeni qovluq + Əlfəcinlərə əlavə olunmuşdur + İcazə ver + Oxuna bilən + Təsvirləri göstər + Avtomatik + Okt + Proksi portu + Redaktə et + Brauzer tarixçəsi silinsin? + Qovluq adını daxil edin + Mesaj vasitəsilə göndər + Göz.keç.qayd + Ç.A. + B.e + Çoxpəncərəli + Artıq var + URL-ni kopyala + Seçimi yadda saxla + Məkana girişi sil + Bütün kukilər silinsin? + Saxlanmış bütün forma məlumatları silinsin? + Şəbəkə xətası + Dayandır + Səhifədə tapın + Daxil olunmuş saytlar yoxdur + Şən + Yüklə + Nişanı əlavə et + Lokal keş məzmunu və məlumat bazaları təmizlənsin? + Mümkün olmadı + Pəncərəni bağlayın + Orta + Keçən həftə + Veb-səhifəni göstərmək mümkün deyil. Serverdən cavab yoxdur + Əlfəcin silinsin + Dəftərə əlavə et + Köhnə + Əvvəlki + Daha çox + Göndər + Dünən + Seçim rejimi + Etiketlənməyib + Yaradıldı + Xahiş olunur SIM kart daxil edin + Əlfəcin silindi + Veb-bildirişə icazə parametrlərini sil + Linki paylaş + Veb-formanın avto-doldurulması üçün mətn təyin edin + OK + Kiçik + Şəkli köçür + Təhlükəsiz rabitə + Forma məlumatları + Ən çox baxılanlar + Seç + Qovluq + Yeni pəncərəni açmaq mümkün deyil. Maksimum sayda pəncərə artıq açılmışdır + Saytlara JavaScript icra etməyə icazə ver + Avtomatik yeniləmə + Yeni pəncərə + Xeyr + Saytlara kuki məlumatlarını saxlamağa və oxumağa imkan verir + Paneli bağlamaq üçün iki dəfə vurun + Səsləndir + Etiketlərin sayı minimuma (%d) çatıb + Yüklənir. Lütfən gözləyin... + Ləğv et + Mobil plan qeyri-aktiv edildi. Wi-Fi şəbəkədən istifadə edərək qoşulun və ya mobil planı aktiv edin + Kukilər + Boş səhifə + Axtarış + Fev. + Gizli rejimi qeyri-aktiv et + Keşi təmizlə + Şifrə + İstifadəçinin adı + Cihazınızda PC vebsaytlarına asanlıqla baxın. Bu xüsusiyyət mətni asan oxumaq üçün mətn ölçüsünü böyüdür. Qeyd: Mətn tərtibatı dəyişdirilə bilər + ƏLFƏCİNLƏRİ REDAKTƏ ET + Saxlanmış yaddaşı sil + Bütün veb-sayt məlumatları və məkan icazələri silinsin? + Hamısını seç + Heç zaman + Qovluğu seç + Son gözdən keçirilən səhifə + Yaradıcı seçimləri + Mənbə dil + Çevik keçidlər + Təmizlə + Bu gün + Bəli + Yapışdır + Növbəti + Başlanğıc ekrana əlavə etmək mümkün deyil. Bu veb-sayt önbaxışa icazə vermir + İstifadəçi agenti + Gözlənilməyən səhv oldu + Veb bildirişləri icazələri təmizlənsin? + Baz + Yaddaşa yazıldı + Veb-səhifəni açmaq üçün iki dəfə vurun + Əlavə veb-səhifə məlumatı + Normal + %d element seçildi + Nişanlara əlavə et + Şəkil göstərlsn + Yükləmə başladılır... + Boşdur + Çevik keçidlər + Şriftin ölçüsü + İrəliyə gedin + Are you sure you want to clear history? + Bütün kuki məlumatlarını silin + Internet tarixçəsi saxlanmır + Gözdən keçirmə məlumatlarını sil + Yaponca (ISO-2022-JP) + Köçür + Qovluğun adı + Peyda olan menyuları blokla + Sinxronlaşmış tablar + Başlanğıca əlavə et + Yaddaşa yaz + Sertifikat səhvdir + Anonim rejim + Yan. + Məxfilik və təhlükəsizlik + Çap et + Bu saytın təhlükəsizlik sertifikatı ilə bağlı problemlər var + Parlaqlıq + Sil? + Şriftin ölçüsü + Avto-aşkarlama + Forma məlumatını xatırlayın + Sil + Ləğv et + Təhlükəsizliyə dair xəbərdarlıq + Yüklənsin? + Axtar və ya URL daxil et + Forma məlumatlarını silin + Parolları yadda saxlayın + Tarixçəyə keç + Bu gün + Rədd etmək + Gizlilik + Təzələ + Veb-klip + Parolları silin + Ana səhifə kimi qur + Ləğv edin + Böyük + Bildirilir... + Google + Son 7 gün + (yarlık yoxdur) + Həmişə aktivdir + TARİXÇƏ + İnterneti bağlamaq üçün bir daha vurun + Əlfəcin adını daxil edin + Kimliyin müəyyən edilməsi tələb olunur + Linki saxla + Bir daha göstərmə + Mübadilə buferinə köçür + Qovluğun adını dəyişdir + ID/parolu avtomatik saxla + Bütün parametrlər standart kimi qurulsun. Davam edilsin? + Mobil + Əlfəcinləri seçin + Bağla + Kiçik + İlkin parametrə təyin et + Koreya (EUC-KR) + LTE/GSM/WCDMA (avtomatik bağlantı) + Yarlıkın adını dəyişdir + QOVLUQ YARAT + Ana səhifə + Yanlış URL + Desktop görüntüsü + Menyu + URL tapılmadı + Mobil görünüş + Yeni pəncərədə açın + Elektron poçtu + Qısa yol yaradılmışdır + Məlumat bağlantısı uğursuz oldu + Avto-doldurma formaları + Saytlara məkanınıza daxil olmağa dair sorğu göndərməyə icazə ver + C.A. + QOVLUĞUN ADINI DƏYİŞ + Əlfəcinlərdən silinmişdir + Çevik keçid silindi + Səhifələri icmalda aç + Eninə uyğunlaşdırın + İyul + Məlumat şəbəkəsi + Unikod (UTF-8) + Əlfəcin əlavə edildi + Tarix + Keçən ay + Bitdi + Nişanı redaktə et + Bütün saxlanmış parollar silinsin? + Siyahı + Əlfəcin-rə əlavə edin + May + Təhlükəsizlik siyasəti İnternet brauzerdən istifadəni məhdudlaşdırır + Mart + URL + Əlfəcini əlavə etmək olmur. Əlfəcin sayı maksimuma çatıb + Həmişə soruş + Səhifəni saxlayın + Sözü seçin + Təhlükəsizlik xəbərdarlıqlarını göstərin + Qovluq yarat + Hamısı silindi + Seçilmiş əlfəcinlər silinsin? + Fərdi məlumatların təmizlənməsi + Bütün brauzer məlumatlarını silin və bütün parametrləri standart şəkildə qurun + Veb səhifələrdə şəkilləri nümayiş etdirin + Lüğət + Standart görünüş + Etiketə görə sırala + Veb proqramı yüklə + Brauzer haqqında + Gizli rejimi aktivləşdir + Dəftər + Axtarış mexanizmi + Mənim formalarda yazdığım məlumatları daha sonra istifadə etmək üçün xatırla + Başlıq yoxdur + %d həftə əvvəl + Ana ekrana əlavə et + Məkanı aktivləşdir + URL daxil et + Ələ işlət + Tarix yoxdur + JavaScript-i işə sal + %s məkanınızı sorğulayır + Cümə + Versiya + Mesaj + Keş + Redaktə et + Ümumi + Yaddaşa yazılmış səhifələr + Bağlantıları göstərməyə %s -a icazə ver + Veb səhifələrdə ani bildirişləri blokla + Təsviri yaddaşa yaz + Ən çox daxil olunan saytlar + Dünən + Başlığı daxil et + Dek + Hamısı silindi + %d element seçildi + Şəkli saxlamaq mümkün deyil + Mesajlar + Yenidən nizamla + Mətn ölçüsünü avtmatik dəyiş + Veb-saytın yerinə daxilolma məlumatları silinsin? + Siyahı görünüşü + Seçilmiş əlfəcinlərin yeri dəyişdirilsin? + Yaddaş kifayət etmir + Yaddaş kifayət etmir. Xahiş olunur bəzi elementləri silin + diff --git a/res/bul-BG.xml b/res/bul-BG.xml new file mode 100644 index 0000000..39fb04e --- /dev/null +++ b/res/bul-BG.xml @@ -0,0 +1,345 @@ + + + + Уеб уведомяване + Плъзгане + Няма намерени резултати + Ное + Поставяне + Настр.съдържание страници + Разширени настройки за отделни уеб сайтове + Потребителска начална страница + УПРАВЛ. НА ПРОЗОРЦИ + Авто + Изтриване на хронология + Текуща страница + Затворете всички отворени прозорци и отидете в началната страница + Приемане на бисквитки + Споделям + Китайски (GBK) + Latin-1 (ISO-8859-1) + Режим за разработчици + Юни + Зареждане на изображения + Готово + Настройки + Гигантски + Проблем със свързването за данни + Авг. + Задаване на текущата страница като начална страница + Настройки + Изтрий + Японски (SHIFT JIS) + Запаметени име и парола + Отваряне + Не питай повече + Записване за офлайн четене + Добавяне на Кутия на живо + Юли + Създай папка + Добавяне + Висок + Записвай потребителските имена и паролите за уеб сайтовете + Японски (EUC-JP) + Диспечер на изтеглянето + Април + Китайски (Big5) + Едър + Настройки на уеб сайт + Затвори всички + Изберете елементи + Избери всички + Презареждане + Връщане назад + Изчистване на хронологията? + Няма елементи + ПАПКА + Потребителски агент по избор + Изглед на работен плот + Сеп. + Копиране на URL + Отвори в нова стр. + Ср + Няма показалци + Добавяне на таг + Покажи изображ. + Изпращане чрез email + Не е разрешено + Показвай обзор на новоотворените страници + Едър + Picasa + Екран миниатюри + Търсене в стр. + Парола + Заглавие + Кодиране на текста + Изтрито + Настройки + Избран е 1 елемент + Минимизиране + Тагове + Избор на текст включен + Ръчно + Добавено към показалците + Разрешаване + Четима + Покажи изображения + Автоматично + Окт. + Порт за прокси + Редактиране + Изтриване на хронологията на браузъра? + Въведете име на папка + Изпращане като съобщение + Прегл. по + Вт + Пон + Множ. прозорец + Вече съществува + Копиране на URL + Запомни предпочитанията + Изчистване на достъпа до местоположения + Желаете ли да изтриете всички бисквитки? + Изтриване на всички запаметени данни за формуляри? + Грешка на мрежата + Спри + Търсене в стр. + Няма посещавани сайтове + Съб + Изтегляне + Добавяне на показалец + Изтриване на локално кешираното съдържание и бази данни? + Неуспешно + Затвори прозореца + Среден + Последна седмица + Уебстраницата не може да се покаже. Няма отговор от сървъра + Изтрий маркера + Добавяне в скицника + По-стари + Предиш. + Още + Премести + Вчера + Режим на избор + Без тагове + Създадено + Поставете SIM карта + Показалецът е премахнат + Изчистване на настройките за разрешения за уеб уведомявания + Споделяне на връзка + Задаване на текст за авто-попълване на уеб формуляр + OK + Малък + Копиране на изображение + Защитена връзка + Данни за формуляра + Най-често посещавани + Избор + Папка + Не може да се отвори нов прозорец. Достигнат е максималният брой вече отворени прозорци + Разрешаване на сайтовете да изпълняват JavaScript + Автоматично опресняване + Нов прозорец + Не + Разрешава на сайтове да запаметяват и четат данни от бисквитки + Чукнете двукратно, за да затворите областта. + Изпълняване + Достигнат е максималният брой тагове (%d) + Зареждане. Моля, изчакайте... + Отмени + Мобилните данни са деактивирани. Свържете се с Wi-Fi мрежа или активирайте мобилни данни + Бисквитки + Празна страница + Търси + Фев. + Деактивиране на личен режим + Изчистване на кеша / Изчисти кеша + Парола + Потребителско име + Преглеждайте компютърни уебсайтове лесно на вашето мобилно устройство. Тази функция увеличава размера на текста, за да е по-лесен за четене. Забележка: оформлението на текста може да се променя + РЕДАКТИРАНЕ НА ПОКАЗАЛЦИ + Изчистване на съхранени данни + Изтриване на всички данни за уеб сайтове и разрешения за местоположение? + Избери всички + Никога + Изберете папка + Последно отваряна страница + Опции за разработчици + Изходен език + Показалци + Изчиств. + Днес + Да + Поставяне + Следващ + Не може да се добави към началния екран. Уеб сайтът не позволява предварителен преглед + Потребителски агент + Неочаквана грешка + Изчистване на разрешенията за уеб уведомявания? + Нед + Записан + Чукнете двукратно, за да отворите уеб страницата. + Доп. инфо за уеб страница + Нормален + Избрани са %d елемента + Добави към маркери + Покажи изображ. + Начало на изтеглянето... + Празно + Показалци + Размер на шрифта + Отиване напред + Are you sure you want to clear history? + Изчистване на всички данни от бисквитки + Интернет историята не се съхранява + Изтрий данните на браузъра + Японски (ISO-2022-JP) + Копиране + Име на папка + Блокирай изскачащи прозорци + Синхронизи-рани раздели + Добави към началния екран + Запази + Невалиден сертификат + Инкогнито режим + Ян + Поверителност и защита + Отпечатване + Има проблеми със сертификата за защита за този сайт + Яркост + Изтрий? + Размер на шрифта + Автоматично разпознаване + Запомняне на данни за формуляри + Изтрий + Отказ + Предупреждение за защита + Изтегляне? + Потърсете или въведете URL + Изчистване на данни за формуляри + Запомняне на паролите + Към история + Днес + Отказвам + Поверителност + Опресняване + Уеб клип + Изчисти паролите + Задаване като начална страница + Отказ + Много голям + Известяване... + Google + Последните 7 дни + (без тагове) + Винаги включено + ИСТОРИЯ + Чукнете още веднъж, за да затворите Интернет + Въведете име на показалец + Изисква се удостоверяване + Записване на връзка + Не показвай повече + Копирай в клипборда + Преименуване на папка + ИД/парола за автоматично запаметяване + Всички стойности по подразбиране. Продължаване? + Мобилен + Избор на показалци + Затваряне + Малък + Нулиране до стойности по подразбиране + Корейски (EUC-KR) + LTE/GSM/WCDMA (авто-свързване) + Преименуване на таг + СЪЗДАВАНЕ НА ПАПКА + Начална страница + Невалиден URL + Екран изглед + Меню + URL не е открит + Мобилен изглед + Отв. в нов прозорец + Email + Създаден е бърз клавиш + Неуспешна връзка за данни + Формуляри за авто попълв. + Разрешаване на сайтовете да искат достъп до вашето местоположение + Чтв + ПРЕИМЕНУВАНЕ НА ПАПКА + Премахнато от показалците + Показалец + Отв.стр.в предв.преглед + Побиране в ширината + Юли + Мрежа за данни + Unicode (UTF-8) + Добавен е маркер + Хронология + Последен месец + Готово + Редактиране на показалец + Изтриване на всички запаметени пароли? + Списък + Добави към Показалци + Май + Правилата за защита ограничават използването на браузър за Интернет + Март + URL + Не може да се добави показалец. Достигнат е максималният брой показалци + Винаги питай + Запиши страницата + Избор на дума + Показване на предупрежденията за защита + Създаване на папка + Изтриване на всички + Изтриване на избраните показалци? + Изчистване на персонализирани данни + Изчистване на всички данни на браузъра и връщане на настройките по подразбиране + Показване на изображенията на уеб страниците + Речник + Изглед по подразбиране + Сортиране по таг + Инсталиране на уеб приложение + За браузъра + Активиране на личен режим + Скицник + Търсачка + Запомняне на данните, които въвеждам във формулярите, за употреба по-късно + Няма заглавие + преди %d седмици + Добавяне към началния екран + Активиране на местоположение + Въведете URL + Ръчно + Няма история + Изпълнение на JavaScript + %s иска вашето местоположение + Пет + Версия + Съобщение + Кеш + Редактиране + Общи + Записани страници + Разрешаване на %s да показва уведомявания + Блокиране на изскачащи прозорци на уеб страници + Запис на изображение + Най-посещавани сайтове + Вчера + Въведете заглавие + Дек. + Всички са изтрити + Избран е %d елемент + Не може да запази изображение + Съобщения + Пренареждане + Авто. преоразмер. на текст + Изтриване на информацията за достъп до местоположение на уеб сайт? + Преглед на списък + Преместване на избраните показалци? + Няма достатъчно памет + Няма достатъчно памет. Изтрийте някои елементи + diff --git a/res/cat-ES.xml b/res/cat-ES.xml new file mode 100644 index 0000000..2672374 --- /dev/null +++ b/res/cat-ES.xml @@ -0,0 +1,345 @@ + + + + Notificació web + Arrossegar + No s'han trobat resultats + Nov. + Enganxar + Ajustam contingut pàgina + Ajustaments avançats de llocs web individuals + Pàgina d'inici d'usuari + GESTOR DE FINESTRES + Auto + Esborrar historial + Pàgina actual + Tanqui totes les finestres obertes i vagi a la pàgina d'inici + Acceptar cookies + Compartir + Xinès (GBK) + Llatí-1 (ISO-8859-1) + Mode de programador + Juny + Carregar imatges + Finalitzat + Ajustaments + Gegant + Problema de connectivitat de dades + Ago. + Establir la pàgina actual com a pàgina d'inici + Ajustaments + Esborrar + Japonès (SHIFT JIS) + ID i contrasenya desats + Obrir + No ho tornis a preguntar + Desar per a lectura fora de línia + Afegir Livebox + Juliol + Crear carpeta + Afegir + Alta + Desar noms d'usuari i contrasenyes per a llocs web + Japonès (EUC-JP) + Administrador de descàrregues + Abril + Xinès (Big5) + Gran + Ajustaments de lloc web + Tancar tot + Seleccionar elements + Seleccioni-ho tot + Recarregar + Anar enrere + Netejar l'historial? + No hi ha elements + CARPETA + Personalitzar agent d'usuari + Vista d'escriptori + Set. + Copiar URL enll + Obrir en pàg nova + Dc. + No hi ha preferits + Afegir etiqueta + Veure imatge + Enviar per correu electrònic + No permès + Mostrar descripció general de les pàgines obertes recentment + Gran + Picasa + Vista de miniatura + Cercar a pàgina + Contrasenya + Títol + Codificació del text + Esborrat + Ajustaments + 1 element seleccionat + Minimitzar + Etiquetes + Selecció de text activada + Carpeta nova + Afegit a Preferits + Permetre + Llegible + Mostrar imatges + Automàtica + Oct. + Port de servidor intermediari + Editar + Esborrar historial de navegació? + Introduir nom de carpeta + Enviar a través de missatge + Veure per + Dm. + Dl. + Finestr múltip + Ja existeix + Copiar URL + Recordar preferència + Esborrar accés d'ubicació + Eliminar totes les cookies? + Esborrar totes les dades de formularis desades? + Error de xarxa + Aturar + Cercar a pàgina + Llocs no visitats + Ds. + Descarregar + Afegir preferit + Esborrar les bases de dades i el contingut en memòria cau local? + Error + Tancar finestra + Mitjana + Setmana passada + No es pot mostrar la pàgina web. No hi ha resposta del servidor + Esborrar preferit + Afegir llibre esbossos + Més antic + Anterior + Més + Moure + Ahir + Mode selecció + Sense etiqueta + Creat + Introduir targeta SIM + Preferit eliminat + Esborrar ajustaments de permisos de notificacions web + Compartir enllaç + Definir text per a l'emplenament automàtic de formularis web + Acceptar + Petit + Copiar la imatge + Connexió segura + Dades del formulari + Més visitades + Seleccionar + Carpeta + No es pot obrir una finestra nova. S'ha obert el nombre màxim de finestres + Permetre als llocs executar JavaScript + Actualitzar automàticament + Nova finestra + No + Permet als llocs desar i llegir dades de cookies + Toqui dos cops per tancar la safata. + Reproduir + S'ha assolit el nombre màxim d'etiquetes (%d) + Carregant. Esperi... + Cancel·lar + Dades mòbils deshabilitades. Connecti mitjançant xarxa Wi-Fi o habiliti dades mòbils + Cookies + Pàgina buida + Cercar + Feb. + Deshabilitar mode privat + Esborrar memòria cau + Contrasenya + Nom d'usuari + Vegi els llocs webs del PC fàcilment al seu dispositiu mòbil. Aquesta funció augmenta la mida del text per fer-lo més fàcil de llegir. Nota: pot canviar el disseny + EDITAR PREFERITS + Esborrar dades emmagatzemades + Esborrar totes les dades de lloc web i permisos d'ubicació? + Seleccioni-ho tot + Mai + Seleccionar carpeta + Última pàgina vista + Opcions de programador + Idioma d'origen + Preferits + Esborrar + Avui + Sí + Enganxar + Següent + No es pot afegir a la pantalla d'inici. Aquest lloc web no permet la seva previsualització + Agent d'usuari + Error imprevist + Esborrar permisos de notificacions web? + Dg. + Desat + Toqui dos cops per obrir la pàgina web. + Info pàgina web addicional + Normal + %d elements seleccionats + Afegir a Preferits + Veure imatge + S'està iniciant la descàrrega... + Buit + Preferits + Mida de font + Anar endavant + Are you sure you want to clear history? + Esborrar totes les dades de cookies + No emmagatzemant historial Internet + Esborrar dades de navegació + Japonès (ISO-2022-JP) + Copiar + Nom carpeta + Bloquejar finestres emergents + Pestanyes sincronitz + Afegir a l'inici + Desar + Certificat no vàlid + Mode d'incògnit + Gen. + Privadesa i seguretat + Imprimir + Hi ha problemes amb el certificat de seguretat d'aquest lloc + Brillantor + Esborrar? + Mida de font + Detectar automàticament + Recordar dades de formularis + Esborrar + Canc + Avís de seguretat + Descarregar? + Cerqui o introdueixi URL + Esborrar dades de formularis + Recordar contrasenyes + Anar a l'historial + Avui + Refusar + Confidencialitat + Actualitzar + Clip web + Esborrar contrasenyes + Definir com a pàgina d'inici + Cancel + Enorme + Notificant... + Google + Els últims 7 dies + (no hi ha etiquetes) + Sempre activat + HISTÒRIA + Toqui un cop més per tancar Internet + Introdueixi el nom del preferit + Es requereix autenticació + Desar enllaç + No tornar a most. + Copiar al porta-retalls + Canviar nom de carpeta + Desar automàticament l'ID/contrasenya + Tots els ajustaments als valors predeterminats. Continuar? + Mòbil + Seleccionar els preferits + Tancar + Petit + Restablir a predeterminat + Coreà (EUC-KR) + LTE/GSM/WCDMA (connectar automàticament) + Canviar nom d'etiqueta + CREAR CARPETA + Pàgina d'inici + URL no vàlida + Vista d'escriptori + Menú + No s'ha trobat l'URL + Vista de mòbil + Obrir nova finestra + Correu electrònic + S'ha creat l'accés directe + Error de connexió de dades + Emplenar formularis auto + Permetre que els llocs sol·licitin accés a la seva ubicació + Dj. + CANVIAR NOM CARPETA + Esborrat dels preferits + Preferit + Obrir pàg en desc gral + Adaptar a l'amplada + Jul. + Xarxa de dades + Unicode (UTF-8) + Preferit afegit + Historial + Mes passat + Finalit. + Editar preferit + Esborrar totes les contrasenyes desades? + Llista + Afegir a Preferits + Maig + La política de seguretat restringeix l'ús del navegador d'Internet + Mar. + URL + No es pot afegir preferit. S'ha assolit el nombre màxim de preferits + Preguntar sempre + Desar pàgina + Seleccionar paraula + Mostrar advertiments de seguretat + Crear carpeta + Esborrar-ho tot + Esborrar els preferits seleccionats? + Esborrar dades personals + Esborrar totes les dades del navegador i restablir tots els ajustaments als valors predeterminats + Mostrar imatges a pàgines web + Diccionari + Vista predeterminada + Ordenar per etiqueta + Instal·lar aplicació web + Sobre el navegador + Habilitar mode privat + Llibre d'esbossos + Cercador + Recordar les dades que escric als formularis per a usos posteriors + Sense títol + fa %d setmanes + Afegir a pantalla d'inici + Habilitar ubicació + Introdueixi URL + Manual + No hi ha historial + Executar JavaScript + %s sol·licita la seva ubicació + Dv. + Versió + Missatge + Memòria cau + Editar + General + Pàgines desades + Permetre que %s mostri notificacions + Bloquejar finestres emergents a pàgines web + Desar imatge + Llocs més visitats + Ahir + Introduir títol + Des. + Tot esborrat + %d element seleccionat + No es pot desar la imatge + Missatges + Tornar a ordenar + Canviar mida text auto + Esborrar la informació d'accés d'ubicació del lloc web? + Vista de llista + ¿Moure els preferits seleccionats? + No hi ha prou memòria + No hi ha prou memòria. Esborrar-ne alguns elements + diff --git a/res/ces-CZ.xml b/res/ces-CZ.xml new file mode 100644 index 0000000..592cd29 --- /dev/null +++ b/res/ces-CZ.xml @@ -0,0 +1,345 @@ + + + + Webové oznamování + Přetáhnout + Nebylo nic nalezeno + Lis + Vložit + Nastavení obsahu stránky + Rozšířená nastavení pro jednotlivé webové stránky + Domovská stránka uživatele + SPRÁVCE OKEN + Automaticky + Smazat historii + Aktuální stránka + Zavře všechna okna a přejde na domovskou stránku + Povolit cookies + Sdílet + Čínština (GBK) + Latin-1 (ISO-8859-1) + Vývojářský režim + Červen + Načíst obrázky + Hotovo + Nastavení + Obří + Potíže s datovým připojením + Srp + Nastavit aktuální stránku jako domovskou + Nastavení + Odstr + Japonsky (SHIFT JIS) + Uložené ID a heslo + Otevřít + Příště se neptat + Uložit pro čtení offline + Přidat Livebox + Červenec + Vytvořit složku + Přidat + Vysoká + Umožňuje uložit uživatelská jména a hesla pro webové servery + Japonsky (EUC-JP) + Správce stahování + Duben + Čínština (Big5) + Velké + Nastavení webového serveru + Zavřít vše + Vyberte položky + Vybrat vše + Načíst znovu + Zpátky + Smazat historii? + Žádné položky + SLOŽKA + Vlastní uživatelský agent + Zobrazení pro počítač + Zář + Kop. URL odkazu + Otev. v novém okně + St + Žádné záložky + Přidat značku + Zobr. obrázek + Odeslat pomocí e-mailu + Není povoleno!! + Zobrazit přehled nově otevřených stránek + Velké + Picasa + Zobrazení miniatur + Najít na str. + Heslo + Název + Kódování textu + Odstraněno + Nastavení + Byla vybrána 1 položka + Minimalizovat + Značky + Zapnout výběr textu + Nová složka + Přidáno do záložek + Povolit + Čitelný + Zobrazit obrázky + Automaticky + Říj + Port serveru proxy + Upravit + Odstranit historii prohlížeče? + Zadejte název složky + Odeslat prostřednictvím zprávy + Zobr. podle + Út + Po + Více oken + Již existuje + Kopírovat adresu URL + Zapamatovat preference + Zrušit přístup k informacím o poloze + Odstranit všechny soubory cookie? + Odstranit všechna data uloženého formuláře? + Chyba sítě + Zastavit + Najít na str. + Žádné navštívené stránky + So + Stáhnout + Přidat záložku + Odstranit obsah a databáze uložené v místní paměti? + Nezdařilo se + Zavřít okno + Střední + Poslední týden + Webovou stránku není možné zobrazit. Server neodpovídá + Odstranit záložku + Přidat do alba výstř. + Starší + Předchozí + Další + Přesunout + Včera + Režim výběru + Neoznačeno + Vytvořeno + Vložte SIM kartu + Záložka byla odebrána + Smazat nastavení oprávnění k webovému oznamování + Sdílet odkaz + Nastavte text pro automatické vyplnění webového formuláře + OK + Malé + Kopírovat obrázek + Zabezpečené připojení + Data formuláře + Nejnavštěvovanější + Vybrat + Složka + Nelze otevřít nové okno. Bylo dosaženo maximálního počtu otevřených oken + Povolit serverům spouštět JavaScript + Automatická aktualizace + Nové okno + Ne + Umožní serverům ukládat a číst data cookie + Poklepáním zavřete panel. + Přehrát + Bylo dosaženo maximálního počtu značek (%d) + Načítání. Počkejte prosím... + Zrušit + Mobilní data byla zakázána. Připojte se pomocí Wi-Fi nebo povolte mobilní data + Soubory cookie + Prázdná stránka + Hledat + Úno + Vypnout režim soukromí + Vyprázdnit vyrovnávací paměť + Heslo + Uživatelské jméno + Umožňuje snadno zobrazit počítačové webové stránky v mobilním zařízení. Tato funkce zvětší velikost textu, aby byl lépe čitelný. Poznámka: Rozložení textu se může změnit + UPRAVIT ZÁLOŽKY + Vymazat uložená data + Chcete odstranit všechna data na webovém serveru a oprávnění k zjišťování polohy? + Vybrat vše + Nikdy + Vybrat složku + Poslední zobrazená stránka + Vývojářské možnosti + Zdrojový jazyk + Záložky + Vymazat + Dnes + Ano + Vložit + Další + Nelze přidat na domovskou obrazovku. Webová stránka neumožňuje zobrazit náhled + Uživatelský agent + Neočekávaná chyba + Chcete smazat oprávnění k webovému oznamování? + Ne + Uloženo + Poklepáním otevřete webovou stránku. + Další info o webové stránce + Normální + Vybrané položky: %d + Přidat záložku + Zobr. obrázek + Spouští se stahování... + Prázdný + Záložky + Velikost písma + Dopředu + Are you sure you want to clear history? + Vymazat všechna data cookie + Historie Internetu se neuloží + Odstranit data z procházení + Japonsky (ISO-2022-JP) + Kopírovat + Název složky + Blokovat autom. otevíraná okna + Synchroniz. karty + Přidat do domů + Uložit + Neplatný certifikát + Režim inkognito + Led + Ochrana osobních údajů a zabezpečení + Tisk + Došlo k potížím s certifikátem zabezpečení pro tento server + Jas + Odstranit? + Velikost písma + Automatické rozpoznání + Zapamatovat data formuláře + Odstranit + Zruš. + Upozornění zabezpečení + Stáhnout? + Vyhledejte nebo zadejte adresu URL + Vymazat data formuláře + Zapamatovat hesla + Přejít na historii + Dnes + Odmítn. + Soukromí + Obnovit + Výřez z webu + Vymazat hesla + Nastavit jako domovskou stránku + Zrušit + Velmi velké + Probíhá oznamování... + Google + Posledních 7 dnů + (žádné značky) + Vždy zapnuto + HISTORIE + Dalším klepnutím zavřete Internet + Zadejte název záložky + Je vyžadováno ověření + Uložit odkaz + Znovu nezobrazovat + Kopírovat do schránky + Přejmenovat složku + Automatické uložení ID/hesla + Obnovit výchozí hodnoty všech nastavení. Chcete pokračovat? + Mobil + Vyberte záložky + Zavřít + Malé + Obnovit výchozí nastavení + Korejština (EUC-KR) + LTE/GSM/WCDMA (automaticky připojit) + Přejmenovat značku + VYTVOŘIT SLOŽKU + Domovská stránka + Neplatná adresa URL + Plocha + Menu + Adresa URL nenalezena + Mobilní zobrazení + Otevřít v novém okně + E-mail + Zástupce byl vytvořen + Chyba datového připojení + Autom. vyplnění formulářů + Povolit stránkám požadovat informace o vaší poloze + Čt + PŘEJMENOVAT SLOŽKU + Odstraněno ze záložek + Záložka + Ot. stránky v přehledu + Přizpůsobit na šířku + Čvc + Datová síť + Unicode (UTF-8) + Záložka přidána + Historie + Poslední měsíc + Hotovo + Upravit záložku + Odstranit všechna uložená hesla? + Seznam + Přidat do Záložek + Kvě + Zásady zabezpečení omezují použití internetového prohlížeče + Bře + URL + Záložku nelze přidat. Bylo dosaženo maximálního počtu záložek + Vždy zobrazit dotaz + Uložit stránku + Vybrat slovo + Zobrazit upozornění zabezpečení + Vytvořit složku + Odstranit vše + Odstranit vybrané záložky? + Smazat přizpůsobená data + Vymazat všechna data prohlížeče a obnovit všechna výchozí nastavení + Zobrazovat obrázky na webových stránkách + Slovník + Výchozí zobrazení + Seřadit podle značky + Instalovat webovou aplikaci + O prohlížeči + Zapnout režim soukromí + Album výstřižků + Vyhledávač + Zapamatovat údaje zapisované do formulářů pro pozdější použití + Žádný název + Před %d týdny + Přidat na dom. obrazovku + Povolit informace o poloze + Zadat adresu URL + Ručně + Žádná historie + Spustit JavaScript + %s požaduje informace o vaší poloze + Pá + Verze + Zpráva + Paměť + Upravit + Obecné + Uložené stránky + Povolit %s zobrazit oznamování + Blokovat automaticky otevíraná okna na webových stránkách + Uložit obrázek + Nejnavštěvovanější stránky + Včera + Zadat název + Pro + Vše odstraněno + Je vybrána %d položka + Nelze uložit obrázek + Zprávy + Změnit uspořádání + Autom. změna velikosti textu + Odstranit informace o přístupu k umístění webové stránky? + Seznam + Přesunout vybrané záložky? + Nedostatek paměti + Nedostatek paměti. Odstraňte některé položky + diff --git a/res/dan-DK.xml b/res/dan-DK.xml new file mode 100644 index 0000000..d080a9b --- /dev/null +++ b/res/dan-DK.xml @@ -0,0 +1,345 @@ + + + + Internetmeddelelse + Træk + Ingen resultater fundet + Nov + Indsæt + Indst. for sideindhold + Avancerede indstillinger for individuelle websteder + Brugers startside + STYRING AF VINDUE + Auto + Ryd historik + Aktuel side + Luk alle åbnede vinduer, og gå til startsiden + Acceptér cookies + Del + Kinesisk (GBK) + Latin-1 (ISO-8859-1) + Udviklertilstand + Juni + Indlæs billeder + Udført + Indstillinger + Gigantisk + Dataforbindelsesproblem + Aug + Indstil aktuel side som hjemmeside + Indstillinger + Slet + Japansk (SHIFT JIS) + Gemte ID og adgangskode + Åbn + Spørg ikke igen + Gem for at læse offline + Tilføj Livebox + Juli + Opret mappe + Tilføj + Høj + Gem brugernavne og adgangskoder til websteder + Japansk (EUC-JP) + Downloadstyring + April + Kinesisk (Big5) + Stor + Webside indstillinger + Luk alle + Vælg elementer + Vælg alle + Genindlæs + Gå tilbage + Vil du tømme historikken? + Ingen elementer + MAPPE + Tilpas brugeragent + Skrivebordsvisning + Sep + Kopiér link-URL + Åbn på ny side + Ons + Ingen bogmærker + Tilføj kode + Vis billede + Send via e-mail + Ikke tilladt + Vis oversigt over netop åbnede sider + Stor + Picasa + Miniaturevisning + Find på side + Adgangskode + Titel + Tekstkodning + Slettet + Indstillinger + 1 element valgt + Minimér + Tags + Tekstmarkering til + Ny mappe + Føjet til bogmærker + Tillad + Læsbar + Vis billeder + Automatisk + Okt + Proxy-port + Redigér + Slet browseroversigt? + Angiv mappenavn + Send via meddelelse + Vis som + Tir + Man + Multi-vindue + Findes allerede + Kopiér URL + Husk præference + Ryd placeringsadgang + Slet alle cookies? + Slet alle gemte formulardata? + Netværksfejl + Stop + Find på side + Ingen besøgte steder + Lør + Overførsel + Tilføj bogmærke + Slet lokalt gemt indhold og databaser? + Mislykkedes + Luk vindue + Mellem + Sidste uge + Kan ikke vise hjemmesiden. Intet svar fra serveren + Slet bogmærke + Føj til scrapbog + Ældre + Forrige + Mere + Flyt + I går + Valgtilstand + Ikke-tagget + Oprettet + Indsæt SIM-kort + Bogmærke fjernet + Slet indstillinger for tilladelser for webmeddelelse + Del link + Angiv tekst til automatisk udfyldning af web-formular + OK + Lille + Kopiér billede + Sikker forbindelse + Formulardata + Mest besøgte + Vælg + Mappe + Kunne ikke åbne nyt vindue. Det maksimale antal vinduer er allerede åbnet + Tillad steder at køre JavaScript + Automatisk opdatering + Nyt vindue + Nej + Tillad steder at gemme og læse cookie-data + Dobbelttap for at lukke bakken. + Afspil + Det maksimale antal mærker (%d) er nået + Indlæser. Vent... + Annullér + Mobile opkald deaktiveret. Opret forbindelse ved hjælp af Wi-Fi-netværk, eller aktivér mobildata + Cookies + Tom side + Søg + Feb + Deaktivér privattilstand + Ryd cache + Adgangskode + Brugernavn + Se pc-websteder nemt på din mobile enhed. Denne funktion booster tekststørrelsen for at gøre den nemmere at læse. Bemærk: Tekstlayoutet kan være ændret + REDIGÉR BOGMÆRKER + Ryd lagrede data + Slet alle webstedsdata og placeringstilladelser? + Vælg alle + Aldrig + Vælg mappe + Senest viste side + Udviklingsindstillinger + Kildesprog + Bogmærker + Slet + I dag + Ja + Indsæt + Næste + Kan ikke føje til startskærmen. Dette websted tillader ikke eksempelvisning. + Brugeragent + Uventet fejl + Slet tilladelser for webmeddelelse? + Søn + Gemt + Dobbeltap for at åbne websiden. + Ekstra websideinfo + Normal + %d elementer valgt + Føj til Bogmærker + Vis billede + Starter download... + Tom + Bogmærker + Skriftstørrelse + Gå fremad + Are you sure you want to clear history? + Tøm alle cookie data + Internethistorik ikke lagret + Slet browserdata + Japansk (ISO-2022-JP) + Kopiér + Mappenavn + Blokér pop op-vinduer + Synkroniserede faner + Føj til start + Gem + Ugyldigt certifikat + Inkognito-tilstand + Jan + Fortrolighed og sikkerhed + Udskriv + Der er problemer med sikkerhedscertifikatet for dette websted + Lysstyrke + Slet? + Skriftstørrelse + Automatisk søgning + Husk formulardata + Slet + Afbr. + Sikkerhedsadvarsel + Download? + Søg eller angiv URL + Tøm formulardata + Husk adgangskoder + Gå til oversigt + I dag + Afvis + Beskyttelse + Opdatér + Web-klip + Slet adgangskoder + Angiv som hjemmeside + Annullér + Meget stor + Giver besked... + Google + Seneste 7 dage + (ingen koder) + Altid til + HISTORIK + Tap én gang til for at lukke Internet + Indtast bogmærkenavn + Godkendelse påkrævet + Gem link + Vis aldrig igen + Kopiér til udklipsholder + Omdøb mappe + Automatisk lagring af id/adgangskode + Alle indstillinger til standard. Vil du fortsætte? + Mobil + Vælg bogmærker + Luk + Lille + Nulstil til standard + Koreansk (EUC-KR) + LTE/GSM/WCDMA (tilslut automatisk) + Omdøb navn + OPRET MAPPE + Startside + Ugyldig URL + Skrivebordsvisning + Menu + URL ikke fundet + Mobil visning + Åbn i et nyt vindue + E-mail + Genvej oprettet + Datatilslutning mislykkedes + Aut. udf. af formularer + Tillad websteder at anmode om adgang til din placering + Tor + OMDØB MAPPE + Fjernet fra bogmærker + Bogmærke + Åbn sider i oversigt + Tilpas til bredden + Jul. + Datanetværk + Unicode (UTF-8) + Bogmærke tilføjet + Oversigt + Sidste måned + Udført + Redigér bogmærke + Vil du slette alle gemte adgangskoder? + Liste + Føj til bogmærker + Maj + Sikkerhedspolitik begrænser brug af internetbrowser + Mar + URL + Bogmærket kunne ikke tilføjes. Det maksimale antal bogmærker er nået + Spørg altid + Gem siden + Vælg ord + Vis sikkerhedsadvarsler + Opret mappe + Slet alle + Slet de valgte bogmærker? + Slet tilpassede data + Tøm alle browserdata, og nulstil alle indstillinger til standardindstillingen + Vis billeder på websider + Ordbog + Standardvisning + Sortér efter mærke + Installér webprogram + Om browser + Aktivér privattilstand + Scrapbog + Søgemaskine + Husk data, som jeg indtaster i formularer, til senere brug + Ingen titel + %d uger siden + Føj til startskærm + Aktivér placering + Angiv URL-adresse + Manuelt + Ingen oversigt + Kør JavaScript + %s anmoder om din placering + Fre + Version + Meddelelse + Cache + Redigér + Generelt + Gemte sider + Tillad, at %s viser meddelelser + Blokér pop op-vinduer på websider + Gem billede + Mest besøgte steder + I går + Angiv titel + Dec + Slettede alle + %d element valgt + Billedet kan ikke gemmes + Meddelelser + Skift rækkefølge + Ændr tekstens størrelse aut. + Slet informationer om placeringsadgang for websted? + Listevisning + Vil du flytte de valgte bogmærker? + Ikke nok hukommelse + Der er ikke tilstrækkelig hukommelse. Slet nogle elementer + diff --git a/res/deu-DE.xml b/res/deu-DE.xml new file mode 100644 index 0000000..68d8257 --- /dev/null +++ b/res/deu-DE.xml @@ -0,0 +1,345 @@ + + + + Web-Benachrichtigung + Ziehen + Keine Ergebnisse gefunden + Nov. + Einfügen + Seiteninhaltseinstellungen + Erweiterte Einstellungen für individuelle Webseiten + Benutzer-Startseite + FENSTER-MANAGER + Auto + Verlauf löschen + Aktuelle Seite + Alle geöffneten Fenster schließen und zur Startseite wechseln. + Cookies akzeptieren + Senden + Chinesisch (GBK) + Latin-1 (ISO-8859-1) + Entwickler-Modus + Juni + Bilder laden + OK + Einstellungen + riesig + Problem mit Datenverbindung + Aug. + Aktuelle Seite als Startseite festlegen + Einstellungen + Löschen + Japanisch (SHIFT JIS) + Gespeicherte ID und gespeichertes Passwort + Öffnen + Nicht erneut fragen + Zum Lesen im Offline-Modus speichern + Livebox hinzufügen + Juli + Ordner erstellen + Hinzufügen + Hoch + Benutzernamen und Passwörter für Webseiten speichern + Japanisch (EUC-JP) + Download-Manager + April + Chinesisch (Big5) + Groß + Website-Einstellungen + Alle beenden + Elemente auswählen + Alle auswählen + Neu laden + Zurückgehen + Verlauf löschen? + Keine Elemente + ORDNER + Benutzerdefinierter Benutzer-Agent + Desktop-Ansicht + Sep. + Link-URL kopieren + Auf neu. Seite öf. + Mi + Keine Favoriten + Tag hinzufügen + Bild anzeigen + Per E-Mail senden + Nicht zulässig + Übersicht der neu geöffneten Seiten anzeigen + Groß + Picasa + Miniaturansicht + Auf der Seite suchen + Passwort + Titel + Textcodierung + Gelöscht + Einstellungen + 1 Element ausgewählt + Minimieren + Tags + Textauswahl ein + Neuer Ordner + Zu Lesezeichen hinzugefügt + Zulassen + Lesbar + Bilder anzeigen + Automatisch + Okt. + Proxy-Port + Bearbeiten + Browser-Verlauf löschen? + Ordnernamen eingeben + Per Nachricht senden + Ans. von + Di + Mo + Multi-venster + Bereits vorhanden + URL kopieren + Voreinstellung merken + Standortzugriffsdaten löschen + Alle Cookies löschen? + Alle gespeicherten Formulardaten löschen? + Netzfehler + Stopp + Auf Seite suchen + Keine besuchten Seiten + Sa + Herunterladen + Favorit hinzufügen + Lokalen Inhalt und lokale Datenbanken aus dem Cache löschen? + Fehlgeschlagen + Fenster schließen + Mittel + Letzte Woche + Die Webseite kann nicht angezeigt werden. Keine Antwort vom Server. + Lesezeichen löschen + Zum Album hinzufügen + Älter + Zurück + Weitere + Verschieben + Gestern + Auswahlmodus + Ohne Tag + Erstellt + Bitte SIM Karte einlegen + Lesezeichen entfernt + Berechtigungseinstellungen für Web-Benachrichtigungen löschen + Link senden + Text zum automatischen Ausfüllen des Webformulars festlegen + OK + Klein + Bild kopieren + Sichere Verbindung + Formulardaten + Am häufigsten besucht + Auswählen + Ordner + Öffnen eines neuen Fensters nicht möglich. Maximale Anzahl an Fenstern bereits geöffnet. + Websites das Ausführen von JavaScript gestatten + Autom. Aktualisierung + Neues Fenster + Nein + Gestattet Seiten das Speichern und Lesen von Cookie-Daten + Zweimal tippen, um das Fach zu schließen. + Wiedergabe + Maximale Anzahl von Tags (%d) erreicht + Laden. Bitte warten... + Abbrechen + Mobile Datenverbindung deaktiviert. Verbinden Sie sich über WLAN oder aktivieren Sie die mobile Datenverbindung. + Cookies + Leere Seite + Suche + Feb. + Privaten Modus deaktivieren + Cache leeren + Passwort + Benutzername + Betrachten Sie mühelos PC-Websites auf Ihrem Mobilgerät. Dieses Feature vergrößert den Text, damit er leichter zu lesen ist. Hinweis: das Layout des Texts kann sich ändern. + LESEZEICHEN BEARBEITEN + Gespeicherte Daten löschen + Alle Webseitendaten und Standortberechtigungen löschen? + Alle auswählen + Niemals + Ordner auswählen + Zuletzt besuchte Seite + Entwickler-Optionen + Ausgangssprache + Favoriten + Löschen + Heute + Ja + Einfügen + Weiter + Hinzufügen zum Startbildschirm nicht möglich. Diese Website lässt keine Vorschau zu. + Benutzer-Agent + Unerwart. Fehler + Berechtigungen für Web-Benachrichtigungen löschen? + So + Gespeichert + Zweimal tippen, um die Webseite zu öffnen. + Zusätzl. Info zur Webseite + Normal + %d Elemente ausgewählt + Zu Favoriten hinzufügen + Bild anzeigen + Download wird gestartet... + Leer + Favoriten + Schriftgröße + Weitergehen + Soll der Verlauf wirklich gelöscht werden? + Alle Cookiedaten löschen + Internetverlauf wird nicht gesp. + Browserdaten löschen + Japanisch (ISO-2022-JP) + Kopieren + Ordnername + Pop-ups blockieren + Synchronisierte Tabs + Zum Startbildschirm hinzufügen + Speichern + Ungültiges Zertifikat + Anonymer Modus + Jan. + Datenschutz und Sicherheit + Drucken + Probleme mit dem Sicherheitszertifikat für diese Site + Helligkeit + Löschen? + Schriftgröße + Automatische Erkennung + Formulardaten speichern + Löschen + Abbr. + Sicherheitswarnung + Herunterladen? + URL suchen oder eingeben + Formulardaten löschen + Passwörter merken + Zu Verlauf wechseln + Heute + Ablehnen + Datenschutz + Aktualisieren + Internet-Clip + Passwörter löschen + Als Startseite festlegen + Abbrechen + Sehr groß + Benachrichtigung... + Google + Letzten 7 Tage + (keine Markierungen) + Immer ein + VERLAUF + Noch einmal tippen, um das Internet zu schließen. + Namen des Lesezeichens eingeben + Authentifizierung erforderlich + Link speichern + Nicht erneut anzeigen + In Zwischenablage kopieren + Ordner umbenennen + ID/Passwort automatisch speichern + Alle Einstellungen auf Standard. Fortfahren? + Mobil + Lesezeichen auswählen + Schließen + Klein + Auf Standard zurücksetzen + Koreanisch (EUC-KR) + LTE/GSM/WCDMA (automatisch verbinden) + Markierung umbenennen + ORDNER ERSTELLEN + Startseite + Ungültige URL + Desktop-Ansicht + Menü + Die URL wurde nicht gefunden + Mobile Ansicht + In neu. Fenster öff. + E-Mail + Shortcut erstellt + Datenverbindung fehlgeschlagen + Formulare autom. ausfüllen + Webseiten erlauben, Ihren Standort zu lokalisieren + Do + ORDNER UMBENENNEN + Aus Lesezeichen entfernt + Lesezeichen + Seitenübersicht öffnen + An Breite anpassen + Jul. + Datennetzwerk + Unicode (UTF-8) + Lesezeichen hinzugefügt + Verlauf + Letzter Monat + OK + Favorit bearbeiten + Alle gespeicherten Passwörter löschen? + Liste + Zu Favoriten hzfg. + Mai + Sicherheitsrichtlinie schränkt die Verwendung des Internetbrowsers ein. + Mär. + URL + Favorit kann nicht hinzugefügt werden. Maximale Anzahl an Favoriten erreicht + Immer fragen + Seite speichern + Wort auswählen + Sicherheitswarnungen anzeigen + Ordner erstellen + Alle löschen + Ausgewählte Lesezeichen löschen? + Personalisierte Daten löschen + Alle Browserdaten löschen und alle Einstellungen auf Standard zurücksetzen + Bilder auf Webseiten anzeigen + Wörterbuch + Standardansicht + Nach Tag sortieren + Web-Anwendung installieren + Browser-Info + Privaten Modus aktivieren + Album + Suchmaschine + Datentyp in Formulare für spätere Verwendung speichern + Kein Titel + Vor %d Wochen + Zum Startbildschirm hzfg. + Standortzugriff aktivieren + URL eingeben + Manuell + Kein Verlauf + JavaScript ausführen + %s fragt Ihre Position an + Fr + Version + Nachricht + Cache + Bearbeiten + Allgemein + Gespeicherte Seiten + %s zulassen, um Benachrichtigungen anzuzeigen + Pop-Ups auf Webseiten blockieren + Bild speichern + Häufig besuchte Seiten + Gestern + Titel eingeben + Dez. + Alle gelöscht + %d Element ausgewählt + Speichern des Bilds fehlgeschlagen + Nachrichten + Neu sortieren + Textgröße automatisch ändern + Standortzugriff für diese Webseite löschen? + Listenansicht + Ausgewählte Lesezeichen verschieben? + Speicher voll + Nicht genügend Speicher. Löschen Sie einige Elemente + diff --git a/res/ell-GR.xml b/res/ell-GR.xml new file mode 100644 index 0000000..1d9dcbc --- /dev/null +++ b/res/ell-GR.xml @@ -0,0 +1,345 @@ + + + + Ειδοποίηση Web + Μεταφορά + Δεν βρέθηκαν αποτελέσματα + Noέμ + Επικόλληση + Ρυθμ. περιεχομένου σελ. + Ρυθμίσεις για προχωρημένους για μεμονωμένες τοποθεσίες web + Αρχική σελίδα χρήστη + ΔΙΑΧ. ΠΑΡΑΘΥΡΩΝ + Αυτό-ματο + Εκκαθάριση ιστορικού + Τρέχουσα σελίδα + Κλείσιμο όλων των ανοιχτών παραθύρων και μετάβαση στην αρχική οθόνη + Αποδοχή των cookies + Κοινόχρηστο + Κινεζικά (GBK) + Λατινικά-1 (ISO-8859-1) + Κατάσταση λειτουργίας προγραμματισμού + Ιούνιος + Φόρτωση εικόνων + OΚ + Ρυθμίσεις + Τεράστιο + Πρόβλημα συνδεσιμότητας δεδομένων + Αυγ + Ορισμός της τρέχουσας σελίδας ως αρχικής + Ρυθμίσεις + Διαγρ. + Ιαπωνικά (SHIFT JIS) + Αποθήκευση ταυτότητας και κωδικού πρόσβασης + Άνοιγμα + Να μην ερωτηθώ ξανά + Αποθήκευση για ανάγνωση εκτός σύνδεσης + Προσθήκη Livebox + Ιούλιος + Δημ/ργία φακέλου + Προσθήκη + Υψηλή + Αποθήκευση ονομάτων χρήστη και κωδικών πρόσβασης για τις τοποθεσίες Web + Ιαπωνικά (EUC-JP) + Διαχείριση λήψεων + Απρίλιος + Κινεζικά (Big5) + Μεγάλο + Ρυθμίσεις τοποθεσίας Web + Κλ. Όλων + Επιλογή στοιχείων + Επιλογή όλων + Επαναφόρτιση + Μετάβαση προς τα πίσω + Εκκαθάριση ιστορικού; + Κανένα στοιχείο + ΦΑΚΕΛΟΣ + Προσαρμογή παράγοντα χρήστη + Προβολή επιφάνειας εργασίας + Σεπτ + Αντ. URL σύνδ. + Άνοιγμ.σε νέα σελ. + Τετ. + Κανένας σελιδοδείκτης + Προσθήκη ετικέτας + Προβολή εικόνας + Αποστολή μέσω email + Δεν επιτρέπεται + Εμφάνιση προεπισκόπησης των σελίδων που άνοιξαν πρόσφατα + Μεγάλο + Picasa + Προβολή μικρογραφιών + Εύρ. σε σελίδα + Κωδικός πρόσβασης + Τίτλος + Κωδικοποίηση κειμένου + Διαγράφηκε + Ρυθμίσεις + Επιλέχθηκε 1 στοιχείο + Ελαχιστοποίηση + Ετικέτες + Επιλογή κειμένου ενεργό + Νέος φάκελος + Προστέθηκε στους σελιδοδείκτες + Να επιτρέπεται + Για ανάγνωση + Εμφάνιση εικόνων + Αυτόματα + Οκτ + Θύρα proxy + Επεξεργασία + Διαγραφή ιστορικού προγράμματος περιήγησης; + Εισαγωγή ονόματος φακέλου + Αποστολή μέσω μηνύματος + Προβ. κατά + Τρ. + Δευ. + Πολλαπλά Παράθυρα + Υπάρχει ήδη + Αντιγραφή URL + Απομνημόνευση προτίμησης + Εκκαθάριση πρόσβασης τοποθεσίας + Διαγραφή όλων των cookies; + Διαγραφή όλων των αποθηκευμένων δεδομένων φορμών; + Σφάλμα δικτύου + Διακοπή + Εύρ. σε σελίδα + Δεν υπάρχουν τοποθεσίες που έχετε επισκεφθεί + Σάβ. + Λήψη + Προσθήκη σελιδοδείκτη + Διαγραφή περιεχομένου και βάσεις δεδομένων της τοπικής μνήμης cache; + Αποτυχία + Κλείσιμο παραθύρου + Μεσαίο + Προηγούμενη εβδομάδα + Δεν είναι δυνατή η εμφάνιση της ιστοσελίδας. Ο διακομιστής δεν αποκρίνεται + Διαγραφή σελιδοδείκτη + Προσθ. στο βιβλ. αποκ. + Παλαιότερο + Προηγούμενο + Περισσότερα + Μετακίνηση + Xθές + Λειτουργία επιλογής + Χωρίς ετικέτα + Δημιουργήθηκε + Εισάγετε κάρτα SIM + Ο σελιδοδείκτης καταργήθηκε + Διαγραφή των ρυθμίσεων δικαιωμάτων ειδοποιήσεων web + Κοινή χρήση σύνδεσης + Ορισμός κειμένου για αυτόματη συμπλήρωση φόρμας Web + OK + Μικρό + Αντιγραφή εικόνας + Ασφαλής σύνδεση + Δεδομένα φορμών + Περισσότ. επισκέψεις + Επιλογή + Φάκελος + Δεν είναι δυνατό το άνοιγμα νέου παραθύρου. Έχει ήδη ανοιχτεί ο μέγιστος αριθμός παραθύρων + Να επιτρέπεται σε τοποθεσίες η εκτέλεση JavaScript + Αυτόματη ανανέωση + Νέο παράθυρο + Όχι + Επιτρέπει στις τοποθεσίες να αποθηκεύουν και να διαβάζουν δεδομένα αρχείων cookie + Πατήστε δύο φορές για κλείσιμο της γραμμής. + Αναπαραγωγή + Συμπληρώθηκε ο μέγιστος αριθμός ετικετών (%d) + Φόρτωση. Περιμένετε... + Άκυρο + Τα δεδομένα κινητής τηλεφωνίας απενεργοποιήθηκαν. Συνδεθείτε μέσω δικτύου Wi-Fi ή ενεργοποιήστε τα δεδομένα κινητής τηλεφωνίας + Cookies + Κενή σελίδα + Αναζήτηση + Φεβρ + Απενεργοποίηση λειτουργίας απορρήτου + Διαγραφή μνήμης cache + Κωδικός πρόσβασης + Όνομα χρήστη + Εύκολη προβολή ιστοτόπων για PC στην κινητή συσκευή σας. Αυτή η δυνατότητα ενισχύει το μέγεθος των κειμένων για ευκολότερη ανάγνωση. Σημείωση: Η διάταξη του κειμένου ενδέχεται να αλλάξει + ΕΠΕΞΕΡΓΑΣΙΑ ΣΕΛΙΔΟΔΕΙΚΤΩΝ + Εκκαθάριση αποθηκευμένων δεδομένων + Να διαγραφούν όλα τα δεδομένα τοποθεσιών Web και οι άδειες τοποθεσίας; + Επιλογή όλων + Ποτέ + Επιλογή φακέλου + Τελευταία σελίδα που προβλήθηκε + Επιλογές προγραμματιστή + Γλώσσα πηγή + Σελιδοδείκτες + Διαγραφή + Σήμερα + Ναι + Επικόλληση + Επόμενο + Δεν είναι δυνατή η προσθήκη στην αρχική οθόνη. Δεν επιτρ. η προεπισκόπηση της τοποθεσίας web + Παράγοντας χρήστη + Μη αναμενόμενη αποτυχία + Διαγραφή των δικαιωμάτων ειδοποιήσεων web; + Κυρ. + Αποθηκεύτηκε + Πατήστε δύο φορές για άνοιγμα της ιστοσελίδας. + Επιπλέον πληρ. ιστοσελίδας + Κανονική + Επιλέχθηκαν %d στοιχεία + Προσθήκη στους σελιδ/τες + Προβολή εικόνας + Ξεκινά η λήψη... + Κενό + Προσθ.στους σελιδ/τες + Μέγεθος γραμματοσειράς + Μετάβαση προς τα εμπρός + Are you sure you want to clear history? + Διαγραφή όλων των δεδομένων cookie + Το ιστορικό Internet δεν αποθηκεύτηκε + Διαγραφή δεδομένων περιήγησης + Ιαπωνικά (ISO-2022-JP) + Αντιγραφή + Όνομα φακέλου + Αποκλεισμός αναδυόμ. παραθύρων + Συγχρο-νισμένες καρτέλες + Προσθήκη σε αρχική σελίδα + Αποθ/ση + Μη έγκυρο πιστοποιητικό + Λειτ. ανώνυμης περιήγ. + Ιαν + Ιδιωτικό απόρρητο και ασφάλεια + Εκτύπωση + Υπάρχουν προβλήματα με το πιστοποιητικό ασφαλείας αυτής της τοποθεσίας + Φωτεινότητα + Διαγραφή? + Μέγεθος γραμματοσειράς + Αυτόματος εντοπισμός + Απομνημόνευση των δεδομένων φορμών + Διαγραφή + Άκυρο + Προειδοποίηση ασφαλείας + Λήψη; + Αναζήτηση ή εισαγωγή διεύθυνσης URL + Διαγραφή δεδομένων φορμών + Απομνημόνευση κωδ. πρόσβ. + Μετάβαση στο ιστορικό + Σήμερα + Άρνηση + Απόρρητο + Ανανέωση + Κλιπ Web + Διαγραφή κωδ. πρόσβασης + Ορισμός ως αρχικής σελίδας + Άκυρο + Τεράστιο + Ειδοποίηση... + Google + Τις τελευταίες 7 ημέρες + (δεν υπάρχουν ετικέτες) + Πάντα ενεργοποίηση + ΙΣΤΟΡΙΚΟ + Πατήστε μία φορά ακόμα για να κλείσετε το Internet + Εισαγωγή ονόματος σελιδοδείκτη + Απαιτείται έλεγχος ταυτότητας + Αποθήκευση σύνδεσης + Να μην εμφανιστεί ξανά + Αντιγραφή στο πρόχειρο + Μετονομασία φακέλου + Αυτόματη αποθήκευση αναγνωριστικού/κωδικού πρόσβασης + Επαναφορά όλων των ρυθμίσεων στις προεπιλεγμένες τιμές. Συνέχεια; + Κινητό + Επιλογή σελιδοδεικτών + Κλείσιμο + Μικρό + Επαναφορά της προεπιλογής + Κορεατικά (EUC-KR) + LTE/GSM/WCDMA (αυτόματη σύνδεση) + Μετονομασία ετικέτας + ΔΗΜΙΟΥΡΓΙΑ ΦΑΚΕΛΟΥ + Αρχική σελίδα + Άκυρη URL + Προβολή επιφάνειας εργασίας + Μενού + Δε βρέθηκε η URL + Προβολή κινητού + Άνοιγ. σε νέο παράθ. + Email + Δημιουργήθηκε συντόμευση + Η σύνδεση δεδομένων απέτυχε + Αυτόμ. συμπλήρωση φορμών + Να επιτρέπεται στις τοποθεσίες να ζητούν πρόσβαση στη θέση σας + Πέμ. + ΜΕΤΟΝΟΜΑΣΙΑ ΦΑΚΕΛΟΥ + Καταργήθηκε από τους σελιδοδείκτες + Σελιδοδείκτης + Άνοιγμα σελ.σε επισκόπ. + Προσαρμογή κατά πλάτος + Ιούλ + Δίκτυο δεδομένων + Unicode (UTF-8) + Προστέθηκε σελιδοδείκτης + Ιστορικό + Περασμένος μήνας + Ok + Επεξεργασία σελιδοδείκτη + Διαγραφή όλων των αποθηκευμένων κωδικών πρόσβασης; + Λίστα + Προσθ.στους σελιδ. + Μάης + Η πολιτική ασφαλείας περιορίζει τη χρήση του προγράμματος περιήγησης στο Internet + Μάρτ + URL + Αδύνατη η προσθήκη σελιδοδείκτη. Συμπληρώθηκε ο μέγιστος αριθμός σελιδοδεικτών + Να γίνεται πάντα ερώτηση + Αποθήκευση σελίδας + Επιλογή λέξης + Εμφάνιση προειδοποιήσεων ασφαλείας + Δημ/ργία φακέλου + Διαγραφή όλων + Να διαγραφούν οι επιλεγμένοι σελιδοδείκτες; + Εκκαθάριση εξατομικευμένων δεδομένων + Διαγραφή όλων των δεδομένων του προγράμματος περιήγησης και επαναφορά όλων των προεπιλεγμένων ρυθμίσεων + Εμφάνιση εικόνων σε ιστοσελίδες + Λεξικό + Προεπιλεγμένη προβολή + Ταξινόμηση κατά ετικέτα + Εγκατάσταση εφαρμογής web + Πληροφορίες για το πρόγραμμα περιήγησης + Ενεργοποίηση λειτουργίας απορρήτου + Βιβλίο αποκομμάτων + Μηχανή αναζήτησης + Απομνημόνευση των δεδομένων που πληκτρολογώ σε φόρμες για μεταγενέστερη χρήση + Χωρίς τίτλο + Πριν %d εβδομάδες + Προσθήκη στην αρχική οθόνη + Ενεργοποίηση τοποθεσίας + Εισαγωγή URL + Χειροκίνητα + Κανένα ιστορικό + Εκτέλεση JavaScript + Το %s ζητά την τοποθεσία σας + Παρ. + Έκδοση + Μήνυμα + Μνήμη cache + Επεξεργ. + Γενικά + Αποθηκευμένες σελίδες + Να επιτρέπεται η εμφάνιση ειδοποιήσεων από το χρήστη %s + Αποκλεισμός αναδυόμενων παραθύρων σε ιστοσελίδες + Αποθ. εικόνας + Δημοφιλέστερες τοποθεσίες + Xθές + Εισαγωγή τίτλου + Δεκ + Έγινε διαγραφή όλων + Επιλέχθηκε %d στοιχείο + Απέτυχε η αποθήκευση εικόνας + Μηνύματα + Επαν. παραγγελίας + Αυτ. αλλαγή μεγέθ. κειμένου + Διαγραφή πληροφοριών πρόσβασης τοποθεσίας για τον ιστότοπο; + Προβολή λίστας + Να μετακινηθούν οι επιλεγμένοι σελιδοδείκτες; + Ανεπαρκής μνήμη + Δεν υπάρχει αρκετή μνήμη. Διαγράψτε ορισμένα στοιχεία + diff --git a/res/eng-GB.xml b/res/eng-GB.xml new file mode 100644 index 0000000..004d2db --- /dev/null +++ b/res/eng-GB.xml @@ -0,0 +1,349 @@ + + + + Web notification + Drag + No results found + Nov + Paste + Page content settings + Advanced settings for individual websites + User homepage + WINDOW MANAGER + Auto + Clear history + Current page + Close all opened windows and go to the homepage + Accept cookies + Share + Chinese (GBK) + Latin-1 (ISO-8859-1) + Developer mode + June + Load images + Done + Settings + Giant + Data connectivity problem + Aug + Maximum Limit Reached + Set current page as homepage + Settings + Delete + Japanese (SHIFT JIS) + Saved ID and password + Open + Do not ask again + Save for offline reading + Add Livebox + July + Create folder + Add + High + Save usernames and passwords for websites + Japanese (EUC-JP) + Download manager + April + Chinese (Big5) + Large + Website settings + Close all + Select items + Select all + Reload + Go backward + Clear history? + No items + FOLDER + Custom user agent + Desktop view + Sep + Copy link URL + Open in new page + Wed + No bookmarks + Add tag + View image + Send via Email + Not allowed + Show overview of newly opened pages + Large + Picasa + Thumbnail view + Find on page + Password + Title + Text encoding + Deleted + Settings + 1 item selected + Minimise + Tags + Text selection on + New folder + Added to bookmarks + Allow + Readable + Show images + Automatic + Oct + Proxy port + Edit + Delete browser history? + Enter folder name + Send via Message + View by + Tue + Mon + Multi window + Already exists + Copy URL + Remember preference + Clear location access + Delete all cookies? + Delete all saved form data? + Network error + Stop + Find on page + No visited sites + Sat + Download + Add bookmark + Delete locally cached content and databases? + Failed + Close window + Medium + Last week + Unable to display the webpage. No response from the server. + Delete bookmark + Add to scrapbook + Older + Previous + More + Move + Yesterday + Selection mode + Untagged + Created + Memory Low, Delete some data + Insert SIM card + Bookmark removed + Clear web notification permission settings + Share link + Set text for web form auto-fill + OK + Small + Copy image + Secure connection + Form data + Most visited + Select + Folder + Unable to open new window. Maximum number of windows already opened. + Allow sites to run JavaScript + Auto refresh + New window + No + Allows sites to save and read cookie data + Double tap to close the tray. + Play + Maximum number of tags (%d) reached + Loading. Please wait... + Cancel + Mobile data disabled. Connect using Wi-Fi network, or enable mobile data. + Cookies + Blank page + Search + Feb + Disable private mode + Clear cache + Password + Username + View PC websites easily on your mobile device. This feature boosts the text size to make it easier to read. Note: The text layout may change + EDIT BOOKMARKS + Low Memory + Clear stored data + Delete all website data and location permissions? + Select all + Never + Select folder + Last viewed page + Developer options + Source language + Bookmarks + Clear + Today + Yes + Paste + Next + No Recently Visited Sites. + Unable to add to home screen. This website does not allow it to be previewed. + User agent + Unexpected failure + Clear web notification permissions? + Sun + Saved + Double tap to open the webpage. + Additional webpage info + Normal + %d items selected + Add to Bookmarks + View image + Starting download... + Empty + Bookmarks + Font size + Go forward + Are you sure you want to clear history? + Clear all cookie data + Internet history is not stored + Delete browsing data + Japanese (ISO-2022-JP) + Copy + Folder name + Block pop-ups + Synced tabs + Add to home + Save + Invalid certificate + Incognito mode + Jan + Privacy and security + Print + There are problems with the security certificate for this site + Brightness + Delete? + Font size + Auto detect + Remember form data + Delete + Cancel + Security warning + Download? + Search or enter URL + Clear form data + Remember passwords + Go to history + Today + Refuse + Privacy + Refresh + Web clip + Clear passwords + Set as homepage + Cancel + Huge + Notifying... + Google + Last 7 days + (no tags) + Always on + HISTORY + Tap once more to close Internet + Enter bookmark name + Authentication required + Save link + Never show again + Copy to clipboard + Rename folder + Auto save ID/password + All settings to default. Continue? + Mobile + Select bookmarks + Close + Small + Reset to default + Korean (EUC-KR) + LTE/GSM/WCDMA (auto connect) + Rename tag + CREATE FOLDER + Homepage + Invalid URL + Desktop view + Menu + URL not found + Mobile view + Open in new window + Email + Shortcut created + Data connection failed + Auto fill forms + Allow sites to request access to your location + Thu + RENAME FOLDER + Removed from bookmarks + Bookmark + Open pages in overview + Fit to width + Jul + Data network + Unicode (UTF-8) + Bookmark added + History + Last month + Done + Edit bookmark + Delete all saved passwords? + List + Add to Bookmarks + Security policy restricts use of Internet browser + May + Mar + URL + Unable to add bookmark. Maximum number of bookmarks reached. + Always ask + Save page + Select word + Show security warnings + Create folder + Delete all + Delete the selected bookmarks? + Clear personalised data + Clear all browser data and reset all settings to default + Display images on webpages + Dictionary + Default view + Sort by tag + Install web app + About browser + Enable private mode + Scrapbook + Search engine + Remember data I type in forms for later use + No title + %d weeks ago + Add to home screen + Enable location + Enter URL + Manual + No history + Run JavaScript + %s requests your location + Fri + Version + Message + Cache + Edit + General + Saved pages + Allow %s to show notifications + Block pop-ups on webpages + Save image + Most visited sites + Yesterday + Enter title + Dec + Deleted all + %d item selected + Unable to save image + Messages + Reorder + Auto-resize text + Delete website location access information? + List view + Move the selected bookmarks? + Not enough memory + Not enough memory. Delete some items. + diff --git a/res/eng-PH.xml b/res/eng-PH.xml new file mode 100644 index 0000000..80f008c --- /dev/null +++ b/res/eng-PH.xml @@ -0,0 +1,345 @@ + + + + Web notification + Drag + No results found + Nov. + Paste + Page content settings + Advanced settings for individual websites + User homepage + WINDOW MANAGER + Auto + Clear history + Current page + Close all opened windows and go to the homepage + Accept cookies + Share + Chinese (GBK) + Latin-1 (ISO-8859-1) + Developer mode + June + Load images + Done + Settings + Giant + Data connectivity problem + Aug. + Set current page as homepage + Settings + Delete + Japanese (SHIFT JIS) + Saved ID and password + Open + Do not ask again + Save for offline reading + Add Livebox + July + Create folder + Add + High + Save usernames and passwords for websites + Japanese (EUC-JP) + Download manager + April + Chinese (Big5) + Large + Website settings + Close all + Select items + Select all + Reload + Go backward + Clear history? + No items + FOLDER + Custom user agent + Desktop view + Sep. + Copy link URL + Open in new page + Wed + No bookmarks + Add tag + View image + Send via Email + Not allowed + Show overview of newly opened pages + Large + Picasa + Thumbnail view + Find on page + Password + Title + Text encoding + Deleted + Settings + 1 item selected + Minimize + Tags + Text selection on + New folder + Added to bookmarks + Allow + Readable + Show images + Automatic + Oct. + Proxy port + Edit + Delete browser history? + Enter folder name + Send via Message + View by + Tue + Mon + Multi window + Already exists + Copy URL + Remember preference + Clear location access + Delete all cookies? + Delete all saved form data? + Network error + Stop + Find on page + No visited sites + Sat + Download + Add bookmark + Delete locally cached content and databases? + Failed + Close window + Medium + Last week + Unable to display the webpage. No response from the server + Delete bookmark + Add to scrapbook + Older + Previous + More + Move + Yesterday + Selection mode + Untagged + Created + Insert SIM card + Bookmark removed + Clear web notification permission settings + Share link + Set text for Web form auto-fill + OK + Small + Copy image + Secure connection + Form data + Most visited + Select + Folder + Unable to open new window. Maximum number of windows already opened + Allow sites to run JavaScript + Auto refresh + New window + No + Allows sites to save and read cookie data + Double tap to close the tray. + Play + Maximum number of tags (%d) reached + Loading. Please wait... + Cancel + Mobile data disabled. Connect using Wi-Fi network, or enable mobile data + Cookies + Blank page + Search + Feb. + Disable private mode + Clear cache + Password + Username + View PC websites easily on your mobile device. This feature boosts the text size to make it easier to read. Note: The text layout may change + EDIT BOOKMARKS + Clear stored data + Delete all website data and location permissions? + Select all + Never + Select folder + Last viewed page + Developer options + Source language + Bookmarks + Clear + Today + Yes + Paste + Next + Unable to add to home screen. This website does not allow it to be previewed. + User agent + Unexpected failure + Clear web notification permissions? + Sun + Saved + Double tap to open the webpage. + Additional webpage info + Normal + %d items selected + Add to Bookmarks + View image + Starting download... + Empty + Bookmarks + Font size + Go forward + Are you sure you want to clear history? + Clear all cookie data + Internet history is not stored + Delete browsing data + Japanese (ISO-2022-JP) + Copy + Folder name + Block pop-ups + Synced tabs + Add to home + Save + Invalid certificate + Incognito mode + Jan. + Privacy and security + Print + There are problems with the security certificate for this site + Brightness + Delete? + Font size + Auto-detect + Remember form data + Delete + Cancel + Security warning + Download? + Search or enter URL + Clear form data + Remember passwords + Go to history + Today + Refuse + Privacy + Refresh + Web clip + Clear passwords + Set as homepage + Cancel + Huge + Notifying... + Google + Last 7 days + (no tags) + Always on + HISTORY + Tap once more to close Internet + Enter bookmark name + Authentication required + Save link + Never show again + Copy to clipboard + Rename folder + Auto save ID/password + All settings to default. Continue? + Mobile + Select bookmarks + Close + Small + Reset to default + Korean (EUC-KR) + LTE/GSM/WCDMA (auto connect) + Rename tag + CREATE FOLDER + Homepage + Invalid URL + Desktop view + Menu + URL not found + Mobile view + Open in new window + Email + Shortcut created + Data connection failed + Auto fill forms + Allow sites to request access to your location + Thu + RENAME FOLDER + Removed from bookmarks + Bookmark + Open pages in overview + Fit to width + Jul. + Data network + Unicode (UTF-8) + Bookmark added + History + Last month + Done + Edit bookmark + Delete all saved passwords? + List + Add to Bookmarks + May + Security policy restricts the use of Internet browser + Mar. + URL + Unable to add bookmark. Maximum number of bookmarks reached + Always ask + Save page + Select word + Show security warnings + Create folder + Delete all + Delete the selected bookmarks? + Clear personalized data + Clear all browser data and reset all settings to default + Display images on Web pages + Dictionary + Default view + Sort by tag + Install web app + About browser + Enable private mode + Scrapbook + Search engine + Remember data typed in forms for later use + No title + %d weeks ago + Add to home screen + Enable location + Enter URL + Manual + No history + Run JavaScript + %s requests your location + Fri + Version + Message + Cache + Edit + General + Saved pages + Allow %s to show notifications + Block pop-ups on Web pages + Save image + Most visited sites + Yesterday + Enter title + Dec. + Deleted all + %d item selected + Unable to save image + Messages + Reorder + Auto-resize text + Delete website location access information? + List view + Move the selected bookmarks? + Not enough memory + Not enough memory. Delete some items + diff --git a/res/eng-US.xml b/res/eng-US.xml new file mode 100644 index 0000000..fd675ba --- /dev/null +++ b/res/eng-US.xml @@ -0,0 +1,350 @@ + + + + Web notification + Drag + No results found + Nov. + Paste + Page content settings + Advanced settings for individual websites + User homepage + WINDOW MANAGER + Auto + Clear history + Current page + Close all open windows and go to the home page + Accept cookies + Share + Chinese (GBK) + Latin-1 (ISO-8859-1) + Developer mode + June + Load images + Done + Settings + Giant + Data connectivity problem + Aug. + Maximum Limit Reached + Set current page as homepage + Settings + Delete + Japanese (SHIFT JIS) + Saved ID and password + Open + Do not ask again + Save for offline reading + Add Livebox + July + Create folder + Add + High + Save usernames and passwords for websites + Japanese (EUC-JP) + Download manager + April + Chinese (Big5) + Large + Website settings + Close all + Select items + Select all + Reload + Go backwards + Clear history? + No items + FOLDER + Custom user agent + Desktop view + Sep. + Copy link Web address + Open in new page + Wed + No bookmarks + Add tag + View image + Send via Email + Not allowed + Show overview of newly opened pages + Large + Picasa + Thumbnail view + Find on page + Password + Title + Text encoding + Deleted + Settings + 1 item selected + Minimize + Tags + Text selection on + New folder + Added to bookmarks + Allow + Readable + Show images + Automatic + Oct. + Proxy port + Edit + Delete browser history? + Enter folder name + Send via Message + View by + Tue + Mon + Multi window + Already exists + Copy Web address + Remember preference + Clear location access + Delete all cookies? + Delete all saved form data? + Network error + Stop + Find on page + No visited sites + Sat + Download + Add bookmark + Delete locally cached content and databases? + Failed + Close window + Medium + Last week + Unable to display the webpage. No response from the server. + Delete bookmark + Add to scrapbook + Older + Previous + More + Move + Yesterday + Selection mode + Untagged + Created + Memory Low, Delete some data + Insert SIM card + Bookmark removed + Clear web notification permission settings + Share link + Set text for Web form auto fill + OK + Small + Copy image + Secure connection + Form data + Most visited + Select + Folder + Unable to open new window. Maximum number of windows already opened. + Allow sites to run JavaScript + Auto refresh + New window + No + Allows sites to save and read cookie data + Double tap to close the tray + Play + Maximum number of tags (%d) reached + Loading. Please wait... + Cancel + Mobile data turned off. Connect using a Wi-Fi network, or turn on mobile data. + Cookies + Blank page + Search + Feb. + Disable private mode + Clear cache + Password + Username + View PC websites easily on your mobile device. This feature boosts the text size to make it easier to read. Note: The text layout may change. + EDIT BOOKMARKS + Low Memory + Clear stored data + Delete all website data and location permissions? + Select all + Never + Select folder + Last viewed page + Developer options + Source language + Bookmarks + Clear + Today + Yes + Paste + Next + No Recently Visited Sites. + Unable to add to home screen. This website does not allow it to be previewed. + User agent + Unexpected failure + Clear web notification permissions? + Sun + Saved + Double tap to open the webpage + Additional webpage info + Normal + %d items selected + Add to Bookmarks + View image + Starting download... + Empty + Bookmarks + Font size + Go forwards + Are you sure you want to clear history? + Clear all cookie data + Internet history is not stored + Delete browsing data + Japanese (ISO-2022-JP) + Copy + Folder name + Block pop-ups + Synced tabs + Add to home + Save + Invalid certificate + Incognito mode + Jan. + Privacy and security + Print + There are problems with the security certificate for this site + Brightness + Delete? + Font size + Auto detect + Remember form data + Delete + Cancel + Security warning + Download? + Search or enter Web address + Clear form data + Remember passwords + Go to history + Today + Refuse + Privacy + Refresh + Web clip + Clear passwords + Set as homepage + Cancel + Huge + Notifying... + Google + Last 7 days + (no tags) + Always on + HISTORY + Tap once more to close Internet + Enter bookmark name + Authentication required + Save link + Never show again + Copy to clipboard + Rename folder + Auto save ID/password + All settings to default. Continue? + Mobile + Select bookmarks + Close + Small + Reset to default + Korean (EUC-KR) + LTE/GSM/WCDMA (auto connect) + Rename tag + CREATE FOLDER + Homepage + Invalid Web address + Desktop view + Menu + URL not found + Mobile view + Open in new window + Email + Shortcut created + Data connection failed + Auto fill forms + Allow sites to request access to your location + Thu + RENAME FOLDER + Remove from bookmarks + Bookmark + Open pages in overview + Fit to width + Jul. + Data network + Unicode (UTF-8) + Bookmark added + History + Last month + Done + Edit bookmark + Delete all saved passwords? + List + Add to Bookmarks + Security policy restricts use of Internet browser + May + Mar. + Web address + Unable to add bookmark. Maximum number of bookmarks reached. + Always ask + Save page + Select word + Show security warnings + Create folder + Delete all + Delete the selected bookmarks? + Clear personalized data + Clear all browser data and reset all settings to default + Display images on Web pages + Dictionary + Default view + Sort by tag + Install web app + About browser + Enable private mode + Scrapbook + Search engine + Remember data I type in forms for later use + No title + %d weeks ago + Add to home screen + Turn on location + Enter URL + Manual + No history + Run JavaScript + %s requests your location + Fri + Version + Message + cannot open more than 9 windows + Cache + Edit + General + Saved pages + Allow %s to show notifications + Block pop-ups on Web pages + Save image + Most visited sites + Yesterday + Enter title + Dec. + Deleted all + %d item selected + Unable to save image + Messages + Reorder + Auto-resize text + Delete website location access information? + List view + Move the selected bookmarks? + Not enough memory + Not enough memory. Delete some items. + diff --git a/res/est-EE.xml b/res/est-EE.xml new file mode 100644 index 0000000..b795799 --- /dev/null +++ b/res/est-EE.xml @@ -0,0 +1,345 @@ + + + + Veebiteavitus + Lohista + Tulemusi ei leitud + Nov + Kleebi + Lehekülje sisu seaded + Täpsemad seaded üksikute veebisaitide jaoks + Kasutaja avaleht + AKNAHALDUR + Automaatne + Kustuta ajalugu + Hetkel kuvatav leht + Sulge kõik avatud aknad ja naase avalehele + Nõustu küpsistega + Jaga + Hiina (GBK) + Ladina-1 (ISO-8859-1) + Arendaja režiim + Juuni + Laadi pildid + Valmis + Seaded + Hiiglaslik + Andmesideühenduvuse probleem + Aug. + Määrake praegune lehekülg avaleheks + Seaded + Kustuta + Jaapani (SHIFT JIS) + Salvestatud tunnus ja parool + Ava + Ära küsi enam + Salvesta võrguühenduseta lugemiseks + Lisa reaalajaaken + Juuli + Loo kaust + Lisa + Kõrge + Salvesta kasutajanimed ja paroolid veebisaitide jaoks + Jaapani (EUC-JP) + Allalaadimishaldur + Aprill + Hiina (Big5) + Suur + Veebisaidi seaded + Sulge kõik + Vali üksusi + Vali kõik + Laadi uuesti + Mine tagasi + Kustutada ajalugu? + Üksusi ei ole + KAUST + Kohandatud kasutaja agent + Töölaua kuva + Sept + Kop. lingi URL + Ava uuel lehel + K + Järjehoidjaid ei ole + Lisa silt + Kuva pilt + Saada e-kirjaga + Pole lubatud + Kuva äsja avatud lehtede ülevaade + Suur + Picasa + Pisipildivaade + Otsi lehelt + Parool + Pealkiri + Teksti kodeerimine + Kustutatud + Seaded + 1 üksus on valitud + Minimeeri + Sildid + Tekstivalik sees + Uus kaust + Lisatud järjehoidjatesse + Luba + Loetav + Kuva pildid + Automaatne + Okt. + Puhverserveri port + Muuda + Kas kustutada baruseri ajalugu? + Sisestage kausta nimi + Saada sõnumiga + Kuvaviis + T + E + Mitmikaken + Juba olemas + Kopeeri URL + Mäleta eelistusi + Tühista asukoha juurdepääs + Kas kustutada kõik küpsised? + Kas kustutada kõik salvestatud ankeedi andmed? + Võrgutõrge + Peata + Otsi lehelt + Külastatud saite pole + L + Lae alla + Lisa järjehoidja + Kas tühjendada kohaliku vahemälu sisu ja andmebaasid? + Nurjus + Sulge aken + Keskmine + Eelmine nädal + Veebilehte ei saa kuvada. Server ei vasta + Kustuta järjehoidja + Lisa märkmikusse + Vanemad + Eelmine + Veel + Teisalda + Eile + Valikurežiim + Sildistamata + Loodud + Palun sisestage SIM-kaart + Järjehoidja on eemaldatud + Kustuta veebiteavituste lubade seaded + Jaga linki + Määra tekst veebiankeetide automaatseks täitmiseks + OK + Väike + Kopeeri pilt + Turvaline ühendus + Ankeedi andmed + Enim külastatud + Vali + Kaust + Uut akent ei saa avada. Maksimaalne arv aknaid on juba avatud + Luba saitidel käivitada JavaScript + Automaatne värskendamine + Uus aken + Ei + Lubab saitidel küpsiste andmeid salvestada ja lugeda + Toksake kaks korda, et sulgeda salve + Esita + Siltide maksimaalne arv (%d) on saavutatud + Laadimine. Palun oodake... + Tühista + Mobiilne andmeside inaktiveeritud. Looge ühendus Wi-Fi-võrgu kaudu või lubage mobiilne andmeside + Küpsised + Tühi leht + Otsi + Vee. + Desaktiveeri privaatsusrežiim + Tühjenda vahemälu + Parool + Kasutajanimi + Vaadake arvuti veebisaite lihtsalt oma mobiilsideseadmes. See funktsioon võimendab teksti suurust, et seda oleks lihtsam lugeda. Märkus. Teksti paigutus võib muutuda + REDIGEERI JÄRJEHOIDJAID + Tühista salvestatud andmed + Kas kustutada kõik veebisaidi andmed ja asukoha load? + Vali kõik + Mitte kunagi + Vali kaust + Viimati vaadatud leht + Arendaja valikud + Lähtekeel + Järjehoidjad + Tühjenda + Täna + Jah + Kleebi + Järgmine + Ei saa lisada avaekraanile. See veebisait ei luba eelvaadet + Kasutaja esindaja + Ootamatu tõrge + Kas kustutada veebiteavituse load? + P + Salvestatud + Toksake kaks korda, et avada veebilehte + Veebilehe lisateave + Tavaline + %d üksust on valitud + Lisa järjehoidjatesse + Kuva pilt + Allalaadimise alustamine... + Tühi + Järjehoidjad + Fondi suurus + Mine edasi + Are you sure you want to clear history? + Kustuta kõik küpsiste andmed + Interneti ajalugu pole salvestatud + Kustuta sirvimisandmed + Jaapani (ISO-2022-JP) + Kopeeri + Kausta nimi + Blokeeri hüpikud + Sünkroonitud vahekaardid + Lisa avaekraanile + Salvesta + Kehtetu sertifikaat + Inkognito režiim + Jaa. + Privaatsus ja turvalisus + Prindi + Selle saidi turvasertifikaadiga tekkis probleeme + Heledus + Kustuta? + Fondi suurus + Automaatne tuvastamine + Mäleta ankeedi andmeid + Kustuta + Tühis. + Turvahoiatus + Laadida alla? + Otsige või sisestage URL + Kustuta ankeedi andmed + Mäleta paroole + Ava ajalugu + Täna + Keeldu + Privaatsus + Värskenda + Veebiklipp + Kustuta paroolid + Määra avaleheks + Tühista + Ülisuur + Teavitamine... + Google + Viimased 7 päeva + (silte pole) + Alati sees + AJALUGU + Toksake üks kord, et sulgeda internetti + Sisestage järjehoidja nimi + Autentimine on kohustuslik + Salvesta link + Ära näita enam kunagi + Kopeeri lõikelauale + Nimeta kaust ümber + Tunnuse/parooli automaatne salvestamine + Kõik seaded vaikeolekusse. Kas jätkata? + Mobiil + Vali järjehoidjad + Sulge + Väike + Lähtesta vaikeväärtusele + Korea (EUC-KR) + LTE/GSM/WCDMA (automaatne ühendamine) + Nimeta silt ümber + LOO KAUST + Avalehekülg + Vigane URL + Töölauakuva + Menüü + URL-i ei leitud + Mobiilivaade + Ava uues aknas + E-kiri + Otsetee on loodud + Andmesideühendus ebaõnnestus + Ankeetide autom. täitmine + Luba saitidel taotleda juurdepääsu teie asukohale + N + NIMETA KAUST ÜMBER + Eemaldatud järjehoidjatest + Järjehoidja + Ava lk.-d ülevaates + Mahuta laiusele + Jul. + Andmevõrk + Unicode (UTF-8) + Järjehoidja lisatud + Ajalugu + Eelmine kuu + Valmis + Muuda järjehoidjat + Kas kustutada kõik salvestatud paroolid? + Loend + Lisa järjehoidja + Mai + Turvalisuse poliis piirab internetibrauseri kasutuse + Mär. + URL + Ei ole võimalik lisada järjehoidjat. Maksimaalne arv järjehoidjaid sisestatud + Küsi alati + Salvesta leht + Valige sõna + Kuva turvahoiatused + Loo kaust + Kustuta kõik + Kas kustutada valitud järjehoidjad? + Kustuta isikupärastatud andmed + Kustuta kõik brauseriandmed ja taasta kõik vaikeseaded + Kuva veebilehtedel olevad pildid + Sõnaraamat + Vaikevaade + Sordi siltide järgi + Installi veebirakendus + Teave brauseri kohta + Aktiveeri privaatsusrežiim + Märkmik + Otsingumootor + Mäleta ankeeti sisestatud andmeid hilisemaks kasutamiseks + Pealkirjata + %d nädalat tagasi + Lisa avaekraanile + Luba asukoht + Sisesta URL + Käsitsi + Ajalugu puudub + Käivita JavaScript + %s taotleb teie asukohta + R + Versioon + Sõnum + Vahemälu + Muuda + Üldine + Salvestatud lehed + Luba kasutajal %s näidata teavitusi + Blokeeri veebilehel olevad hüpikud + Salvesta pilt + Enim külastatud saidid + Eile + Sisestage pealkiri + Det. + Kõik on kustutatud + %d üksust on valitud + Pilti ei saa salvestada + Sõnumid + Järjesta ümber + Teksti suuruse aut. muutmine + Kas kustutada veebisaidi asukoha juurdepääsu teave? + Loendivaade + Kas teisaldada valitud järjehoidjad? + Mälu pole piisavalt + Mälu pole piisavalt. Kustutage mõned üksused + diff --git a/res/eus-ES.xml b/res/eus-ES.xml new file mode 100644 index 0000000..1819d8b --- /dev/null +++ b/res/eus-ES.xml @@ -0,0 +1,345 @@ + + + + Web jakinarazpena + Arrastatu + Ez da emaitzarik aurkitu + Aza. + Itsatsi + Orri edukiaren ezarpenak + Ezarpen aurreratuak banako webgunetarako + Erabiltzailearen orri nagusia + LEIHO KUDEATZAILEA + Auto + Historia ezabatu + Uneko orria + Itxi irekitako leiho guztiak eta joan orri nagusira + Onartu cookieak + Partekatu + Txinera (GBK) + Latin-1 (ISO-8859-1) + Garatzaile modua + Ekaina + Kargatu irudiak + Egina + Ezarpenak + Izugarrizkoa + Datu konektibitatearen arazoa + Abu. + Ezarri orri hau abiaorri gisa + Ezarpenak + Ezabatu + Japoniera (SHIFT JIS) + Gordetako erabiltzaile izena eta pasahitza + Ireki + Ez galdetu berriz + Gorde lineaz kanpo irakurtzeko + Gehitu Livebox + Uztaila + Sortu karpeta + Gehitu + Altua + Gorde erabiltzaile izenak eta pasahitzak webguneetarako + Japoniera (EUC-JP) + Deskargen kudeatzailea + Apirila + Txinera (Big5) + Handia + Webgunearen ezarpenak + Itxi dena + Aukeratu elementuak + Denak aukeratu + Birkargatu + Atzera egin + Garbitu historia? + Elementurik ez + KARPETA + Pertsonalizatutako erabiltzailearen agentea + Mahai gainaren ikuspegia + Ira. + Kopiatu URL es. + Ireki orri berrian + Asz. + Laster-markarik ez + Gehitu etiketa + Ikusi irudia + Bidali posta elektroniko bidez + Ez onartua + Erakutsi orri ireki berrien ikuspegi orokorra + Handia + Picasa + Miniatura ikuspegia + Aurkitu orrian + Pasahitza + Izenburua + Testu kodifikazioa + Ezabatua + Ezarpenak + Elementu 1 hautatu da + Minimizatu + Etiketak + Testu aukeraketa aktibatuta + Karpeta berria + Lastermarketara gehituta + Onartu + Irakurgarria + Erakutsi irudiak + Automatikoa + Urr. + Proxy ataka + Editatu + Ezabatu nabigatzailearen historia? + Karpetaren izena idatzi + Mezu bidez bidali + Hala ik. + Asr. + Asl. + Multi window + Dagoeneko badago + URLa kopiatu + Gogoratu hobespenak + Garbitu kokapen sarrera + Cookie guztiak ezabatu? + Ezabatu formulariotik gordetako datu guztiak? + Sarearen errorea + Gelditu + Aurkitu orrian + Ez da gunerik bisitatu + Lar. + Deskargatu + Laster-marka gehitu + Ezabatu lokalki katxean gordetako edukia eta datu baseak? + Huts egin du + Itxi leihoa + Ertaina + Azkeneko astea + Ezin da web orria erakutsi. Zerbitzariak ez du erantzuten + Ezabatu lastermarka + Gehitu ebakin liburura + Zaharragoa + Aurrekoa + Gehiago + Mugitu + Atzo + Hautaketa modua + Etiketarik gabe + Sortuta + SIM txartela sartu + Lastermarka kenduta + Garbitu web jakinarazpen baimenen ezarpenak + Partekatu esteka + Ezarri testua Web formularioaren betetze automatikorako + Ados + Txikia + Kopiatu irudia + Konexio segurua + Formularioko datuak + Gehien bisitat. guneak + Aukeratu + Karpeta + Ezin da leiho berria ireki. Irekita dagoen gehieneko leiho kopurura heldu zara + Baimendu guneei JavaScript abiaraztea + Freskatu automatikoki + Leiho berria + Ez + Guneei cookien datuak gordetzea eta irakurtzea ahalbidetzen die + Ukitu bi aldiz ontzia ixteko. + Erreproduzitu + Gehienezko etiketa kopurura (%d) iritsi zara + Kargatzen. Itxaron mesedez... + Ezeztatu + Datu mugikorrak ezgaituta. Konektatu Wi-Fi sarea erabiliz edo gaitu datu mugikorrak + Cookie-ak + Orri zuria + Bilatu + Ots. + Ezgaitu modu pribatua + Cachea hustu + Pasahitza + Erabiltzaile izena + Ikusi ordenagailuko webguneak erraz zure gailu mugikorrean. Eginbide honek testuaren neurria zabaltzen du errazago irakur dezazun. Oharra: baliteke testuaren itxura aldatzea + EDITATU LASTERMARKAK + Garbitu biltegiratutako datuak + Ezabatu webgune datu eta kokapen baimen guztiak? + Denak aukeratu + Inoiz ez + Karpeta aukeratu + Azken ikusitako orria + Garatzailearen aukerak + Jatorri hizkuntza + Laster-markak + Ezabatu + Gaur + Bai + Itsatsi + Hurrengoa + Ezin da pantaila nagusira gehitu. Webgune honek ez du aurrebista onartzen + Erabiltzailearen agentea + Ustekabeko akatsa + Garbitu web jakinarazpen baimenak? + Iga. + Gordeta + Ukitu bi aldiz web orria irekitzeko. + Webgune informazio osagarria + Arrunta + %d elementu hautatu dira + Laster-marketara gehitu + Ikusi irudia + Deskarga hasten... + Hutsik + Laster-markak + Letraren tamaina + Aurrera egin + Are you sure you want to clear history? + Garbitu cookie datu guztiak + Internet historia ez da gorde + Ezabatu bilaketa datuak + Japoniera (EUC-JP) + Kopiatu + Karpetaren izena + Blokeatu agerkariak + Synced tabs + Gehitu pantaila nagusira + Gorde + Baliogabeko ziurtagiria + Ezkutuko modua + Urt. + Pribatutasuna eta segurtasuna + Inprimatu + Arazoak daude gune honen segurtasun ziurtagiriarekin + Argitasuna + Ezabatu? + Letraren tamaina + Hauteman automatikoki + Gogoratu formulario datuak + Ezabatu + Ezez. + Segurtasun abisua + Deskargatu? + Bilatu edo idatzi URLa + Garbitu formularioko datuak + Gogoratu pasahitzak + Joan historiara + Gaur + Ukatu + Pribatutasuna + Eguneratu + Web klipa + Garbitu pasahitzak + Ezarri abiaorri gisa + Ezeztatu + Erraldoia + Jakinarazten... + Google + Azken 7 egunak + (etiketarik ez) + Beti aktibatuta + HISTORIA + Ukitu beste behin Internet ixteko + Idatzi laster-markaren izena + Autentikazioa beharrezkoa + Gorde esteka + Ez erakutsi berriz + Kopiatu arbelera + Karpeta berrizendatu + Automatikoki gordetzeko ID/pasahitza + Ezarpen guztiak modu lehenetsira. Jarraitu? + Mugikorra + Hautatu lastermarkak + Itxi + Txikia + Lehenetsira berrezarri + Korearra (EUC-KR) + LTE/GSM/WCDMA (automatikoki konektatzea) + Etiketa berrizendatu + SORTU KARPETA + Hasiera orria + URL baliogabea + Mahai-gain ikuspegia + Menua + URLa ez da aurkitu + Mugikorraren ikuspegia + Ireki beste leiho batean + Posta elektronikoa + Lastebidea sortuta + Datuen konexioak huts egin du + Autobetetze formularioak + Guneei zure kokapenera sartzeko eskaera egiten utzi + Osg. + BERRIZENDATU KARPETA + Lastermarketatik kenduta + Laster-marka + Ireki orriak ik. orok. + Egokitu zabalerara + Uzt. + Datu sarea + Unicode (UTF-8) + Lastermarka gehitu da + Historia + Joan den hilean + Amaituta + Laster-marka editatu + Ezabatu gordetako pasahitz guztiak? + Zerrenda + Geh. laster-mark.-ra + Maiatza + Segurtasun politikak Internet nabigatzailearen erabilera mugatzen du + Mar. + URLa + Ezin da laster-marka gehitu. Laster-marken gehieneko kopurua lortuta + Beti galdetu + Gorde orria + Aukeratu hitza + Erakutsi segurtasun oharrak + Karpeta sortu + Dena(k) ezabatu + Ezabatu hautatutako laster-markak? + Garbitu datu pertsonalizatuak + Ezabatu nabigatzaileko datu guztiak eta berrezarri ezarpen guztiak lehenetsi gisa + Erakutsi irudiak web orritan + Hiztegia + Ikuspegi lehenetsia + Sailkatu etiketen arabera + Instalatu web aplikazioa + Nabigatzaileari buruz + Gaitu modu pribatua + Ebakinen liburura + Bilaketa motorra + Gogoratu formulariotan idazten ditudan datuak geroago erabiltzeko + Izenbururik ez + Duela %d aste + Gehitu hasierako pantailara + Gaitu kokapena + URLa idatzi + Eskuzkoa + Historiarik ez + JavaScript abiarazi + %s-(e)k zure kokapena eskatu dizu + Otr. + Bertsioa + Mezua + Cachea + Editatu + Orokorra + Gordetako orriak + Baimendu %s jakinarazpenak erakusteko + Blokeatu agerkariak web orrietan + Irudia gorde + Gehien bisitatutako guneak + Atzo + Izenburua idatzi + Abe. + Ezabatutako denak + %d elementu aukeratuta + Ezin da irudia gorde + Mezuak + Ordenatu berriz + Aldatu testu neurria autom. + Ezabatu kokapen sarbidearen informazioa? + Zerrenda ikuspegia + Mugitu hautatutako laster markak? + Ez dago memoria nahikoa + Ez dago memoria nahikoa. Elementu batzuk ezabatu + diff --git a/res/fin-FI.xml b/res/fin-FI.xml new file mode 100644 index 0000000..bf4e707 --- /dev/null +++ b/res/fin-FI.xml @@ -0,0 +1,345 @@ + + + + Verkkoilmoitus + Vedä + Tuloksia ei löytynyt + Mar + Liitä + Sivun sisällön asetukset + Yksittäisten sivustojen lisäasetukset + Käyttäjän kotisivu + IKKUNOIDEN HALLINTA + Auto + Tyhjennä historia + Nykyinen sivu + Sulje kaikki avatut ikkunat ja siirry etusivulle + Hyväksy evästeet + Jaa + Kiina (GBK) + Latinalainen-1 (ISO-8859-1) + Kehittäjätila + Kesäkuu + Lataa kuvia + Valmis + Asetukset + Jättimäinen + Datayhteysongelma + Elo + Aseta nykyinen sivu alkusivuksi + Asetukset + Poista + Japanilainen (SHIFT JIS) + Tallennettu tunnus ja salasana + Avaa + Älä kysy uudelleen + Tallenna luettavaksi offline-tilassa + Lisää Livebox + Heinäkuu + Luo kansio + Lisää + Korkea + Tallenna Web-sivustojen käyttäjänimet ja salasanat + Japanilainen (EUC-JP) + Latauksen hallinta + Huhtikuu + Kiina (Big5) + Iso + Sivuston asetukset + Sulje kaikki + Valitse kohteet + Valitse kaikki + Lataa uudelleen + Siirry taaksepäin + Tyhjennetäänkö historia? + Ei kohteita + KANSIO + Mukauta käyttäjäagentti + Työpöytänäkymä + Syys + Kopioi linkin URL + Avaa uud. sivulle + Ke + Ei kirjanmerkkejä + Lisää tunniste + Näytä kuva + Lähetä sähköpostiviestinä + Ei sallittu + Näytä juuri avattujen sivujen yleiskatsaus + Iso + Picasa + Pikkukuvanäkymä + Etsi sivulta + Salasana + Otsikko + Tekstin koodaus + Poistettu + Asetukset + 1 kohde valittu + Pienennä + Tunnisteet + Tekstin valinta päällä + Uusi kansio + Lisätty kirjanmerkkeihin + Salli + Luku + Näytä kuvat + Automaattinen + Lok + Välityspalvelimen portti + Muokkaa + Poistetaanko selainhistoria? + Kirjoita kansion nimi + Lähetä viestinä + N.peruste + Ti + Ma + Moni-ikkuna + On jo olemassa + Kopioi URL-osoite + Muista ensisijainen asetus + Poista sijainnin käyttö + Poistetaanko kaikki evästeet? + Poistetaanko kaikki tallennetut lomaketiedot? + Verkkovirhe + Lopeta + Etsi sivulta + Ei katsottuja sivustoja + La + Lataa + Lisää suosikki + Poistetaanko paikallisessa välimuistissa olevat sisällöt ja tietokannat? + Epäonnistui + Sulje ikkuna + Keskikokoinen + Viime viikko + Verkkosivua ei voi näyttää. Palvelin ei vastaa + Poista kirjanmerkki + Lisää leikekirjaan + Vanhempi + Edellinen + Lisää + Siirrä + Eilen + Valintatila + Merkitsemätön + Luotu + Lisää SIM-kortti + Kirjanmerkki poistettu + Poista verkkoilmoitusten käyttöoikeusasetukset + Jaa linkki + Määritä verkkolomakkeen automaattinen täyttöteksti + OK + Pieni + Kopioi kuva + Suojattu yhteys + Lomaketiedot + Käydyimmät + Valitse + Kansio + Uutta ikkunaa ei voi avata. Avattavissa olevien ikkunoiden enimmäismäärä on jo saavutettu + Anna sivustojen suorittaa JavaScript + Automaattinen päivitys + Uusi ikkuna + Ei + Anna sivustojen tallentaa ja lukea evästetietoja + Sulje palkki kaksoisnapauttamalla. + Toista + Tunnisteiden enimmäismäärä (%d) on saavutettu + Ladataan. Odota... + Peruuta + Mobiilidata on poistettu käytöstä. Muodosta yhteys Wi-Fi-verkon kautta tai ota mobiilidata käyttöön + Evästeet + Tyhjä sivu + Etsi + Hel + Poista yksityinen tila käytöstä + Tyhjennä välimuisti + Salasana + Käyttäjän nimi + Tarkastele tietokonesivustoja helposti mobiililaitteella. Tämä toiminto lisää tekstin kokoa lukemisen helpottamiseksi. Huomautus: tekstin asettelu voi muuttua + MUOKKAA KIRJANMERKKEJÄ + Poista tallennetut tiedot + Poistetaanko kaikki sivustojen tiedot ja sijaintiluvat? + Valitse kaikki + Ei koskaan + Valitse kansio + Viimeksi katsottu sivu + Sovelluskehittäjien asetukset + Lähdekieli + Kirjanmerkit + Tyhjennä + Tänään + Kyllä + Liitä + Seuraava + Ei voi lisätä alkunäyttöön. Tämä verkkosivu ei salli esikatselua + Käyttäjäagentti + Odottamaton virhe + Poistetaanko verkkoilmoitusten oikeudet? + Su + Tallennettu + Avaa verkkosivu kaksoisnapauttamalla. + Lisätietoja verkkosivusta + Normaali + %d kohdetta valittu + Lisää kirjanmerkkeihin + Näytä kuva + Lataus käynnistetään... + Tyhjä + Kirjanmerkit + Kirjasinkoko + Siirry eteenpäin + Are you sure you want to clear history? + Poista kaikki evästetiedot + Internet-historiaa ei tallennettu + Poista selaustiedot + Japanil. (ISO-2022-JP) + Kopioi + Kansion nimi + Estä ponnahdusikkunat + Synkronoidut välilehdet + Lisää etusivulle + Tallenna + Virheellinen varmenne + Inkognito-tila + Tam. + Yksityisyys ja tietoturva + Tulosta + Sivuston suojausvarmenteen kanssa on ongelmia + Kirkkaus + Poista? + Kirjasinkoko + Automaattinen tunnistus + Muista lomaketiedot + Poista + Per. + Suojausvaroitus + Ladataanko? + Hae tai anna URL-osoite + Poista lomaketiedot + Muista salasanat + Siirry historiaan + Tänään + Kieltäydy + Yksityisyys + Päivitä + Web-leike + Tyhjennä salasanat + Aseta kotisivuksi + Peruuta + Erittäin suuri + Ilmoitetaan... + Google + Viimeiset 7 päivää + (ei tunnisteita) + Aina käytössä + HISTORIA + Sulje Internet napauttamalla vielä kerran + Anna kirjanmerkin nimi + Todennus vaaditaan + Tallenna linkki + Älä näytä koskaan uudelleen + Kopioi leikepöydälle + Nimeä kansio uudelleen + Tallenna tunnus/salasana automaattisesti + Kaikki oletusasetukset palautetaan. Jatketaanko? + Matkapuhelin + Valitse kirjanmerkit + Sulje + Pieni + Palauta oletukset + Korea (EUC-KR) + LTE/GSM/WCDMA (automaattinen yhdistäminen) + Nimeä tunnus uudelleen + LUO KANSIO + Kotisivu + Virheellinen URL-osoite + Työpöytänäkymä + Valikko + URL-osoitetta ei löydy + Mobiilinäkymä + Avaa uud. ikkunassa + Sähköposti + Pikanäppäin luotu + Datayhteys epäonnistui + Täytä lomakkeet autom. + Salli sivustojen pyytää oikeutta käyttää sijaintiasi + To + NIMEÄ KANSIO UUDELLEEN + Poistettu kirjanmerkeistä + Kirjanmerkki + Avaa sivut yhteenvetona + Sovita leveyteen + Hei + Dataverkko + Unicode (UTF-8) + Kirjanmerkki lisätty + Historia + Edellinen kuukausi + Valmis + Muokkaa kirjanmerkkiä + Poistetaanko kaikki tallennetut salasanat? + Luettelo + Lisää kirjanmerkk. + Toukokuu + Suojauskäytäntö estää Internet-selaimen käytön + Maa. + URL-osoite + Kirjanmerkkiä ei voi lisätä. Kirjanmerkkien enimmäismäärä on saavutettu + Kysy aina + Tallenna sivu + Valitse sana + Näytä suojausvaroitukset + Luo kansio + Poista kaikki + Poistetaanko valitut kirjanmerkit? + Poista yksilölliset tiedot + Poista kaikki selaintiedot ja palauta kaikki oletusasetukset + Näytä kuvat Web-sivuilla + Sanakirja + Oletusnäkymä + Lajittele tunnisteen mukaan + Asenna verkkosovellus + Tietoja selaimesta + Ota yksityinen tila käyttöön + Leikekirja + Hakukone + Muista lomakkeisiin kirjoitetut tiedot myöhempää käyttöä varten + Otsikko puuttuu + %d viikkoa sitten + Lisää alkunäyttöön + Ota sijainti käyttöön + Kirjoita URL-osoite + Manuaalinen + Historiaa ei ole + Suorita JavaScript + %s pyytää sijaintiasi + Pe + Versio + Viesti + Välimuisti + Muokkaa + Yleiset + Tallennetut sivut + Salli, että %s näyttää ilmoitukset + Estä verkkosivujen ponnahdusikkunat + Tallenna kuva + Useimmin katsotut sivustot + Eilen + Kirjoita otsikko + Jou + Kaikki poistettu + %d kohde valittu + Kuvaa ei voi tallentaa + Viestit + Järj. uudelleen + Muuta tekstin kokoa autom. + Poistetaanko sivuston sijaintitiedot? + Luettelonäkymä + Siirretäänkö valitut kirjanmerkit? + Ei tarpeeksi muistia + Muisti ei riitä. Poista joitain kohteita + diff --git a/res/fra-CA.xml b/res/fra-CA.xml new file mode 100644 index 0000000..50cd125 --- /dev/null +++ b/res/fra-CA.xml @@ -0,0 +1,345 @@ + + + + Notification Web + Glisser + Aucun résultat trouvé + Nov. + Coller + Param. contenu des pages + Paramètres avancés pour les sites Web individuels + Page d'accueil utilisateur + GEST. DE FENÊTRES + Auto + Effacer l'historique + Page en cours + Fermer toutes les fenêtres ouvertes et accéder à la page d'accueil + Accepter les témoins + Partager + Chinois (GBK) + Latin-1 (ISO-8859-1) + Mode développeur + Juin + Charger les images + Terminé + Paramètres + Géante + Problème de connectivité des données + Aou. + Définir la page actuelle comme page d'accueil + Paramètres + Supp. + Japonais (SHIFT JIS) + Identifiant et mot de passe enregistrés + Ouvrir + Ne plus demander + Enregistrer pour la lecture hors connexion + Ajouter une Livebox + Juillet + Créer dossier + Ajouter + Haute + Enregistrer les noms d'utilisateur et les mots de passe pour les sites Web + Japonais (EUC-JP) + Gestionnaire de téléchargement + Avril + Chinois (Big5) + Grande + Paramètres des sites Web + Tout fermer + Sélectionner éléments + Sélectionner tout + Recharger + Page précédente + Effacer l'historique? + Aucun élément + DOSSIER + Personnaliser l'utilisateur téléphone + Affichage bureau + Sep. + Copier le lien URL + Ouvrir ds nv page + Mer. + Aucun favori + Ajouter un tag + Afficher l'image + Envoyer par courriel + Non autorisé + Afficher une vue d'ensemble des pages récemment ouvertes + Grande + Picasa + Affichage miniature + Rechercher dans la page + Mot de passe + Titre + Codage du texte + Supprimé + Paramètres + 1 élément sélectionné + Réduire + Libellés + Activer sélection de texte + Nouveau dossier + Ajouté aux favoris + Autoriser + Lisible + Afficher les images + Automatique + Oct. + Port proxy + Modifier + Supprimer l'historique du navigateur ? + Saisir le nom de dossier + Envoyer par message + Afficher par + Mar. + Lun. + Fenêtres multi. + Existe déjà + Copier l'URL + Mémoriser la préférence + Effacer l'accès à la position + Supprimer tous les témoins? + Supprimer toutes les données de formulaire enregistrées ? + Erreur réseau + Arrêter + Rechercher dans la page + Aucun site consulté + Sam. + Télécharger + Ajouter un marque-page + Supprimer les bases de données et le contenu en cache ? + Échec + Fermer la fenêtre + Moyenne + Dernière semaine + Affichage de la page Web impossible. Aucune réponse du serveur + Supprimer le marque-page + Ajouter à l'album + Ancien + Précédent + Autres + Déplacer + Hier + Mode de sélection + Non tagué + Créé(e) + Insérer carte SIM + Favori supprimé + Effacer les paramètres d'autorisation de notification Web + Partager le lien + Définir texte pour remplissage automatique formulaire Web + OK + Petite + Copier l'image + Connexion sécurisée + Données formulaire + Les plus visités + Sélectionner + Dossier + Impossible d'ouvrir une nouvelle fenêtre. Nombre maximum de fenêtres ouvertes déjà atteint + Autoriser les sites à exécuter JavaScript + Actualisation automatique + Nouvelle fenêtre + Non + Autorise les sites à enregistrer et à lire des données de témoin + Touchez deux fois pour fermer la barre d'état. + Lire + Nombre maximum de balises (%d) atteint + Chargement. Veuillez patienter... + Annuler + Données mobiles désactivées. Connectez-vous via le réseau Wifi ou activez les données mobiles + Témoins + Page vierge + Recherche + Fév. + Désactiver le mode privé + Vider le cache + Mot de passe + Nom d'utilisateur + Affichez facilement les sites web pour PC sur votre appareil mobile. Cette fonction augmente la taille du texte pour faciliter la lecture. Remarque : La mise en forme du texte peut changer + MODIFIER LES FAVORIS + Effacer les données stockées + Supprimer toutes les données du site Web et les autorisations de localisation ? + Sélectionner tout + Jamais + Sélectionnez un dossier + Dernières page consultée + Options de développement + Langue source + Marque-pages + Effacer + Aujourd'hui + Oui + Coller + Suivant + Ajout impossible à l'écran d'accueil. Ce site Web ne peut pas être prévisualisé + Utilisateur téléphone + Erreur inattendue + Effacer les autorisations de notification Web ? + Dim. + Enregistré + Touchez deux fois pour ouvrir la page Web. + Infos supplément. page Web + Normale + %d éléments sélectionnés + Ajouter aux signets + Afficher l'image + Début du téléchargement... + Vide + Favoris + Taille de police + Page suivante + Voulez-vous vraiment effacer l'historique? + Effacer toutes les données du témoin + L'histor. Internet n'est pas conservé + Supprimer les données de navigation + Japonais (ISO-2022-JP) + Copier + Nom de dossier + Bloquer fen. contextuelles + Onglets Synchron. + Ajouter à l'accueil + Sauv. + Certificat non valide + Mode incognito + Jan. + Confidentialité et sécurité + Imprimer + Problèmes avec le certificat de sécurité de ce site + Luminosité + Supprimer? + Taille de police + Détection automatique + Mémoriser les données de formulaire + Supprimer + Annuler + Avertissement de sécurité + Télécharger ? + Rechercher ou entrer une URL + Effacer les données de formulaire + Mémoriser les MDP + Accéder à l'historique + Aujourd'hui + Refuser + Confident. + Actualiser + Clip Web + Effacer les mots de passe + Définir comme page d'accueil + Annuler + Immense + Notification... + Google + 7 derniers jours + (aucun libellé) + Toujours activé + HISTORIQUE + Appuyez une nouvelle fois pour fermer Internet + Entrez le nom d'un favori + Authentification requise + Enregistrer le lien + Ne plus afficher + Copier dans le presse-papier + Renommer le dossier + Enregistrer automatiquement ID/mot de passe + Tous les paramètres par défaut. Continuer? + Mobile + Sélectionner des marque-pages + Fermer + Petite + Restaurer valeurs par défaut + Coréen (EUC-KR) + LTE/GSM/WCDMA (connexion auto) + Renommer le libellé + CRÉER UN DOSSIER + Page d'accueil + URL non valide + Vue Bureau + Menu + URL introuvable + Vue mobile + Ouvrir dans une nouvelle fenêtre + Courriel + Raccourci créé + Échec de la connexion de données + Remplir autom. formul. + Autoriser les sites à demander l'accès à votre position + Jeu. + RENOMMER LE DOSSIER + Retiré des favoris + Favori + Ouv. pages ds vue ens. + Ajuster selon largeur + Juil. + Réseau de données + Unicode (UTF-8) + Marque-page ajouté + Historique + Mois précédent + OK + Modifier le marque-page + Supprimer tous les mots de passe enregistrés ? + Liste + Ajouter aux favoris + Mai + La politique de sécurité limite l'utilisation du navigateur Internet + Mars + URL + Impossible d'ajouter un signet. Nombre maximum de signets atteint + Toujours demander + Enregistrer page + Sélectionner un mot + Afficher les avertissements de sécurité + Créer un dossier + Tout supprimer + Supprimer les favoris sélectionnés ? + Effacer les données personnalisées + Effacer toutes les données de navigateur et réinitialiser tous les paramètres à leurs valeurs par défaut + Afficher des images sur les pages Web + Dictionnaire + Vue par défaut + Trier par identification + Installer l'application Web + À propos du navigateur + Activer le mode privé + Album + Moteur de recherche + Mémoriser les données que j'ai saisies dans les formulaires pour une utilisation ultérieure + Sans titre + il y a %d semaines + Ajouter à l'écran d'accueil + Activer la localisation + Saisir une URL + Manuel + Aucun historique + Exécuter JavaScript + %s demande votre position + Ven. + Version + Message + Cache + Modifier + Général + Pages enregistrées + Autoriser %s à afficher les notifications + Bloquer les fenêtres contextuelles sur les pages Web + Enregistrer l'image + Sites les plus visités + Hier + Saisir un titre + Déc. + Tout a été supprimé + %d élément sélectionné + Enregistrement image impossible + Messages + Réorganiser + Redimensionner texte autom. + Supprimer les informations d'accès à la position des sites Web ? + Liste + Déplacer les favoris sélectionnés ? + Mémoire insuffisante + Mémoire insuffisante. Supprimez certains éléments + diff --git a/res/fra-FR.xml b/res/fra-FR.xml new file mode 100644 index 0000000..b4c5ca1 --- /dev/null +++ b/res/fra-FR.xml @@ -0,0 +1,345 @@ + + + + Notification Web + Glisser + Aucun résultat trouvé + Nov. + Coller + Param. contenu des pages + Paramètres avancés pour les sites Web individuels + Page d'accueil utilisateur + GEST. DE FENETRES + Configuration automatique. + Effacer l'historique + Page en cours + Fermer toutes les fenêtres ouvertes et accéder à la page d'accueil + Accepter les cookies + Partager + Chinois (GBK) + Latin-1 (ISO-8859-1) + Mode développeur + Juin + Charger les images + Terminé + Paramètres + Géante + Problème de connectivité des données + Aoû. + Définir la page actuelle comme page d'accueil + Paramètres + Suppr. + Japonais (SHIFT JIS) + Identifiant et mot de passe enregistrés + Ouvrir + Ne plus demander + Enregistrer pour la lecture hors connexion + Ajouter une Livebox + Juillet + Créer dossier + Ajouter + Haute + Enregistrer les noms d'utilisateur et les mots de passe pour les sites Web + Japonais (EUC-JP) + Gestionnaire de téléchargement + Avril + Chinois (Big5) + Grande + Paramètres des sites Web + Tout fermer + Sélectionner éléments + Sélect. tout + Recharger + Page précédente + Effacer l'historique ? + Aucun élément + DOSSIER + Personnaliser l'utilisateur téléphone + Affichage bureau + Sep. + Copier l'URL du lien + Ouvrir dans nouvelle page + Mer + Aucun favori + Ajouter un tag + Afficher image + Envoyer par e-mail + Non autorisé + Afficher une vue d'ensemble des pages récemment ouvertes + Grande + Picasa + Affichage miniature + Rech. sur page + Mot de passe + Titre + Codage du texte + Supprimé + Paramètres + 1 élément sélectionné + Réduire + Libellés + Activer sélection de texte + Nouveau dossier + Ajouté aux favoris + Autoriser + Lisible + Afficher les images + Automatique + Oct. + Port proxy + Modifier + Supprimer l'historique du navigateur ? + Entrer nom du dossier + Envoyer par message + Aff. par + Mar + Lun + Fenêtres multiples + Existe déjà + Copier l'URL + Mémoriser la préférence + Effacer l'accès à la position + Supprimer tous les cookies ? + Supprimer toutes les données de formulaire enregistrées ? + Erreur réseau + Arrêter + Rech. sur page + Aucun site consulté + Sam + Télécharger + Ajouter un favori + Supprimer les bases de données et le contenu en cache ? + Échec + Fermer la fenêtre + Moyenne + Dernière semaine + Affichage de la page Web impossible. Aucune réponse du serveur + Supprimer le favori + Ajouter à l'album + Ancien + Précédent + Plus + Déplacer + Hier + Mode de sélection + Non tagué + Créé + Insérer carte SIM + Favori supprimé + Effacer les paramètres d'autorisation de notification Web + Partager le lien + Définir texte pour remplissage automatique formulaire Web + OK + Petite + Copier l'image + Connexion sécurisée + Données formulaire + Les plus visités + Sélectionner + Dossier + Impossible d'ouvrir une nouvelle fenêtre. Nombre maximum de fenêtres ouvertes déjà atteint + Autoriser les sites à exécuter JavaScript + Actualisation automatique + Nouvelle fenêtre + Non + Autorise les sites à enregistrer et à lire des données de cookie + Appuyez deux fois pour fermer la barre d'état. + Lire + Nombre maximum de tags (%d) atteint + Chargement. Veuillez patienter... + Annuler + Données mobiles désactivées. Connectez-vous via le réseau Wi-Fi ou activez les données mobiles + Cookies + Page vierge + Rechercher + Fév. + Désactiver le mode privé + Vider le cache + Mot de passe + Nom d'utilisateur + Affichez facilement les sites web pour PC sur votre appareil mobile. Cette fonction augmente la taille du texte pour faciliter la lecture. Remarque : La mise en forme du texte peut changer + MODIFIER LES FAVORIS + Effacer les données stockées + Supprimer toutes les données du site Web et les autorisations de localisation ? + Sélect. tout + Jamais + Sélectionner un dossier + Page précédente + Options de développement + Langue source + Favoris + Effacer + Aujourd'hui + Oui + Coller + Suivant + Ajout impossible à l'écran d'accueil. Ce site Web ne peut pas être prévisualisé + Utilisateur téléphone + Erreur inattendue + Effacer les autorisations de notification Web ? + Dim + Enregistré + Appuyez deux fois pour ouvrir la page Web. + Infos supplément. page Web + Normal + %d éléments sélectionnés + Ajouter aux favoris + Afficher image + Début du téléchargement... + Vide + Favoris + Taille de la police + Page suivante + Voulez-vous vraiment effacer l'historique ? + Supprimer tous les cookies + L'histor. Internet n'est pas conservé + Supprimer les données de navigation + Japonais (ISO-2022-JP) + Copier + Nom de dossier + Bloquer les pop-ups + Onglets Synchro. + Ajouter à l'accueil + Sauveg. + Certificat non valide + Mode incognito + Jan. + Confidentialité et sécurité + Imprimer + Problèmes avec le certificat de sécurité de ce site + Luminosité + Supprimer? + Taille de la police + Détection automatique + Se rappeler des données de formulaire + Supprimer + Annul. + Avertissement de sécurité + Télécharger ? + Rechercher ou entrer une URL + Supprimer les données de formulaire + Retenir les mots de passe + Accéder à l'historique + Aujourd'hui + Refuser + Confidentialité + Actualiser + Clip Web + Effacer les mots de passe + Définir comme page d'accueil + Annuler + Immense + Notification... + Google + 7 derniers jours + (aucun libellé) + Toujours activé + HISTORIQUE + Appuyez une nouvelle fois pour fermer Internet + Entrez le nom d'un favori + Authentification obligatoire + Enregistrer le lien + Ne plus afficher + Copier dans le presse-papier + Renommer dossier + Enregistrer automatiquement ID/mot de passe + Tous les paramètres par défaut. Continuer ? + Mobile + Sélectionner des favoris + Fermer + Petite + Restaurer valeurs par défaut + Coréen (EUC-KR) + 2G/3G/4G (mode Automatique) + Renommer le libellé + CRÉER UN DOSSIER + Page d'accueil + URL non valide + Vue du bureau + Menu + URL introuvable + Vue Mobile + Ouvrir nouvelle fenêtre + E-mail + Raccourci créé + Échec de la connexion de données + Remplir autom. formul. + Autoriser les sites à demander l'accès à votre position + Jeu + RENOMMER LE DOSSIER + Supprimé des favoris + Favori + Ouv. pages ds vue ens. + Ajuster selon largeur + Juil + Réseau de données + Unicode (UTF-8) + Favori ajouté + Historique + Mois précédent + Effectué + Modifier le favori + Supprimer tous les mots de passe enregistrés ? + Liste + Ajouter aux favoris + Mai + La politique de sécurité limite l'utilisation du navigateur Internet + Mars + URL + Impossible d'ajouter un favori. Nombre maximum de favoris atteint + Toujours demander + Enregistrer page + Sélect. mot + Afficher les avertissements de sécurité + Créer dossier + Tout supprimer + Supprimer les favoris sélectionnés ? + Effacer les données personnalisées + Supprimer toutes les données de navigateur et réinitialiser tous les paramètres sur les valeurs par défaut + Afficher des images sur les pages Web + Dictionnaire + Vue par défaut + Trier par tag + Installer l'application Web + A propos du navigateur + Activer le mode privé + Album + Moteur de recherche + Se rappeler des données que j'ai saisies dans les formulaires pour une utilisation ultérieure + Sans titre + il y a %d semaines + Ajouter à l'écran d'accueil + Activer la localisation + Saisir une URL + Manuel + Pas d'historique + Exécuter JavaScript + %s demande votre position + Ven + Version + Message + Cache + Modifier + Général + Pages enregistrées + Autoriser %s à afficher les notifications + Bloquer les fenêtres pop-up sur les pages Web + Enregistrer image + Sites les plus visités + Hier + Saisir un titre + Déc. + Tout a été supprimé + %d élément sélectionné + Enregistrement image impossible + Messages + Réorganiser + Redimensionner texte autom. + Supprimer les informations d'accès à la position des sites Web ? + Affichage : Liste + Déplacer les favoris sélectionnés ? + Mémoire insuffisante + Mémoire insuffisante. Supprimez certains éléments + diff --git a/res/gle-IE.xml b/res/gle-IE.xml new file mode 100644 index 0000000..9613011 --- /dev/null +++ b/res/gle-IE.xml @@ -0,0 +1,345 @@ + + + + Fógra Gréasáin + Tarraing + Níor aimsíodh torthaí + Samh + Greamaigh + Soc. inneachar an lch. + Ardsocruithe do láithreáin Ghréasáin aonair + Leathanach baile d'úsáideoirí + BAINIST. FUINNEOG + Uath- + Glan stair + Leathanach reatha + Dún gach fuinneog atá ar oscailt agus gabh chuig an leathanach baile + Glac le fianáin + Comhroinn + Sínis (GBK) + Laidin-1 (ISO-8859-1) + Mód forbróra + Meitheamh + Lódáil íomhánna + Déanta + Socruithe + Ollmhór + Fadhb nascachta sonraí + Lún. + Socraigh an leathanach reatha mar leathanach baile + Socruithe + Scrs + Seapáinis (SHIFT JIS) + ID agus pasfhocal sábháilte + Oscail + Ná hiarr arís + Sábháil le léamh as líne + Cuir Bosca beo leis + Iúil + Déan fillteán + Cuir leis + Ard + Sábháil ainmneacha úsáideora agus pasfhocail do láithreáin Ghréasáin + Seapáinis (EUC-JP) + Bainisteoir íoslódálacha + Aibreán + Sínis (Big5) + Mór + Socruithe láithreán Gréasáin + Dún gach + Roghnaigh míreanna + Roghnaigh gach + Athlódáil + Gabh siar + Glan stair? + Níl míreanna ann + FILLTEÁN + Saincheap gníomhaire úsáideora + Amharc deisce + M.F. + Cóipeáil nasc URL + Oscail i lch. Nua + Céad + Níl leabharmharcanna ann + Cuir clib leis + Amharc ar íomhá + Seol le R-phost + Neamhcheadaithe + Taispeáin forbhreathnú ar leathanaigh nua-oscailte + Mór + Picasa + Radharc mionsamhla + Aimsigh ar leathanach + Pasfhocal + Teideal + Ionchódú téacs + Scriosta + Socruithe + 1 mhír roghnaithe + Íoslaghdaigh + Clibeanna + Roghnú téacs ar siúl + Fillteán nua + Curtha le leabharmharcanna + Ceadaigh + Inléite + Taispeáin íomhánna + Uathoibríoch + D.F. + Seachphort + Cuir in eagar + Scrios stair an bhrabhsálaí? + Iontráil ainm an fhillteáin + Seol le teachtaireacht + Amharc de réir + Már + Luan + Multi window + Ann cheana + Cóipeáil URL + Cuimhnigh ar mo shainrogha + Glan rochtain an tsuímh + Scrios gach fianán? + Scrios gach sonra foirme a sábháladh? + Earráid líonra + Stop + Aimsigh ar lch. + Níl láithreáin ann ar tugadh cuairt orthu + Sath + Íoslódáil + Cuir leabharmharc leis + Scrios inneachar agus bunachair shonraí a taisceadh go logánta? + Theip air + Dún an fhuinneog + Meánach + An tseachtain seo caite + Ní féidir an leathanach Gréasáin a thaispeáint. Ní bhfuarthas freagairt ón bhfreastalaí + Scrios leabharmharc + Cuir le lbhr gearrthóg + Níos sine + Roimhe + Tuilleadh + Bog + Inné + Mód roghnaithe + Neamhchlibeáilte + Cruthaithe + Ionsáigh cárta SIM + Leabharmharc bainte + Glan socruithe ceada d'fhógraí Gréasáin + Comhroinn nasc + Socraigh téacs le foirmeacha Gréasáin a uath-líonadh + OK + Beag + Cóipeáil íomhá + Nasc slán + Sonraí ar fhoirm + Is mó cuairt + Roghnaigh + Fillteán + Ní féidir fuinneog nua a oscailt. Tá uaslíon na bhfuinneog ar oscailt cheana féin + Ceadaigh do láithreáin JavaScript a rith + Uath-athnuaigh + Fuinneog nua + Ná déan é + Ceadaítear do láithreáin sonraí fianán a shábháil agus a léamh + Tapáil faoi dhó leis an tráidire a dhúnadh. + Seinn + Uaslíon na gclibeanna (%d) bainte amach + Ag lódáil. Fan go fóill... + Cuir ar ceal + Tá sonraí móibíleacha díchumasaithe. Nasc ag úsáid líonra Wi-Fi, nó cumasaigh sonraí móibíleacha + Fianáin + Leathanach bán + Cuardaigh + Feab + Díchumasaigh mód príobháideach + Glan taisce + Pasfhocal + Ainm úsáideora + Amharc ar láithreáin Ghréasáin PC ar do ghléas móibíleach. Treisíonn an ghné seo méid an téacs le go mbeidh sé soléite. Nóta: Is féidir go n-athrófar leagan amach an téacs. + CUIR L.MHAIRC IN EAGAR + Glan sonraí stóráilte + Scrios gach cead do shonraí agus do shuímh ag an láithreán gréasáin? + Roghnaigh gach + Choíche + Roghnaigh fillteán + Leathanach deireanach ar amharcadh air + Roghanna forbróra + Teanga fhoinseach + Leabharmharcanna + Glan + Inniu + Déan é + Greamaigh + Ar aghaidh + Ní féidir cur leis an scáileán baile. Ní cheadaíonn an láithreán Gréasáin réamhamharc air + Gníomhaire úsáideora + Teip gan choinne + Glan ceadanna d'fhógraí gréasáin? + Domh + Sábháilte + Tapáil faoi dhó leis an leathanach Gréasáin a oscailt. + Fais. bhreise faoin lch Gréas. + Normálta + %d mír roghnaithe + Cuir le Leabharmharcanna + Amharc ar íomhá + Ag tosú ar íoslódáil... + Folamh + Leabharmharcanna + Méid an chló + Gabh ar aghaidh + Are you sure you want to clear history? + Glan gach sonra fianáin + Níor stóráladh stair idirlín + Scrios sonraí brabhsála + Seapáinis (ISO-2022-JP) + Cóipeáil + Ainm an fhillteáin + Cuir bac ar mhíreanna aníos + Táib a\nsioncronaíodh + Cuir le baile + Sábháil + Deimhniú neamhbhailí + Mód incognito + Ean. + Príobháideacht agus slándáil + Priontáil + Tá fadhbanna leis an deimhniú slándála don láithreán seo + Gile + Scrios? + Méid an chló + Uathbhraith + Cuimhnigh sonraí foirme + Scrios + Cealú + Rabhadh slándála + Íoslódáil? + Cuardaigh nó iontráil URL + Glan sonraí foirme + Cuimhnigh ar phasfhocail + Gabh chuig stair + Inniu + Diúltaigh + Príobháideacht + Athnuaigh + Gearrthóg gréasáin + Glan pasfhocail + Socraigh mar leathanach baile + Cealaigh + Ollmhór + Ag cur in iúl + Google + Le 7 lá anuas + (níl clibeanna ann) + Ar siúl i gcónaí + STAIR + Tapáil uair amháin eile leis an Idirlíon a dhúnadh + Iontráil ainm an leabharmhairc + Fíordheimhniú de dhíth + Sábháil nasc + Ná taispeáin go deo arís + Cóipeáil chuig an ngearrthaisce + Athainmnigh fillteán + Uathshábháil ID/pasfhocal + Gach socrú ar réamhshocrú. Ar aghaidh? + Fón Póca + Roghnaigh leabharmharcanna + Dún + Beag + Athshocraigh go réamhshocraithe + Cóiréis (EUC-KR) + LTE/GSM/WCDMA (uathnascadh) + Athainmnigh clib + CRUTHAIGH FILLTEÁN + Leathanach baile + URL neamhbhailí + Amharc deisce + Roghchlár + Níor aimsíodh URL + Amharc móibíleach + Oscail i bhfuinn. úr + R-phost + Aicearra cruthaithe + Theip ar nasc sonraí + Uath-líon foirmeacha + Ceadaigh do láithreáin rochtain ar do shuíomh a iarraidh + Déar + ATHAINMNIGH FILLTEÁN + Bainte ó leabharmharcanna + Leabharmharc + Oscail i bhforbhreathnú + Oir don leithead + Iúil + Líonra sonraí + Unicode (UTF-8) + Leabharmharc curtha leis + Stair + An mhí seo caite + Déanta + Cuir leabharmharc in eagar + Scrios gach pasfhocal sábháilte? + Liostaigh + Cuir le Leabharmharcanna + Bealtaine + Cuireann an beartas slándála srian ar úsáid an bhrabhsálaí Idirlín + Már. + URL + Ní féidir leabharmharc a chur leis. Uaslíon na leabharmharcanna bainte amach + Iarr i gcónaí + Sábháil leathanach + Roghnaigh focal + Taispeáin rabhaidh shlándála + Déan fillteán + Scrios gach + Scrios na leabharmharcanna roghnaithe? + Glan sonraí pearsantaithe + Glan gach sonra brabhsálaí agus athshocraigh gach socrú chuig an réamhshocrú + Taispeáin íomhánna ar leathanaigh Ghréasáin + Foclóir + Réamh-amharc + Sórt de réir clibe + Suiteáil feidhmchlár gréasáin + Eolas faoi Bhrabhsálaí + Cumasaigh mód príobháideach + Leabhar gearrthóg + Inneall cuardaigh + Cuimhnigh na sonraí a scríobhaim i bhfoirmeacha le húsáid arís + Níl teideal ann + %d seachtain ó shin + Cuir leis an scáileán baile + Cumasaigh suíomh + Iontráil URL + Láimhe + Níl stair ann + Rith JavaScript + Iarrann %s do shuíomh + Aoin + Leagan + Teachtaireacht + Taisce + Eagraigh + Ginearálta + Leathanaigh shabháilte + Ceadaigh do %s fógraí a thaispeáint + Cuir bac ar mhíreanna aníos ar leathanaigh Ghréasáin + Sábháil íomhá + Láithreáin is mó cuairt orthu + Inné + Iontráil teideal + Nol. + Gach scriosta + %d mír roghnaithe + Ní féidir íomhá a shábháil + Teachtaireachtaí + Athordaigh + Uath-athmhéidnigh téacs + Scrios faisnéis rochtana suímh don láithreán gréasáin? + Amharc liosta + Bog na leabharmharcanna roghnaithe? + Easpa cuimhne + Easpa cuimhne. Scrios roinnt míreanna + diff --git a/res/glg-ES.xml b/res/glg-ES.xml new file mode 100644 index 0000000..ddfdd62 --- /dev/null +++ b/res/glg-ES.xml @@ -0,0 +1,345 @@ + + + + Notificación web + Arrastrar + Non se atoparon resultados + Nov. + Pegar + Axust do contido da páx + Axustes avanzados para sitios web individuais + Páxina de inicio de usuario + ADMINISTRAD. VENTÁS + Automático + Borrar historial + Páxina actual + Pecha todas as ventás abertas e vai á páxina de inicio + Aceptar cookies + Compartir + Chinés (GBK) + Latino-1 (ISO-8859-1) + Modo do creador + Xuño + Cargar imaxes + Feito + Axustes + Enorme + Problema coa conectividade de datos + Ago. + Definir esta páxina como páxina de inicio + Axustes + Elim. + Xaponés (SHIFT JIS) + ID e contrasinal gardados + Abrir + Non preguntar outra vez + Gardar para ler fóra de liña + Engadir Livebox + Xullo + Crear carpeta + Engadir + Alta + Gardar nomes de usuario e contrasinais dos sitios web + Xaponés (EUC-JP) + Administrador de descargas + Abril + Chinés (Big5) + Grande + Axustes do sitio Web + Pechar todo + Seleccionar elementos + Seleccionar todo + Volver cargar + Atrás + Borrar o historial? + Sen elementos + CARPETA + Personalizar axente de usuario + Vista de escritorio + Set. + Copiar vínc URL + Abrir en nova páx. + Mér + Sen favoritos + Engadir etiqueta + Ver imaxe + Enviar por correo electrónico + Non permitido + Mostrar unha visión xeral das páxinas que se acaban de abrir + Grande + Picasa + Vista en miniatura + Buscar en páx. + Contrasinal + Título + Codificación de texto + Eliminado + Axustes + 1 elemento seleccionado + Minimizar + Etiquetas + Selección de texto activada + Nova carpeta + Engadido a favoritos + Permitir + Lexible + Mostrar imaxes + Automático + Out. + Porto do proxy + Editar + Desexas borrar o historial do navegador? + Introducir nome de carpeta + Enviar por mensaxe + Ver por + Mar + Lun + Multi window + Xa existe + Copiar URL + Lembrar preferencia + Borrar acceso de localización + Eliminar Todas as Cookies? + Desexas eliminar todos os datos de formularios gardados? + Erro de rede + Deter + Buscar en páx. + Non hai ningún sitio visitado + Sáb + Descargar + Engadir favorito + Desexas borrar contidos e bases de datos gardados localmente na caché? + Erro + Pechar ventá + Media + Última semana + Non se pode amosar a páxina web. O servidor non responde + Eliminar favorito + Engad. a álbum recort. + Máis antigo + Anterior + Máis + Mover + Onte + Modo de selección + Non etiquetado + Creado + Insira a tarxeta SIM + Favorito eliminado + Borrar os axustes dos permisos de notificacións web + Compartir ligazón + Definir texto para encher automaticamente en formularios web + Aceptar + Pequeno + Copiar imaxe + Conexión segura + Datos do formulario + Os máis visitados + Seleccionar + Carpeta + Non se pode abrir outra ventá. Acadouse o número máximo de ventás abertas + Permitir aos sitios executar JavaScript + Actualización automática + Nova ventá + Non + Permite aos sitios gardar e ler datos das cookies + Toca dúas veces para pechar a bandexa. + Reproducir + Alcanzouse o número máximo de etiquetas (%d) + Cargando. Espera por favor... + Cancelar + Datos móbiles desactivados. Conéctate mediante unha rede Wi-Fi ou activa os datos móbiles + Cookies + Páxina en branco + Buscar + Feb. + Desactivar modo privado + Borrar caché + Contrasinal + Nome de usuario + Visualiza sitios web para PC facilmente no teu dispositivo móbil. Esta función aumenta o tamaño do texto para facilitar a lectura. Nota: É posible que o deseño do texto cambie + EDITAR FAVORITOS + Borrar información almacenada + Desexas eliminar todos os datos do sitio web e os permisos de localización? + Seleccionar todo + Nunca + Seleccionar carpeta + Última páxina visitada + Opcións de creador + Idioma de orixe + Favoritos + Borrar + Hoxe + Si + Pegar + Seguinte + Non se pode engadir á pantalla de inicio. Este sitio web non permite a súa previsualización + Axente de usuario + Erro inesperado + Desexas borrar os permisos de notificacións web? + Dom + Gardado + Toca dúas veces para abrir a páxina web. + Info. adicional da páx. web + Normal + %d elementos seleccionados + Engadir a Favoritos + Ver imaxe + Iniciando descarga... + Baleiro + Favoritos + Tamaño da fonte + Adiante + Are you sure you want to clear history? + Borrar todos os datos de cookies + Historial da Internet non almacenado + Eliminar información buscada + Xaponés (ISO-2022-JP) + Copiar + Nome de carpeta + Bloquear ventás emerxentes + Pestanas sincronizadas + Engadir ao inicio + Gardar + Certificado non válido + Modo de incógnito + Xan. + Privacidade e seguridade + Imprimir + Existen problemas co certificado de seguridade deste sitio + Brillo + Eliminar? + Tamaño da fonte + Detección automática + Recordar datos de formularios + Eliminar + Canc. + Advertencia de seguridade + Descargar? + Buscar ou introducir URL + Borrar datos de formularios + Recordar contrasinais + Ir ao historial + Hoxe + Rexeitar + Privacidade + Actualizar + Clip web + Borrar contrasinais + Definir como páxina de inicio + Cancelar + Enorme + Notificando... + Google + Últimos 7 días + (sen etiquetas) + Sempre activo + HISTORIAL + Toca unha vez máis para pechar a Internet + Introduce o nome do favorito + Autenticación requirida + Gardar ligazón + Non mostrar máis + Copiar no portapapeis + Cambiar o nome da carpeta + Gardar ID/contrasinal automaticamente + Todos os axustes a predeterminados. Continuar? + Móbil + Seleccionar favoritos + Pechar + Pequeno + Restablecer como predeterminado + Coreano (EUC-KR) + LTE/GSM/WCDMA (conexión automática) + Cambiar o nome da etiqueta + CREAR CARPETA + Páxina de inicio + URL non válida + Vista do escritorio + Menú + URL non encontrada + Vista móbil + Abrir en nova fiest. + Correo + Atallo creado + Houbo un erro de conexión de datos + Encher formularios autom. + Permitir que os sitios soliciten acceso á túa localización + Xov + RENOMEAR CARPETA + Eliminar de favoritos + Favorito + Abrir páx. en vis. xer. + Axustar anchura + Xul. + Rede de datos + Unicode (UTB-8) + Favorito engadido + Historial + O mes pasado + Finalizado + Editar favorito + Eliminar todos os contrasinais gardados? + Lista + Engadir a Favoritos + Mai. + A política de seguridade limita o uso do buscador de Internet + Mar. + URL + Non se pode engadir favorito. Número máximo de favoritos alcanzado + Preguntar sempre + Gardar páxina + Seleccionar palabra + Mostrar advertencias de seguridade + Crear carpeta + Eliminar todo + Desexas eliminar os favoritos seleccionados? + Borrar datos personalizados + Borrar todos os datos do navegador e restablecer todos os axustes cos valores predeterminados + Mostrar imaxes en páxinas web + Dicionario + Vista predeterminada + Ordenar por etiqueta + Instalar aplicación web + Acerca do navegador + Activar modo privado + Álbum de recortes + Motor de busca + Recordar os datos que introduzo nos formularios para utilizalos posteriormente + Sen título + Hai %d semanas + Engadir á pant. de inicio + Permitir localización + Introducir URL + Manual + Sen historial + Executar JavaScript + %s solicita a túa localización + Ven + Versión + Mensaxe + Caché + Editar + Xeral + Páxinas gardadas + Permitir a %s amosar notificacións + Bloquear ventás emerxentes en páxinas web + Gardar imaxe + Sitios máis visitados + Onte + Introducir título + Dec. + Todo eliminado + %d elemento seleccionado + Non se pode gardar a imaxe + Mensaxes + Reordenar + Cambio de tamaño auto. texto + Desexas eliminar a información de acceso á localización do sitio web? + Vista de lista + Desexas mover os favoritos seleccionados? + Non hai suficiente memoria + Non hai suficiente memoria. Elimine algúns elementos + diff --git a/res/hin-IN.xml b/res/hin-IN.xml new file mode 100644 index 0000000..6a0097d --- /dev/null +++ b/res/hin-IN.xml @@ -0,0 +1,345 @@ + + + + वेब सूचना + खींचें + कोई परिणाम नहीं मिले + नव. + पेस्ट करें + पेज सामग्री सेटिंग्स + व्यैक्तिक वेबसाइटों के लिए उन्‍नत सेटिंग्स + उपयोगकर्ता होमपेज + विंडो प्रबंधक + स्वत: + इतिहास साफ़ करें + वर्तमान पेज + सभी खुले हुए विंडो बंद करें और होमपेज पर जाएँ + कुकीज स्‍वीकारें + शेयर करें + चीनी (GBK) + लैटिन-1 (ISO-8859-1) + डेवलपर मोड + जून + छवियाँ लोड करें + हुआ + सेटिंग्स + ज्यायंट + डेटा कनेक्टिविटी समस्‍या + अग. + वर्तमान पेज को होमपेज के रूप में सेट करें + सेटिंग्स + हटाएँ + जापानी (SHIFT JIS) + सेव किए हुए ID और पासवर्ड + खोलें + दोबारा न पूछें + ऑफ़लाइन रीडिंग के लिए सुरक्षित करें + लाइव बॉक्स जोड़ें + जुलाई + फ़ोल्‍डर बनाएँ + जोड़ें + उच्च + वेबसाईट्स के लिए उपभोक्ता नाम और पासवर्ड्स सुरक्षित करें + जापानी (EUC-JP) + डाउनलोड प्रबंधक + अप्रैल + चीनी (बड़ा5) + बड़ा + वेबसाइट सेटिंग + सभी बंद करें + मद चुनें + सभी चुनें + पुन: लोड करें + पीछे जाएँ + इतिहास साफ़ करें? + कोई मदें नहीं + फ़ोल्डर + कस्टम उपयोगकर्ता एजेंट + डेस्कटॉप दृश्य + सित. + लिंक URL कॉपी करें + नए पेज में खोलें + बुध + कोई बुकमार्क नहीं + टैग जोड़ें + छवि देखें + ईमेल द्वारा भेजें + अनुमति नहीं + नए खुले हुए पेजों का ओवरव्‍यू दिखाएँ + बड़ा + पिकासा + थम्बनेल दृश्य + पेज़ पर ढूँढें + पासवर्ड + शीर्षक + टैक्स्ट एनकोडिंग + हटाया गया + सेटिंग्स + 1 मद चयनित + छोटा करें + टैग्‍स + टेक्स्ट चयन चालू + नया फ़ोल्‍डर + बुकमार्क मे जोड़ा गया + अनुमति दें + पढ़ने योग्य + छवियां दिखाएँ + स्वचालित + अक. + प्रॉक्‍सी पोर्ट + संपादित करें + ब्राउज़र इतिहास हटाएँ? + फ़ोल्‍डर नाम दर्ज करें + Message द्वारा भेजें + द्वारा देखें + मंगल + सोम + मल्टी विंडो + पहले से ही मौजूद + URL कॉपी करें + प्राथमिकता याद रखें + स्थान उपयोग साफ करें + सभी कुकीज़ डिलीट करें? + सुरक्षित किया सभी फॉर्म डाटा हटाएँ? + नेटवर्क त्रुटी + रोकें + पेज़ पर ढूँढें + दौरा किये गए साइट्स नहीं + शनि + डाउनलोड करें + बुकमार्क जोड़ें + स्थानीय कैचे सामग्री और डाटाबेस हटाएँ? + असफल हुआ + विंडो बंद करें + मध्यम + पिछला सप्ताह + वेबपेज प्र‍दर्शित करने में अक्षम। सर्वर से कोई प्रतिक्रिया नहीं + बुकमार्क हटाएँ + स्क्रैपबुक में जोड़ें + पुराना + पिछला + अधिक + ले जाएँ + बीता हुआ कल + चयन मोड + टैग नहीं किया गया + बनाया गया + SIM कार्ड डालें + बुकमार्क निकाला गया + वेब अधिसूचना अनुमति सेटिंग्स साफ़ करें + लिंक साझा करें + वेब फ़ॉर्म स्वत: भरण में टेक्‍स्‍ट सेट करें + ओके + छोटा + छवि कॉपी करें + सुरक्षित कनेक्शन + फ़ॉर्म डेटा + अधिकतम दौरा किए गए + चुनें + फोल्डर + नई विंडो खोलने में अक्षम। अधिकतम संख्‍या में विंडोज पहले से खोली गई है + जावास्क्रिप्ट चलाने के लिए साइट्स को अनुमति प्रदान करें + स्वतः रीफ्रेश करना + नई विंडो + नहीं + साइट्स को कुकी डाटा सुरक्षित करने और पढ़ने की अनुमती देता है + ट्रे बंद करने के लिए डबल टैप करें। + चलाएँ + टैग्स की अधिकतम संख्‍या (%d) तक पहुँच गया + लोड किया जा रहा है। कृपया प्रतीक्षा करें... + रद्द + मोबाइल डेटा अक्षम किया गया। Wi-Fi नेटवर्क का उपयोग करते हुए कनेक्ट करें, या मोबाइल डेटा सक्षम करें। + कुकीज + खाली पेज + खोजें + फ़र + निज़ी मोड अक्षम करें + कैचे साफ़ करें + पासवर्ड + उपभोक्ता नाम + अपने मोबाइल डिवाइस पर PC वेबसाइट्स आसानी से देखें। यह सुविधा टेक्स्ट पढ़ने में अधिक आसान करने हेतु उसका आकार बड़ा करती है। टिप्पणी: टेक्स्ट लेआउट बदल सकता है + बुकमार्क्स संपादित करें + संग्रहीत डाटा साफ़ करें + सभी वेबसाइट डाटा और स्थान अनुमतियाँ हटाएँ? + सभी चुनें + कभी नहीं + फ़ोल्‍डर चुनें + अंतिम देखे गए पेज + डेवलपर विकल्प + स्रोत भाषा + बुकमार्क्स + साफ़ + आज + हाँ + पेस्ट करें + अगला + होम स्क्रीन में जोड़ने में अक्षम। यह वेबसाइस इसका पूर्वावलोकन करने की अनुमति नहीं देती है। + उपभोक्ता एजेन्ट + अनपेक्षित विफलता + वेब अधिसूचना अनुमतियाँ साफ करें? + रवि + सुरक्षित किया + वेबपेज खोलने के लिए डबल टैप करें। + अतिरिक्त वेबपेज जानकारी + सामान्य + %d मदें चयनित + बुकमार्क्स में जोड़ें + छवि देखें + डाउनलोड शुरू कर रहे है... + खाली + बुकमार्क्स + फॉन्ट आकार + आगे जाएँ + Are you sure you want to clear history? + सभी कुकीज़ डाटा साफ़ करें + इंटरनेट इतिहास संग्रहीत नहीं है + ब्राउजिंग डेटा हटाएँ + जापानी (ISO-2022-JP) + कॉपी करें + फोल्डर का नाम + पॉप-अप अवरुद्ध करें + सिंक किए गए टैब + होम में जोड़े + सुरक्षित + अमान्य प्रमाणपत्र + गुप्त मोड + जन. + गोपनीयता और सुरक्षा + प्रिंट करें + इस साईट के सुरक्षा प्रमाणपत्र के साथ समस्‍याएँ है + चमक + हटाएँ? + फॉन्ट आकार + ऑटो-ढूँढना + फॉर्म डाटा याद रखें + हटाएँ + रद्द + सुरक्षा चेतावनी + डाउनलोड? + खोजें या URL दर्ज करें + फ़ॉर्म डाटा साफ़ करें + पासवर्ड्स याद रखें + इतिहास पर जाएँ + आज + अस्वीकारें + गोपनीयता + रीफ्रेश करें + वेब क्लिप + पासवर्ड्‍स साफ़ करें + होमपेज जैसे सेट करें + रद्द करें + बहुत बड़ा + सूचित किया जा रहा है... + गूगल + अंतिम 7 दिन + (कोई टैग्स नहीं) + हमेशा चालू + इतिहास + इंटरनेट बंद करने के लिए एक बार और टैप करें + बुकमार्क का नाम दर्ज करें + प्रमाणीकरण आवश्यक है + लिंक सुरक्षित करें + दोबारा नहीं दिखाएँ + क्लिपबोर्ड में कॉपी करें + फोल्डर का पुन: नाम दें + ऑटो सेव ID/पासवर्ड + सभी सेटिंग्स डीफ़ॉल्ट पर. जारी रखें? + मोबाइल + बुकमार्क्स चुनें + बंद करें + छोटा + डिफॉल्‍ट में रीसेट करें + कोरियाई (EUC-KR) + LTE/GSM/WCDMA (स्वत: कनेक्ट) + टैग का नाम बदलें + फ़ोल्डर बनाएँ + होमपेज + अमान्य वेब पता + डेस्कटॉप दृश्य + मेन्यू + यूआरएल नहीं मिला + मोबाइल दृश्य + नई विंडो में खोलें + ईमेल + शॉर्टकट बनाया है + डाटा कनेक्शन असफल + फॉर्म स्वत: भरण + आप का स्थान ऍक्सेस करने के लिए साईट्स को अनुमती दें + गुरु + फ़ोल्डर का नाम बदलें + बुकमार्क्स से हटाया गया + बुकमार्क + ओवरव्‍यू में पृष्ठ खोले + चौड़ाई में फिट करें + जुल. + डाटा नेटवर्क + युनिकोड (UTF-8) + बुकमार्क जोड़ा गया + इतिहास + अंतिम महीना + हुआ + बुकमार्क संपादित करें + सभी सुरक्षित किए गए पासवर्ड्स हटाएँ? + सूची + बुकमार्क्स में शामिल करें + मई + सुरक्षा नीति इंटरनेट ब्राउजर के उपयोग को प्रतिबंधित करती है + मा. + URL + Bookmark जोड़ने में अक्षम। Bookmarks की संख्‍या अधिकतम हो गई + हमेशा पूछें + पेज सुरक्षित करें + शब्‍द चुनें + सुरक्षा चेतावनियां दिखाएँ + फोल्डर बनाएँ + सभी हटाएँ + चयनित बुकमार्क्स हटाएँ? + वैयक्तिकृत डाटा साफ़ करें + सभी ब्राउज़र डेटा साफ़ करें और सभी सेटिंग्‍स डिफ़ॉल्‍ट पर रिसेट करे + वेब पेजों की छवियाँ दिखाएँ + शब्दकोष + डीफ़ॉल्ट दृश्य + टैग के द्वारा सॉर्ट करें + वेब ऐप स्थापित करें + ब्राउजर के बारे में + निज़ी मोड + स्क्रैपबुक + खोज इंजन + बाद में उपयोग करने हेतु मेरे द्वारा फॉर्म मे टाईप किया डाटा याद रखे + कोई शीर्षक नहीं + %d सप्ताह पहले + होम स्क्रीन पर जोड़े + स्थान सक्षम करें + यूआरएल प्रविष्ट करें + मैनुअल + कोई इतिहास नहीं + जावा स्क्रिप्ट चलाएँ + %s आपके स्थान का अनुरोध करता है + शुक्र + संस्करण + सन्देश + कैचे + संपादन + सामान्य + सुरक्षित किए हुए पेज + %s को सूचनाएँ दिखाने दें + वेब पेजों पर पॉप-अप्स अवरूद्ध करें + छवि सुरक्षित करें + अधिकतम दौरा किये गए साइट्स + बीता हुआ कल + शीर्षक प्रविष्ट करें + दिस. + सभी हटाए जा चुके हैं + %d मद चुनी गया + इमेज सेव करने में अक्षम + सन्देश + पुन: क्रम + टेक्स्ट का आकार स्वतः बदलें + वेबसाइट स्थान ऍक्सेस जानकारी हटाएँ? + सूची दृश्य + चयनित बुकमार्क्स ले जाएँ? + पर्याप्‍त मेमोरी नहीं + पर्याप्त मेमोरी नहीं। कुछ मदें हटाएँ + diff --git a/res/hrv-HR.xml b/res/hrv-HR.xml new file mode 100644 index 0000000..687f1b1 --- /dev/null +++ b/res/hrv-HR.xml @@ -0,0 +1,345 @@ + + + + Web obavijest + Povuci + Nema rezultata + Stu + Zalijepi + Postavke stranice + Napredne postavke za pojedinačne web adrese + Poč. str. korisnika + UPRAVLJ. PROZORIMA + Auto + Brisanje povijesti + Trenutna stranica + Zatvori sve otvorene prozore i idi na početnu stranicu + Prihvati kolačiće + Dijeli + Kineski (GBK) + Latin-1 (ISO-8859-1) + Razvojni način + Lipanj + Učitaj slike + OK + Postavke + Ogromno + Greška podatkovne veze + Kol + Postavi trenutnu stranicu kao početnu + Postavke + Obriši + Japanski (SHIFT JIS) + Spremljeno korisničko ime i lozinka + Početna + Više ne pitaj + Spremi za izvanmrežno čitanje + Dodaj Livebox + Srpanj + Nova mapa + Dodaj + Visoki + Spremi korisnička imena i šifre za internet stranice + Japanski (EUC-JP) + Upravljanje skidanja + Travanj + Kineski (Big5) + Velika + Postavke web stranice + Zatvori sve + Odaberite stavke + Odaberi sve + Učitaj ponovo + Nazad + Obrisati povijest? + Nema stavki + MAPA + prilagodi korisničkog agenta + Računalna verzija stranice + Ruj + Kopiraj adresu + Otv. u novoj str. + Sri + Nema favorita + Dodaj oznaku + Prikaži sliku + Pošalji emailom + Nije dopušteno + Prikaz posljednjih stranica + Velika + Picasa + Sličice + Traži na stranici + Lozinka + Naslov + Kodiranje teksta + Obrisano + Postavke + 1 stavka odabrana + Minimiziraj + Oznake + Odabir teksta uključen + Nova mapa + Dodano u Favorite + Dopusti + Čitljivo + Prikaz slika + Automatski + Lis + Proxy ulaz + Uredi + Obrisati povijest preglednika? + Unesite naziv mape + Pošalji putem poruke + Pregled po + Uto + Pon + Više prozora + Već postoji + Kopiraj adresu + Spremi postavke + Obriši pristup lokaciji + Obrisati sve kolačiće? + Obrisati sve spremljene podatke s obrazaca? + Greška mreže + Prekid + Traži na stranici + Nema posjećenih stranica + Sub + Skidanje + Dodaj u favorite + Obrisati lokalno spremljeni sadržaj i baze podataka? + Neuspješno + Zatvori prozor + Srednje + Zadnji tjedan + Nemoguće prikazati internet stranicu. Poslužitelj ne reagira + Obriši favorita + Dodaj u album izrezaka + Starije + Nazad + Više + Premjesti + Jučer + Način odabira + Bez oznake + Stvoreno + Umetnite SIM karticu + Favorit uklonjen + Brisanje svih postavki dopuštenja za web-obavijesti + Pošalji vezu + Postavite tekst za automatsko ispunjavanje internet obrazaca + OK + Mala + Kopiraj sliku + Sigurna veza + Podaci formi + Najposjećenije + Odaberi + Mapa + Nemoguće otvoriti novi prozor. Već je otvoren maks. broj prozora + Dopusti stranicama pokretanje JavaScripta + Automatsko aktualiziranje + Novi prozor + Ne + Dopušta stranicama spremanje i čitanje podataka iz kolačića + Dvostrukim dodirom zatvorite traku. + Reproduciraj + Dosegnut maksimalan broj oznaka (%d) + Učitavanje. Pričekajte... + Prekid + Mobilni podaci isključeni. Povežite se pomoću Wi-Fi mreže ili uključite mobilne podatke + Kolačići + Prazna stranica + Traži + Velj + Isključi privatni način rada + Obriši međuspremnik + Lozinka + Korisničko ime + Pregledajte internet stranice računala na svom mobilnom uređaju. Značajka povećava veličinu teksta radi lakšeg čitanja. Napomena: Izgled teksta mogao bi se promijeniti + UREDI FAVORITE + Obriši spremljene podatke + Obrisati sve podatke o internet stranici i dozvole lokacije? + Odaberi sve + Nikad + Odaberi mapu + Posljednja pregledana stranica + Opcije razvoja + Izvorišni jezik + Favoriti + Obriši + Danas + Da + Zalijepi + Dalje + Nije moguće dodati na početni zaslon. Ova web-stranica ne dopušta pregledavanje + Korisnički agent + Neočekivana greška + Obrisati sva dopuštenja za web obavijesti? + Ned + Spremljeno + Dvostrukim dodirom otvorite web-stranicu. + Dodatni podaci o web-str. + Normalna + %d odabranih stavki + Dodaj u Favorite + Prikaži sliku + Pokretanje skidanja... + Prazno + Favoriti + Veličina slova + Naprijed + Are you sure you want to clear history? + Obriši sve podatke kolačića + Internet povijest nije spremljena + Obriši podatke pretraživanja + Japanski (ISO-2022-JP) + Kopiraj + Ime mape + Blokiraj pop-up prozore + Sinkronizirano + Dodaj na početnu + Spremi + Neispravna potvrda + Tajni način + Sij + Privatnost i sigurnost + Ispis + Greška sigurnosne potvrde za ovu stranicu + Svjetlina + Obriši? + Veličina slova + Auto. prepoznavanje + Zapamti unose obrazaca + Obriši + Prekid + Sigurnosno upozorenje + Skinuti? + Potražite ili unesi URL + Obriši unose obrazaca + Zapamti šifre + Idi u povijest + Danas + Odbaci + Privatnost + Aktualiziraj + Web-isječak + Obriši šifre + Postavi kao početnu stranicu + Prekid + Jako veliko + Obaviješćivanje... + Google + Posljednjih 7 dana + (bez oznaka) + Uvijek uključeno + POVIJEST + Dodirnite još jednom za zatvaranje Interneta + Unesite naziv favorita + Provjera potrebna + Spremi vezu + Ne prikazuj više + Kopiraj u međuspremnik + Preimenuj mapu + Auto. spremanje kor. imena/šifre + Sve postavke na zadano. Nastaviti? + Mobitel + Odaberi favorite + Prekid + Mala + Vrati na zadano + Korejski (EUC-KR) + LTE//GSM/WCDMA (automatsko spajanje) + Preimenuj oznaku + IZRADI MAPU + Početna stranica + Neispravna adresa + Računalna verzija stranice + Meni + Adresa nije pronađena + Mobilni prikaz + Otvori u novi prozor + Email + Prečac spremljen + Neuspješna podatkovna veza + Automatski popuni obrasce + Dopusti stranicama pristup podacima o lokaciji + Čet + PREIMENUJ MAPU + Uklonjeno iz Favorita + Favorit + Otvori stranice + Prilagodi širini + Srp + Podatkovna mreža + Unicode (UTF-8) + Dodano u favorite + Povijest + Prošli mjesec + OK + Uredi favorita + Obrisati sve spremljene šifre? + Popis + Dodaj u favorite + Svibanj + Sigurnosne odredbe ograničavaju korištenje internet preglednika + Ožu + Adresa + Nemoguće dodati favorita. Maks. broj favorita + Uvijek pitaj + Spremi stranicu + Odaberite riječ + Prikaži sigurnosna upozorenja + Nova mapa + Obriši sve + Izbrisati odabrane favorite? + Obriši personalizirane podatke + Obriši sve podatke i vrati zadane postavke + Prikaz slika na internet stranicama + Rječnik + Zadani prikaz + Razvrstaj po oznaci + Instaliraj internet aplikaciju + O pretraživaču + Uključi privatni način rada + Album s izrescima + Pretraživač + Zapamti unose obrazaca za kasnije korištenje + Nema naslova + Prije %d tjedana + Dodaj na početni zaslon + Uključi lokaciju + Unesite adresu + Ručno + Nema povijesti + Pokreni JavaScript + %s traži vašu lokaciju + Pet + Verzija + Poruka + Međuspremnik + Uredi + Općenito + Spremljene stranice + Dopusti %s da prikazuje obavijesti + Blokiraj skočne prozore na internet stranicama + Spremi sliku + Najposjećenija mjesta + Jučer + Unesite naslov + Pro + Sve obrisano + %d stavka odabrana + Nemoguće spremiti sliku + Poruke + Poredaj + Auto. promj. veličine teksta + Obrisati informacije o pristupu lokaciji web stranice? + Prikaz liste + Premjestiti odabrane oznake? + Memorija nedovoljna + Nedovoljno memorije. Obrišite neke datoteke + diff --git a/res/hun-HU.xml b/res/hun-HU.xml new file mode 100644 index 0000000..25523b0 --- /dev/null +++ b/res/hun-HU.xml @@ -0,0 +1,345 @@ + + + + Webes értesítés + Húzás + Nincs találat + nov. + Beilleszt + Oldaltartalom beállításai + Az egyes webhelyek speciális beállításai + Felhasználó kezdőlapja + ABLAKKEZELŐ + Auto. + Előzmények törlése + Jelenlegi oldal + Zárjon be minden nyitott ablakot, és nyissa meg a kezdőlapot + Cookie-k elfogadása + Megosztás + Kínai (GBK) + Latin-1 (ISO-8859-1) + Fejlesztői üzemmód + június + Képek betöltése + Kész + Beállítások + Nagyon nagy + Adatkapcsolati probléma + aug. + Aktuális oldal beállítása kezdőlapként + Beállítások + Töröl + Japán (SHIFT JIS) + Mentett azonosító és jelszó + Megnyitás + Máskor ne legyen kérdés + Mentés offline olvasáshoz + Élőmező hozzáadása + július + Mappát létrehoz + Hozzáad + Magas + Webhelyeken használt felhasználónevek és jelszavak mentése + Japán (EUC-JP) + Letöltéskezelő + április + Kínai (Big5) + Nagy + Webhelybeállítások + Összes bezárása + Jelöljön ki tételeket + Összes kijelölése + Újratöltés + Vissza + Törli az előzményeket? + Nincs tétel + MAPPA + User agent testreszabása + Asztali nézet + szep + URL másolása + Megny. új oldalon + Sze + Nincs könyvjelző + Címke hozzáadása + Képet megtekint + Küldés e-mailben + Nem engedélyezett + Újonnan megnyitott oldalak áttekintésének megjelenítése + Nagy + Picasa + Miniatűrnézet + Keresés az oldalon + Jelszó + Cím + Szöveg kódolása + Törölve + Beállítások + 1 tétel kijelölve + Kis méret + Címkék + Szövegkijelölés be + Új mappa + Könyvjelzőkhöz adva + Engedélyezés + Olvasható + Képek megjelenítése + Automatikus + okt. + Proxy port + Szerkeszt + Törli a böngésző előzményeket? + Adja meg a mappa nevét + Küldés üzenetben + Nézet + Ke + Hét + Több ablak + Már létezik + URL beillesztése + Beállítások megjegyzése + Helyadatok törlése + Törli a cookie-kat? + Töröl minden mentett űrlapadatot? + Hálózati hiba + Leállít + Keresés az oldalon + Nincs meglátogatott hely + Szo + Letöltés + Könyvjelző hozzáadása + Törli a helyi gyorsítótárba helyezett tartalmat és adatbázisokat? + Sikertelen + Ablak bezárása + Közepes + Utolsó hét + Nem lehet megjeleníteni a webhelyet. A szerver nem válaszol + Könyvjelző törlése + Kivágatgyűjtő könyvbe + Régebbi + Előző + Egyebek + Áthelyez + Tegnap + Kijelölési mód + Címkézetlen + Létrehozva + Helyezze be a SIM kártyát + Könyvjelző eltávolítva + Webes értesítések engedélyeinek törlése + Link megosztása + Automatikus webűrlapkitöltés adatainak megadása + OK + Kicsi + Kép másolása + Biztonságos kapcs. + Űrlap adatok + Leggyakr. látogatott + Választ + Mappa + Nem lehet új ablakot nyitni. Maximális számú ablak van megnyitva + JavaScript futtatásának engedélyezése a webhelyek számára + Automatikus frissítés + Új ablak + Nem + Cookie-adatok mentésének és olvasásának engedélyezése a webhelyek számára + Érintse meg kétszer a tálca bezárásához. + Lejátszás + Elérte a címkék maximális számát (%d) + Betöltés. Kis türelmet... + Mégse + Mobil internetkapcsolat letiltva. Kapcsolódjon Wi-Fi hálózattal, vagy engedélyezze a mobil internetkapcsolatot + Cookie-k + Üres oldal + Keresés + feb. + Privát üzemmód letiltása + Gyorsítótár ürítése + Jelszó + Felhasználónév + Nem jelent problémát a számítógépes webhelyek megtekintése a mobileszközön. A funkció megnöveli a szöveg méretét, így az olvashatóbbá válik. Megjegyzés: megváltozhat a szöveg elrendezése + KÖNYVJELZŐK SZERKESZTÉSE + Mentett adatok törlése + Töröl minden webhelyadatot és geolokációs engedélyt? + Összes kijelölése + Soha + Válasszon mappát. + Legutóbb megtekintett oldal + Fejlesztői beállítások + Forrásnyelv + Könyvjelzők + Törlés + Ma + Igen + Beilleszt + Tovább + Nem lehet felvenni a kezdőképernyőre. A webhely nem teszi lehetővé az előnézetet + User agent + Böngésző foglalt. Próbálja újra. + Törli a webes értesítések engedélyeit? + Vas + Mentve + Érintse meg kétszer a weboldal megnyitásához. + Weboldal további adatai + Normál + %d tétel kijelölve + Könyvjelző mentése + Képet megtekint + Letöltés indítása... + Üres + Könyvjelzők + Betűméret + Előre + Are you sure you want to clear history? + Minden cookie törlése + Internetes előzmények mentése nélkül + Böngészési adatok törlése + Japán (ISO-2022-JP) + Másol + Mappa neve + Előugró ablakok blokkolása + Szinkronizált lapok + Kezdőképernyőhöz adás + Ment + Érvénytelen tanúsítvány + Inkognitó üzemmód + jan. + Adatvédelem és biztonság + Nyomtatás + Probléma merült fel a webhely biztonsági tanúsítványával kapcsolatban + Fényerő + Töröl? + Betűméret + Automatikus észlelés + Űrlapadatok megjegyzése + Töröl + Mégse + Biztonsági figyelmeztetés + Letöltés? + Keressen vagy írjon be URL-t + Űrlapadatok törlése + Jelszót megjegyez + Előzmények megnyitása + Ma + Elutasít + Védett adataim + Frissítés + Webmetszet + Jelszavak törlése + Beállítás kezdőlapként + Mégse + Nagyon nagy + Értesítés... + Google + Az elmúlt 7 napban + (nincs címke) + Mindig bekapcsolva + ELŐZMÉNYEK + Érintse meg újból az Internet bezárásához + Adja meg a könyvjelző nevét + Hitelesítés szükséges + Hivatkozás mentése + Ne jelenjen meg újra + Másolás a vágólapra + Mappa átnevezése + Automatikus mentés azonosítója/jelszava + Visszaáll az összes beállítás alapértelmezése. Folytatja a műveletet? + Mobil + Könyvjelzők kijelölése + Bezárás + Kicsi + Alapértelmezés visszaállítása + Koreai (EUC-KR) + LTE/GSM/WCDMA (automatikus kapcsolódás) + Címke átnevezése + MAPPA LÉTREHOZÁSA + Kezdőlap + Érvénytelen URL + Asztali nézet + Menü + URL nem található + Mobilnézet + Megny. új ablakban + E-mail + Alkalmazásindító létrehozva + Sikertelen adatkapcsolat + Automatikus űrlapkitöltés + Helyadatok lekérésének engedélyezése webhelyek számára + Csü + MAPPA ÁTNEVEZÉSE + Törölve a könyvjelzők közül + Könyvjelző + Új oldalak áttekintése + Szélességhez + júl. + Adathálózat + Unicode (UTF-8) + Könyvjelző hozzáadva + Előzmények + Elmúlt hónap + Kész + Könyvjelző szerkesztése + Törli az összes mentett jelszót? + Lista + Könyvjel. mentése + máj. + A biztonsági irányelv korlátozza az internetböngésző használatát + már. + URL + A könyvjelzőt nem lehetett hozzáadni. Elérte a könyvjelzők maximális számát + Mindig kérdezzen rá + Oldal mentése + Szó kiválasztása + Biztonsági figyelmeztetések + Mappa létrehozása + Összes törlése + Törli a kijelölt könyvjelzőket? + Személyre szabott adatok törlése + Minden böngészőadat törlése és az alapértelmezett beállítások visszaállítása + Képek megjelenítése weboldalakon + Szótár + Alapértelmezett nézet + Rendezés címke szerint + Webalkalmazás telepítése + A böngésző névjegye + Privát üzemmód engedélyezése + Kivágatgyűjtő könyv + Kereső + Űrlapokba beírt adatok megjegyzése a későbbiekre + Nincs cím + %d héttel ezelőtt + Kezdőképernyőhöz adás + Hely engedélyezése + Írja be az URL-t + Kézi + Nincs előző oldal + JavaScript futtatása + A(z) %s az Ön helyadatait kéri + Pén + Verzió + Üzenet + Gyorsítótár + Szerkeszt + Általános + Mentett oldalak + Értesítések megjelenítésének engedélyezése a(z) %s számára + Előugró ablakok blokkolása a weboldalakon + Kép mentése + Leggyakrabban látogatott helyek + Tegnap + Cím megadása + dec. + Mindent töröl + %d tétel kijelölve + A képmentés sikertelen + Üzenetek + Átrendezés + Szöveg automata átméretezése + Törli a webhely helyadat-hozzáférési információit? + Listanézet + Áthelyezi a kijelölt könyvjelzőket? + Kevés a memória + Kevés a memória. Töröljön néhány tételt + diff --git a/res/hye-AM.xml b/res/hye-AM.xml new file mode 100644 index 0000000..d27b11c --- /dev/null +++ b/res/hye-AM.xml @@ -0,0 +1,345 @@ + + + + Համացանցային ծանուցում + Քաշել + Արդյունքներ չեն գտնվել + Նոյ + Տեղադրել + Էջի բվնդկության դրվածքներ + Ընդլայնված դրվածքներ անհատական կայքերի համար + Օգտվողի հիմնաէջ + ՊԱՏՈՒՀԱՆԻ ԿԱՌԱՎԱՐԻՉ + Ավտոմատ + Մաքրել պատմությունը + Ընթացիկ էջ + Փակեք բոլոր բաց պատուհաններն ու գնացեք հիմնաէջ + Ընդունել թխուկները + Համատեղ օգտագործում + Չինարեն (GBK) + Լատիներեն-1 (ISO-8859-1) + Մշակողի ռեժիմ + Հունիս + Բեռնել պատկերներ + Արված է + Պարամետրեր + Հսկա + Տվյալների կապակցման խնդիր + Օգս + Ընթացիկ էջը դնել որպես հիմնաէջ + Պարամետրեր + Ջնջել + Ճապոներեն (SHIFT JIS) + Պահպանված ՆՀ և գաղտնաբառ + Բացել + Այլևս չհարցնել + Պահպանել արտացանցային ընթերցման համար + Ավելացնել Լիվբոքս + Հուլիս + Ստեղծել թղթպանակ + Ավելացնել + Բարձր + Պահպանել օգտվողի անուններն ու գաղտնաբառերը կայքերի համար + Ճապոներեն (EUC-JP) + Ներբեռնման կառավարիչ + ապրիլ + Չինարեն (Big5) + Մեծ + Կայքի դրվածքներ + Փակել բոլորը + Ընտրել տարրեր + Ընտրել բոլորը + Վերաբեռնել + Անցնել հետ + Մաքրե՞լ պատմությունը: + Տարրեր չկան + ՊԱՆԱԿ + Օգտվողի ընտրովի գործակալ + Աշխատասեղանի դիտում + Սպտ + Պատճենել URL-ն + Բացել նոր էջում + Չրք + Էջանիշներ չկան + Ավելացրեք հատկորոշիչ + Տեսնել պատկերը + Ուղարկել էլփոստով + Թույլատրված չէ + Ցույց տալ նոր բացված էջերի արագ դիտումը + Մեծ + Picasa + Փոքրացված պատկերների տեսք + Գտնել էջում + Գաղտնաբառ + Վերնագիր + Գրվածքի այլագրում + Ջնջված է + Պարամետրեր + 1 տարր է ընտրվել + Նվազարկել + Հայտանիշեր + Տեքստի ընտրությունը միացված է + Նոր թղթապանակ + Հավելված է էջանիշներին + Թույլատրել + Ընթեռնելի + Ցույց տալ պատկերներ + Ավտոմատ + Հոկտ + Պրոքսիի պորտ + Խմբագրել + Վերացնե՞լ զննարկչի պատմությունը: + Մուտքագրեք թղթապանակի անունը + Ուղարկել հաղորդագրության միջոցով + Դիտել մջց + Երք + Երկ + Բազմապատուհան + Արդեն գոյություն ունի + Պատճենել հասցեն + Հիշել նախապատվությունը + Մաքրել տեղի մուտքը + Ջնջե՞լ բոլոր թխուկները + Վերացնե՞լ բոլոր պահպանված ձևի տվյալները: + Ցանցի սխալ + Դադարեցնել + Գտնել էջում + Այցելված կայքեր չկան + Շբթ + Ներբեռնել + Էջանիշ ավելացնել + Վերացնե՞լ հիշապահեստում տեղայնորեն պահված բովանդակությունն ու տվյալների շտեմարանները: + Ձախողվեց + Փակել պատուհանը + Միջին + Վերջին շաբաթ + Անհնար է ցուցադրել կայքէջը: Սերվերից պատասխան չկա + Ջնջել էջանիշը + Ավ. կտրածոների ալբոմին + Ավելի հին + Նախորդ + Ավելին + Տեղափոխել + Երեկ + Ընտրության ռեժիմ + Չհատկորոշված + Ստեղծված է + Տեղադրեք SIM քարտ + Էջանիշը հեռացվեց + Մաքրել համացանցային ծանուցման թույլտվությունների դրվածքները + Համօգտագործել հղումը + Դնել տեքստ համացանցային ձևաթղթի ինքնալրացման համար + Ընդունել + Փոքր + Պատճենել պատկեր + Անվտանգ միացում + Ձևի տվյալներ + Առավել այցելված + Ընտրել + Թղթապանակ + Անհնար է բացել նոր պատուհան: Առավելագույն թվով պատուհաններ արդեն բաց են + Թույլ տալ, որ կայքերը գործարկեն JavaScript + Ինքնանորացում + Նոր պատուհան + Ոչ + Կայքերին թույլ է տալիս պահպանել և կարդալ թխուկների տվյալներ + Կրկնակի թակեք՝ մատուցարանը փակելու համար + Նվագել + Հասել է հատկորոշիչների առավելագույն քանակին (%d) + Բեռնվում է: Խնդրում ենք սպասել... + Չեղարկել + Շարժական տվյալները կասեցված են: Միացեք՝ օգտագործելով Wi-Fi ցանց, կամ ընձեռեք շարժական տվյալներ + Cookies + Դատարկ էջը + Որոնել + Փտրվ + Կասեցնել գաղտնի կապի ռեժիմը + Դատարկել հիշապահեստը + Գաղտնաբառ + Օգտվողի անուն + Ձեր շարժական սարքում հեշտությամբ դիտեք ԱՀ կայքեր: Այս գործառական հնարավորությունը մեծացնում է տեքստի չափը, որպեսզի հեշտանա այն կարդալը: Նշում. տեքստի դասավորվածքը կարող է փոխվել + ԽՄԲԱԳՐԵԼ ԷՋԱՆԻՇԵՐԸ + Մաքրել պահված տվյալները + Վերացնե՞լ կայքի բոլոր տվյալները և տեղի թույլտվությունները: + Ընտրել բոլորը + Երբեք + Ընտրեք թղթապանակ + Վերջին դիտված էջ + Մշակողի ընտրանքներ + Բնօրինակ լեզու + Էջանիշեր + Մաքրել + Այսօր + Այո + Տեղադրել + Հաջորդ + Անհնար է ավելացնել հիմնական էկրանին: Այս կայքը թույլ չի տալիս այն նախադիտել + Օգտվողի գործակալ + Անսպասելի ձախողում + Մաքրե՞լ համացանցային ծանուցման թույլտվությունները: + Կիր + Պահպանվեց + Կրկնակի թակեք՝ կայքէջը բացելու համար + Կայքէջի լրացուցիչ տեղեկ. + Նորմալ + %d տարր է ընտրվել + Ավելացնել Էջանիշերում + Տեսնել պատկերը + Ներբեռնման մեկնարկում... + Դատարկ է + Էջանիշեր + Տառաչափ + Անցնել առաջ + Are you sure you want to clear history? + Ջնջել թխուկների ողջ տվյալները + Ինտերնետի պատմությունը չի պահվել + Ջնջել զննարկման տվյալները + Ճապոներեն (ISO-2022-JP) + Պատճենել + Թղթապանակի անունը + Արգելափակել ելնող պատուհանները + Համաժամացված ներդիրներ + Ավելացնել հիմնական էկրանին + Պահել + Անվավեր վկայական + Ծպտյալ ռեժիմ + Հնվ + Գաղտնիություն և անվտանգություն + Տպել + Այս կայքն ունի անվտանգության վկայագրերի խնդիր + Պայծառություն + Ջնջել? + Տառաչափ + Ինքնաբերաբար հայտնաբերել + Հիշել տվյալներից + Ջնջել + Չեղկլ + Անվտանգության զգուշացում + Ներբեռնե՞լ + Որոնել կամ մուտքագրել URL + Ջնջել տվյալներից + Հիշել գաղտնաբառերը + Գնալ դեպի պատմություն + Այսօր + Հրաժարվել + Գաղտնիություն + Թարմացնել + Համացանցային հոլովակ + Մաքրել գաղտնաբառերը + Դրվել է որպես հիմնաէջ + Դդրեցնել + Խոշոր + Ծանուցում... + Google + Վերջին 7 օրը + (առանց պիտակի) + Միշտ միացված + ՊԱՏՄՈՒԹՅՈՒՆ + Ինտերնետը փակելու համար թակեք ևս մեկ անգամ + Մուտքագրեք էջանիշի անվանումը + Պահանջվում է վավերականացում + Պահպանել հղումը + Այլևս երբեք ցույց չտալ + Պատճենել փոխանակման բունկերի մեջ + Վերանվանել թղթապանակը + ՆՀ/գաղտնաբառի ինքնաբերական պահպանում + Բոլոր դրվածքները՝ կանխադրված: Շարունակե՞լ: + Բջջային + Ընտրել էջանիշեր + Փակել + Փոքր + Զրոյացնել լռելյայնի + Կորեերեն (EUC-KR) + LTE/GSM/WCDMA (ինքնամիացում) + Վերանվանել հայտանիշը + ՍՏԵՂԾԵԼ ՊԱՆԱԿ + Սկզբնական էջ + Անվավեր URL + Աշխատասեղանի դիտում + Ցանկ + URL չի գտնվել + Շարժական դիտում + Նոր պատուհանում + Էլ. Փոստ + Ստեղծված է կարճատ + Տվյալների միացումը ձախողվեց + Ինքնալրացվող ձևեր + Կայքերին թույլ տալ մուտք խնդրել դեպի Ձեր գտնվելու տեղը + Հնգ + ՎԵՐԱՆՎԱՆԵԼ ՊԱՆԱԿ + Հեռացված է էջանիշերից + Էջանիշ + Էջ. բացել արագ դիտ. մեջ + Տեղավորել լայնքի վրա + Հուլ + Տվյալների ցանց + Յունիկոդ (UTF-8) + Էջանիշն ավելացվել է + Պատմություն + Անցյալ ամիս + Պատրաստ + Խմբագրել էջանիշը + Վերացնե՞լ բոլոր պահպանված գաղտնաբառերը: + Ցանկ + Ավելաց. Էջանիշերում + Մայ + Անվտանգության քաղաքականությունը սահմանափակում է ինտերնետային զննարկչի օգտագործումը + Մրտ + URL + Անհնար է ավելացնել էջանիշը: Հասել եք էջանիշերի առավելագույն քանակին + Միշտ հարցնել + Պահպանել էջը + Ընտրել բառ + Ցուցադրել անվտանգության զգուշացումները + Ստեղծել թղթապանակ + Ջնջել բոլորը + Վերացնե՞լ ընտրված էջանիշերը: + Մաքրել անհատականացված տվյալները + Ջնջել զննիչի ողջ տեղեկությունը և վերակայել բոլոր լռելյայն կայվածքները + Ցուցադրել պատկերները կայքերում + Բառարան + Կանխադրված դիտում + Տեսակավորել ըստ հատկորոշիչի + Տեղադրել համացանցային ծրագիր + Իմ դիտարկչի մասին + Ընձեռել գաղտնի կապի ռեժիմը + Կտրածոների ալբոմ + Որոնիչ + Հիշել տպվելիք տվյալներ` հետագա օգտագործման համար + Վերնագիր չկա + %d շաբաթ առաջ + Ավելացնել հիմնական էկրանին + Ընձեռել տեղ + Մուտքագրեք հասցեն + Ձեռքով + Պատմություն չկա + Գործարկել JavaScript + %s Ձեր տեղի հարցում է կատարում + Ուրբ + Տարբերակ + Հաղորդագրություն + Կեշ + Խմբագրել + Ընդհանուր + Պահպանված էջ + Թույլ տալ, որ %s ցույց տա ծանուցումները + Արգելափակել ելնող պատուհանները կայքէջերում + Պահպանել պատկերը + Առավել այցելված կայքեր + Երեկ + Մուտքագրեք վերնագիրը + Դեկտ + Բոլորը ջնջված են + %d տարր է ընտրվել + Անհնար է պահել պատկերը + Հղրդգրթ + Վերադասավորել + Ինքնաբար փոխել տեքստի չափերը + Վերացնե՞լ կայքի տեղի մուտքի մասին տեղեկատվությունը: + Դիտման ռեժիմների ցանկ + Տեղափոխե՞լ ընտրված էջանիշերը: + Չկա բավական հիշողություն + Հիշողությունը չի բավարարում: Ջնջեք որոշ տարրեր + diff --git a/res/isl-IS.xml b/res/isl-IS.xml new file mode 100644 index 0000000..7025319 --- /dev/null +++ b/res/isl-IS.xml @@ -0,0 +1,345 @@ + + + + Veftilkynning + Draga + Ekkert fannst + nóv. + Líma + Efnisstillingar síðu + Ítarlegar stillingar fyrir einstaka vefsvæði + Heimasíða notanda + GLUGGASTJÓRNUN + Sjálfvirkt + Hreinsa feril + Opin síða + Loka öllum opnum gluggum og fara á upphafssíðuna + Samþykkja fótspor + Samnýta + Kínverska (GBK) + Latin-1 (ISO-8859-1) + Hönnunarstilling + Júní + Hlaða inn myndum + Lokið + Stillingar + Risastórt + Vandamál í gagnatengingu + ág. + Velja opna síðu sem upphafssíðu + Stillingar + Eyða + Japanska (SHIFT JIS) + Vistað notandanafn og lykilorð + Opna + Ekki spyrja aftur + Vista og lesa án tengingar + Bæta við kvikum reit + Júlí + Búa til möppu + Bæta við + Mikið + Vista notandanöfn og lykilorð fyrir vefsvæði + Japanska (EUC-JP) + Stjórnun niðurhals + apríl + Kínverska (Big5) + Stórt + Vefsíðustillingar + Loka öllu + Velja hluti + Velja allt + Endurhlaða + Fara til baka + Eyða sögu? + Engin atriði + MAPPA + Sérstilla biðlara notanda + Skjáborðsskjár + Sep. + Afrita tengil + Opna á nýrri síðu + Mið + Ný bókamerki + Bæta við merki + Skoða mynd + Senda í tölvupósti + Er óheimilt + Sýna yfirlit yfir nýlega opnaðar síður + Stórt + Picasa + Smámyndir + Finna á síðu + Aðgangsorð + Titill + Textakóðun + Eytt + Stillingar + 1 atriði valið + Fela + Merki + Það er kveikt á textavali + Ný mappa + Bætt við bókamerki + Leyfa + Læsileg + Sýna myndir + Sjálfvirkt + okt. + Tengi fyrir staðgengilnetþjón + Breyta + Eyða vafrasögu? + Ritið heiti möppu + Á að senda með skilaboðum? + Birta eftir + Þri + Mán + Margir gluggar + Er þegar til + Afrita slóð + Muna stillingu + Hreinsa aðgang að staðsetningu + Viltu eyða öllum fótsporum? + Eyða öllum vistuðum upplýsingum um innslátt? + Netvilla + Stöðva + Finna á síðu + Engin opnuð svæði + Lau + Niðurhal + Bæta við bókamerki + Eyða gagnagrunnum og staðbundnu efni í skyndiminni? + Mistókst + Loka glugga + Miðlungs + Síðasta vika + Ekki er hægt að birta vefsíðuna. Netþjónninn svarar ekki + Eyða bókamerki + Bæta við úrklippubók + Eldri + Fyrri + Meira + Færa + Í gær + Valstilling + Ómerkt + Búið til + Setjið gagnakortið í + Bókamerki fjarlægt + Hreinsa heimildastillingar veftilkynninga + Samnýta tengil + Stilla texta fyrir sjálfvirka innfyllingu vefeyðublaða + Í lagi + Lítið + Afrita mynd + Örugg tenging + Innsláttargögn + Oftast heimsótt + Velja + Mappa + Ekki er hægt að opna nýjan glugga. Búið er að opna hámarksfjölda glugga + Leyfa vefsvæðum að keyra JavaScript + Sjálfvirk uppfærsla + Nýr gluggi + Nei + Leyfir vefsvæðum að vista og lesa fótsporagögn + Tvípikkaðu til að loka bakkanum. + Spila + Hámarksfjölda merkja (%d) hefur verið náð + Hleður. Andartak... + Hætta við + Slökkt á farsímagögnum. Tengdu með Wi-Fi eða opnaðu fyrir farsímagögn + Fótspor + Auð síða + Leit + feb. + Slökkva á einkastillingu + Hreinsa skyndiminni + Aðgangsorð + Notandanafn + Skoðaðu tölvuvefsíður á einfaldan hátt í fartækinu. Þessi eiginleiki stækkar textann til að gera hann auðlesanlegri. Athugaðu: Umbrot textans kann að breytast + BREYTA BÓKAMERKJUM + Hreinsa geymd gögn + Eyða öllum gögnum á vefsíðu og staðsetningarleyfum? + Velja allt + Aldrei + Velja möppu + Síðasta síða sem var birt + Forritaravalkostir + Frummál + Bókamerki + Hreinsa + Í dag + Já + Líma + Næsta + Ekki er hægt að bæta á heimaskjá. Þetta vefsvæði leyfir ekki forskoðun + Fulltrúi notanda + Óvænt bilun + Viltu hreinsa heimildir veftilkynninga? + Sun + Vistað + Tvípikkaðu til að opna vefsíðuna. + Frekari vefsíðuupplýsingar + Venjulegt + %d atriði valin + Bæta við Bókamerki + Skoða mynd + Ræsi niðurhal... + Tómt + Bókamerki + Leturstærð + Fara áfram + Are you sure you want to clear history? + Hreinsa öll fótsporagögn + Netferillinn er ekki vistaður + Eyða vafragögnum + Japanska (ISO-2022-JP) + Afrita + Heiti möppu + Loka fyrir sprettiglugga + Samstilltir flipar + Bæta á heimaskjá + Vista + Ógilt vottorð + Nafnlaus stilling + Jan. + Gagnaleynd og öryggi + Prenta + Það komu upp vandamál með öryggisvottorðið fyrir þetta svæði + Birtustig + Eyða? + Leturstærð + Finna sjálfkrafa + Vista innslegnar upplýsingar + Eyða + Hætta við + Öryggisviðvörun + Á að hala niður? + Leita eða slá inn vefslóð + Hreinsa innslegnar upplýsingar + Muna lykilorð + Opna feril + Í dag + Hafna + Leynd + Uppfæra + Vefúrklippa + Hreinsa lykilorð + Nota sem heimasíðu + Hætta við + Mjög stórt + Tilkynni... + Google + Síðustu 7 dagar + (engin merki) + Alltaf kveikt + FERILL + Pikkaðu einu sinni í viðbót til að loka internetinu + Sláðu inn heiti bókamerkis + Sannprófun er nauðsynleg + Vista tengil + Aldrei sýna aftur + Afrita á klemmuspjald + Endurnefna möppu + Sjálfvirk vistun auðkennis eða lykilorðs + Sjálfgefnar stillingar verða notaðar. Viltu halda áfram? + Farsími + Velja bókamerki + Loka + Lítið + Endurstilla á sjálfgildi + Kóreska (EUC-KR) + LTE/GSM/WCDMA (sjálfvirk tenging) + Breyta heiti merkis + BÚA TIL MÖPPU + Heimasíða + Ógild slóð + Skjáborðssýn + Valmynd + Slóðin fannst ekki + Farsímaskjár + Opna í nýjum glugga + Tölvupóstur + Flýtileið var búin til + Gagnatenging mistókst + Sjálfvirk útfylling + Leyfa svæðum að biðja um aðgang að staðsetningunni þinni + Fim + BREYTA MÖPPUHEITI + Fjarlægt úr bókamerkjum + Bókamerki + Opna síður í yfirliti + Fella að breidd + Júl. + Gagnanet + Unicode (UTF-8) + Bókamerki bætt við + Saga + Síðasti mánuð + Lokið + Breyta bókamerki + Eyða öllum vistuðum lykilorðum? + Listi + Bæta við bókamerki + Maí + Öryggisreglur takmarka notkun netvafra + Mar. + Vefslóð + Mistókst að bæta við bókamerki. Hámarksfjölda bókamerkja er náð + Spyrja alltaf + Vista síðu + Velja orð + Sýna öryggisviðvaranir + Búa til möppu + Eyða öllu + Viltu eyða völdum bókamerkjum? + Hreinsa sérsniðin gögn + Hreinsa öll vafragögn og núllstilla allt á sjálfgefið + Birta myndir á vefsíðum + Orðabók + Sjálfgefin skjár + Raða eftir merki + Setja upp vefforrit + Um vafra + Kveikja á einkastillingu + Úrklippubók + Leitarvél + Geyma gögn sem ég færi inn í eyðublöð til síðari tíma nota + Titil vantar + Fyrir %d vikum + Setja á heimaskjá + Virkja staðsetningu + Slá inn slóð + Handvirkt + Ferill er enginn + Keyra Java-vefforskrift + %s biður um staðsetningu þína + Fös + Útgáfa + Skilaboð + Skyndiminni + Breyta + Almennt + Vistaðar síður + Leyfa %s að sýna tilkynningar + Útiloka sprettiglugga á vefsíðum + Vista mynd + Mest opnuð svæði + Í gær + Rita titil + Des. + Öllu eytt + %d atriði valið + Ekki er hægt að vista mynd + Skilaboð + Endurraða + Breyta textastærð sjálfkrafa + Eyða staðaraðgangi fyrir vefsvæði? + Listaskjár + Viltu færa valin bókamerki? + Ekki er nægt minni + Ekki er nægt minni. Eyðið nokkrum atriðum + diff --git a/res/ita-IT.xml b/res/ita-IT.xml new file mode 100644 index 0000000..89f2e9d --- /dev/null +++ b/res/ita-IT.xml @@ -0,0 +1,345 @@ + + + + Notifica Web + Trascina + Nessun risultato trovato + Nov + Incolla + Impost. contenuto pagina + Impostazioni avanzate per singoli siti web + Pagina iniziale utente + GESTIONE FINESTRE + Auto + Cancella cronologia + Pagina corrente + Chiudete tutte le finestre aperte e passate alla homepage + Accetta cookie + Condividi + Cinese (GBK) + Latin-1 (ISO-8859-1) + Modalità sviluppatore + Giugno + Carica immagini + Fatto + Impostazioni + Enorme + Problema di connettività dati + Ago + Imposta la pagina visualizzata come pagina iniziale + Impostazioni + Elimina + Giapponese (SHIFT JIS) + ID e password salvati + Apri + Non chiedere di nuovo + Salva per lettura offline + Aggiornare una casella live + Luglio + Crea cartella + Aggiungi + Alta + Salva nomi utente e password per i siti web + Giapponese (EUC-JP) + Gestione download + Aprile + Cinese (Big5) + Grande + Impostazioni sito web + Chiudi tutte + Seleziona elementi + Seleziona tutto + Ricarica + Vai indietro + Cancellare cronologia? + Nessun elemento + CARTELLA + Personalizza agente utente + Vista desktop + Set + Copia URL + Apri in nuova pagina + Mer + Nessun preferito + Aggiungi tag + Vedi immagine + Invia tramite e-mail + Non consentito + Mostra panoramica delle pagine appena aperte + Grande + Picasa + Vista miniature + Trova nella pagina + Password + Titolo + Codifica testo + Eliminato/i + Impostazioni + 1 elemento selezionato + Riduci + Tag + Attiva selezione testo + Nuova cartella + Aggiunto a preferiti + Consenti + Leggibile + Mostra immagini + Automatica + Ott + Porta + Modifica + Eliminare cronologia browser? + Specifica nome cartella + Invia con messaggio + Vedi per + Mar + Lun + Multischermo + Già esiste + Copia URL + Ricorda preferenza + Cancella accesso posizione + Eliminare tutti i cookie? + Eliminare tutti i dati moduli salvati? + Errore di rete + Interrompi + Trova nella pagina + Nessun sito visitato + Sab + Download + Aggiungi preferito + Eliminare contenuto della cache e database locali? + Errore + Chiudi finestra + Medio + Ultima settimana + Impossibile visualizzare la pagina Web. Il server non risponde + Elimina preferito + Aggiungi a raccogl. + Precedenti + Precedente + Altro + Sposta + Ieri + Modalità di selezione + Senza tag + Creato + Inserisci una scheda SIM + Segnalibro rimosso + Annulla le impostazioni autorizzazioni di notifica Web + Condividi link + Imposta testo per riempimento automatico del modulo Web + OK + Piccolo + Copia immagine + Connessione protetta + Dati modulo + Più visitati + Seleziona + Cartella + Impossibile aprire una nuova finestra. Raggiunto numero massimo di finestre aperte + Consente ai siti di eseguire JavaScript + Aggiornamento automatico + Nuova finestra + No + Consente ai siti di salvare e leggere i dati cookie + Toccate due volte per chiudere la barra. + Riproduci + Raggiunto numero massimo di tag (%d) + Caricamento. Attendere... + Annulla + Connessione dati disattiva. Connettersi tramite rete Wi-Fi o attivare la connessione dati + Cookie + Pagina vuota + Cerca + Feb + Disattiva modalità Privata + Svuota cache + Password + Nome utente + Visualizzate i siti Web del PC facilmente sul dispositivo in uso. Questa funzione ottimizza la dimensione del testo in modo da renderlo più leggibile. Nota: il layout del testo potrebbe cambiare + MODIFICA SEGNALIBRO + Cancella dati memorizzati + Eliminare tutti i dati dei siti Web e le autorizzazioni di localizzazione? + Seleziona tutto + Mai + Seleziona cartella + Ultima pagina visualizzata + Opzioni sviluppatore + Lingua sorgente + Preferiti + Cancella + Oggi + Sì + Incolla + Avanti + Impossibile aggiungere alla schermata iniziale. L'anteprima per questo sito Web non è consentita + Agente utente + Errore imprevisto + Annullare le autorizzazioni di notifica Web? + Dom + Salvato + Toccate due volte per aprire la pagina Web. + Info aggiuntive pagina Web + Normale + %d elementi selezionati + Aggiungi a Preferiti + Vedi immagine + Inizio download... + Vuoto + Preferiti + Dimensioni carattere + Vai avanti + Cancellare cronologia? + Cancella tutti i dati cookie + Cronologia Internet non memorizzata + Elimina dati navigazione + Giapponese (ISO-2022-JP) + Copia + Nome cartella + Blocca pop-up + Schede sincronizzate + Aggiungi a schermata iniziale + Salva + Certificato non valido + Modalità in incognito + Gen + Privacy e sicurezza + Stampa + Problemi con il certificato di sicurezza di questo sito + Luminosità + Elimina? + Dimensioni carattere + Rilevamento automatico + Ricorda dati modulo + Elimina + Ann. + Avviso di sicurezza + Scaricare? + Cerca o immetti URL + Cancella dati modulo + Ricorda password + Vai a cronologia + Oggi + Rifiuta + Privacy + Aggiorna + Clip Web + Cancella password + Imposta come pagina iniziale + Annulla + Molto grande + Notifica in corso... + Google + Ultimi 7 giorni + (nessun tag) + Sempre attivo + CRONOLOGIA + Toccate nuovamente per chiudere Internet + Inserisci nome preferito + Autenticazione richiesta + Salva link + Non mostrare più + Copia negli appunti + Rinomina cartella + Salva ID/password + Tutti i valori corrispondono alle impostazioni predefinite. Continuare? + Cellulare + Selezionare i preferiti + Chiudi + Piccolo + Ripristina impostazioni predefinite + Coreano (EUC-KR) + LTE/GSM/WCDMA (connessione automatica) + Rinomina tag + CREA CARTELLA + Homepage + URL non valida + Vista desktop + Menu + URL non trovato + Vista cellulare + Apri in nuova finestra + E-mail + È stato creato un collegamento + Connessione dati non riuscita + Riempimento auto moduli + Consente ai siti di richiedere l'accesso alla vostra posizione + Gio + RINOMINA CARTELLA + Rimosso dai preferiti + Preferito + Apri pag. in panoramica + Adatta a larghezza + Lug + Rete dati + Unicode (UTF-8) + Preferito aggiunto + Cronologia + Ultimo mese + Fatto + Modifica preferito + Eliminare tutte le password salvate? + Elenco + Aggiungi a Preferiti + Mag + I criteri di sicurezza limitano l'uso del browser Internet + Mar + URL + Impossibile aggiungere preferito. Raggiunto numero massimo di preferiti + Chiedi sempre + Salva pagina + Parola + Mostra avvisi di sicurezza + Crea cartella + Elimina tutto + Eliminare i segnalibri selezionati? + Cancellate i dati personalizzati + Cancella tutti i dati del browser e ripristina tutte le impostazioni predefinite + Visualizza immagini su pagine Web + Dizionario + Vista predefinita + Ordina per tag + Installa applicazione Web + Informazioni sul browser + Attiva modalità Privata + Raccoglitore + Motore di ricerca + Ricorda i dati digitati nei moduli per uso successivo + Nessun titolo + %d settimane fa + Aggiungi a schermata Home + Attiva localizzazione + Inserisci URL + Manuale + Nessuna cronologia + Esegui JavaScript + %s richiede la vostra posizione + Ven + Versione + Messaggio + Cache + Modifica + Generale + Pagine salvate + Consenti a %s di mostrare le notifiche + Blocca i pop-up sulle pagine Web + Salva immagine + Siti più visitati + Ieri + Inserisci titolo + Dic + Tutto eliminato + %d elemento selezionato + Impossibile salvare immagine + Messaggi + Riordina + Ridimensionamento testo auto + Eliminare le informazioni di accesso alla posizione del sito Web? + Elenco + Spostare i preferiti selezionati? + Memoria insufficiente + Memoria insufficiente. Eliminare alcuni elementi + diff --git a/res/jpn-JP.xml b/res/jpn-JP.xml new file mode 100644 index 0000000..759aabd --- /dev/null +++ b/res/jpn-JP.xml @@ -0,0 +1,345 @@ + + + + Web通知 + 範囲選択 + 検索結果がありません。 + 11月 + 貼り付け + ページコンテンツ設定 + 個々のWebサイトの詳細設定 + ユーザーホームページ + ウィンドウマネージャー + 自動 + 履歴を消去 + 現在のページ + 開いているウィンドウを全て閉じ、ホームページに移動します。 + Cookieを許可 + 共有 + 中国語(GBK) + ラテン1(ISO-8859-1) + 開発者モード + 6月 + 画像の読み込み + 完了 + 設定 + 極大 + データ接続問題 + 8月 + このページをホームページに設定します。 + 設定 + 削除 + 日本語(SHIFT JIS) + 保存したIDとパスワード + 開く + 今後表示しない + オフライン用に保存 + Liveboxを追加 + 7月 + フォルダ作成 + 追加 + 高 + Webサイトで入力したユーザー名とパスワードを保存 + 日本語(EUC-JP) + ダウンロードマネージャー + 4月 + 中国語(Big5) + 大 + Webサイト設定 + 全て閉じる + アイテムを選択 + 全て選択 + 再読み込み + 前​の​ページ​へ + 履歴を消去しますか? + アイテムがありません。 + フォルダ + ユーザーエージェントの編集 + PC版を表示 + 9月 + URLをコピー + 新しいページで開く + 水 + ブックマークがありません。 + タグを追加 + 画像を表示 + Eメール送信 + 許可されていません。 + 新規ページを全体表示 + 大 + Picasa + サムネイル表示 + ページ内検索 + パスワード + タイトル + 文字コード + 削除しました。 + 設定 + 1件選択 + 最小化 + タグ + テキスト選択ON + 新規フォルダ + ブックマークに追加しました。 + 許可する + 判読可能 + 画像を表示 + 自動 + 10月 + プロキシポート + 編集 + 保存された閲覧履歴を消去しますか? + フォルダ名を入力してください。 + メッセージ送信 + 表示設定 + 火 + 月 + マルチ​ウィンドウ + 既に登録されています。 + URLコピー + 設定を保存 + 位置情報を消去 + 保存された全てのCookieを消去しますか? + 保存された全ての文字入力履歴を消去しますか? + ネットワークエラーが発生しました。 + 停止 + ページ内を検索 + 閲覧​した​サイト​が​ありません + 土 + ダウンロード + ブックマークを追加 + 保存された全てのキャッシュ情報を消去しますか? + 失敗しました。 + ウィンドウを閉じる + 標準 + 先週 + Webページを表示できません。サーバーから応答がありません。 + ブックマークを削除 + スクラップブックに追加 + 古い順 + 前へ + もっと見る + 移動 + 昨日 + 選択モード + タグなし + 作成しました。 + SIMカードを挿入してください。 + ブックマークが削除されました。 + Web通知の許可設定を解除 + リンクを共有 + Webフォームに自動入力するテキストを設定 + OK + 小 + 画像をコピー + セキュアコネクション + 文字入力履歴 + よく見るサイト + 選択 + フォルダ + 既に最大数のウィンドウを開いているため、新規ウィンドウを開けません + サイト上でJavaScriptの実行を許可 + 自動更新 + 新規ウィンドウ + いいえ + Cookieの保存と読み取りを許可 + トレイを閉じるには、ダブルタップします。 + 再生 + タグの最大数(%d)に達しました。 + 読み込み中です。 お待ちください... + キャンセル + モバイルデータが無効です。Wi-Fiネットワークに接続するか、モバイルデータを有効にしてください。 + Cookie + 空白のページ + 検索 + 2月 + プライベートモードOFF + キャッシュを消去 + パスワード + ユーザー名 + モバイル端末でPCのWebサイトを閲覧しやすくするため、テキストのサイズを拡大して可読性を向上(ページのレイアウトが変更される可能性あり) + ブックマークを編集 + 保存したデータを消去 + Webサイトデータと位置情報アクセス権限を全て消去しますか? + 全て選択 + なし + フォルダを選択 + 最後に表示したページ + 開発者向けオプション + 起点言語 + ブックマーク + 消去 + 今日 + はい + 貼り付け + 次へ + ホーム画面に追加できません。このWebサイトのプレビューは許可されていません。 + エージェントを利用 + 予期しないエラーです + Web通知許可を解除しますか? + 日 + 保存しました。 + Webページを開くには、ダブルタップします。 + Webページの追加情報 + 標準 + %d件選択 + ブックマークに追加 + 画像を表示 + ダウンロード開始... + 空き + ブックマーク + 文字サイズ + 次のページへ + Are you sure you want to clear history? + Cookieを消去 + ブラウザの履歴を保存しない + 参照データを削除 + 日本語(ISO-2022-JP) + コピー + フォルダ名 + ポップアップをブロック + 同期したタブ + ホームに追加 + 保存 + 無効な証明書です。 + シークレットモード + 1月 + プライバシーとセキュリティ + 印刷 + このサイトのセキュリティ証明書に問題があります。 + 明るさ + 削除? + 文字サイズ + 自動設定 + 文字入力履歴を保存 + 削除 + キャンセル + セキュリティ警告 + ダウンロードしますか? + 検索、またはURLを入力 + 文字入力履歴を消去 + パスワードを保存 + 履歴に移動 + 今日 + 拒否 + プライバシー + 更新 + Webクリップ + パスワードを消去 + ホームページに設定 + キャンセル + 最大 + 通知中... + Google + 最近の7日間 + (タグ​が​ありません) + 常にON + 履歴 + ブラウザを終了するにはもう一度タップします。 + ブックマーク名を入力してください。 + 認証​が​必要​です + リンクを保存 + 今後表示しない + クリップボードにコピー + フォルダ名を変更 + ID/​パスワード​の​自動​保存 + 全ての設定が標準に戻ります。続行しますか? + モバイル + ブックマークを選択 + 閉じる + 小 + 初期値にリセット + 韓国語(EUC-KR) + LTE/GSM/WCDMA (自動接続) + タグ​の​名前​を​変更​する + フォルダを作成 + ホームページ + 無効なURLです。 + PC版を表示 + メニュー + URL​が​見つかり​ません + モバイル版を表示 + 新規ウィンドウで開く + Eメール + 作成したショートカット + データ接続に失敗しました。 + 自動入力フォーム + サイトに位置情報へのアクセスを許可 + 木 + フォルダ名を変更 + 削除しました。 + ブックマーク + ページを全体表示で開く + 幅に合わせる + 7月 + モバイルデータ + Unicode(UTF-8) + ブックマークが追加されました。 + 履歴 + 先月 + 完了 + ブックマークを編集 + 保存された全てのパスワードを消去しますか? + リスト + ブックマーク​に​追加​ + 5月 + インターネットブラウザの使用は、セキュリティポリシーによって制限されています。 + 3月 + URL + ブックマークを追加できません。ブックマークが最大件数に達しました + 毎回確認 + ページを保存 + テキスト選択 + セキュリティ警告を表示 + フォルダ作成 + 全て削除 + 選択したブックマークを削除しますか? + 個人設定データを削除 + 初期設定に戻す + Webページに画像を表示 + 辞書 + 基本表示モード + タグで並べ替え + Webアプリをインストール + ブラウザについて + プライベートモードON + スクラップブック + 検索エンジン + 後で利用できるように、入力した文字情報を保存 + 件名なし + %d週間前 + ホーム画面に追加 + 位置情報を有効にする + URL入力 + 手動 + 履歴はありません。 + JavaScriptを実行 + %s​は​あなた​の​位置​を​リクエスト​しました + 金 + バージョン + メッセージ + キャッシュ + 編集 + 一般 + 保存したページ + 通知を表示するには、%sを許可してください。 + Webページのポップアップをブロック + 画像を保存 + よく見るサイト + 昨日 + タイトルを入力して下さい。 + 12月 + 全て​削除​します + %d件選択 + 画像を保存できません + メッセージ + 並べ替え + テキストサイズ自動変更 + 保存された位置情報を消去しますか? + リスト表示 + 選択したブックマークを移動しますか? + メモリが不足しています。 + メモリが不足しています。不要なアイテムを削除してください。 + diff --git a/res/kat-GE.xml b/res/kat-GE.xml new file mode 100644 index 0000000..218f446 --- /dev/null +++ b/res/kat-GE.xml @@ -0,0 +1,345 @@ + + + + ვებ-შეტყობინება + გადაჩოჩება + შედეგები არ მოიძებნა + ნოე. + ჩასმა + გვერდის შინაარსის პარამ. + დამატებითი პარამეტრები ცალკეული ვებსაიტებისთვის + მომხმარებლის საწყისი გვერდი + ფანჯრების მმართველი + ავტომატური + ისტორიის გასუფთავება + მიმდინარე გვერდი + დახურეთ ყველა გახსნილი ვიდეო და გადადით საწყის გვერდზე + ქუქი–ფაილების მიღება + გაზიარება + ჩინური (GBK) + ლათინური-1 (ISO-8859-1) + დეველოპერის რეჟიმი + ივნისი + სურათების ჩამოტვირთვა + შესრულდა + პარამეტრები + გიგანტური + მონაცემთა გადაცემის პრობლემები + აგვ. + მიმდინარე გვერდის დაყენება საწყის გვერდად + პარამეტრები + წაშლა + იაპონური (SHIFT JIS) + შენახული ID და პაროლი + გახსნა + აღარ მკითხო + შეინახოს ინტერნეტის გარეშე წასაკითხად + დაამატეთ ლაივბოქსი + ივლისი + საქაღალდის შექმნა + დამატება + მაღალი + ვებსაიტების მომხმარებლის სახელებისა და პაროლების შენახვა + იაპონური (EUC-JP) + ჩამოტვირთვების მმართველი + აპრილი + ჩინური (Big5) + დიდი + ვებსაიტის პარამეტრები + ყველას დახურვა + ელემენტების არჩევა + ყველას არჩევა + განახლება + უკან გადასვლა + გსურთ ისტორიის გასუფთავება? + ელემენტები არ არის + საქაღალდე + შერჩეული მომხმარებლის სააგენტო + ეკრანის ხედი + სექ. + URL–ს კოპირება + ახ. გვერდზე გახსნა + ოთხ. + ჩემი ნიშნულები + იარლიყის დამატება + სურათის ნახვა + ელ.ფოსტით გაგზავნა + დაუშვებელია + ახლად გახსნილი გვერდების მიმოხილვითი ჩვენება + დიდი + Picasa + მიკროასლების ნახვა + გვერდზე პოვნა + პაროლი + სათაური + ტექსტის კოდირება + წაშლილია + პარამეტრები + არჩეულია 1 ელემენტი + ჩამოკეცვა + ტეგები + ტექსტის შერჩევა ჩართულია + ახალი საქაღალდე + დაემატა სანიშნეებში + დართე ნება + წაკითხვადი + სურათების ჩვენება + ავტომატური + ოქტ. + პროქსი სერვერის პორტი + შეცვლა + წაშლით ბრაუზერის ისტორიას? + შეიყვანეთ საქაღალდის სახელი + წერილით გაგზავნა + ნახვა + სამ. + ორშ. + რამდენიმე ფანჯარა + უკვე არის + URL-ს კოპირება + უპირატესობის დამახსოვრება + გაასუფთავეთ ლოკაციაზე წვდომის მონაცემი + წავშალო ყველა ფუნთუშა-ფაილი? + წაიშალოს ყველა შენახული ფორმის მონაცემები? + ქსელის შეცდომა + შეჩერება + გვერდზე პოვნა + ნანახი საიტები არ არის + შაბ. + ჩამოტვირთვა + სანიშნის დამატება + წაშლით ადგილობრივ ქეშ-მეხსიერებაში შენახული მასალებსა და მონაცემთა ბაზებს? + ვერ შესრულდა + ფანჯრის დახურვა + საშუალო + გასული კვირა + ვებგვერდი ვერ იხსნება. სერვერიდან პასუხი არ არის + სანიშნის წაშლა + ალბომში დამატება + შედარებით ძველი + წინა + სხვა + გადატანა + გუშინ + რეჟიმის შერჩევა + უიარლიყო + შეიქმნა + გთხოვთ, ჩადოთ SIM ბარათი + სანიშნე მოცილდა + ვებ-შეტყობინებების ნებართვების პარამეტრების გასუფთავება + ბმულის გაზიარება + შეადგინეთ ტექსტი ვებ-ფორმის ავტომატურად შესავსებად + კი + პატარა + სურათის ასლის გადაღება + დაცული კავშირი + ფორმის მონაცემები + ყველაზე ხშირად ნანახი + არჩევა + საქაღალდე + ახალი ფანჯრის გახსნა შეუძლებელია. უკვე გახსნილია ფანჯრების მაქსიმალური რაოდენობა + საიტებისთვის JavaScript-ის დაშვება + ავტომატური განახლება + ახალი ფანჯარა + არა + საიტებისთვის ქუქი–ფაილების შენახვისა და წაკითხვის ნებართვის მიცემა + შეეხეთ ორჯერ და ლანგარი დაიხურება + დაკვრა + მიღწეულია ჩანართების მაქსიმალური რაოდენობა (%d) + იტვირთება. გთხოვთ, დაელოდოთ... + გაუქმება + მობილური მონაცემები გამორთულია. დაუკავშირდით Wi-Fi ქსელით, ან გაააქტიურეთ მობილური მონაცემები + ქუქი-ფაილები + ცარიელი გვერდი + ძიება + თებ. + პერსონალური რეჟიმის გამორთვა + ქეშის გასუფთავება + პაროლი + მომხმარებლის სახელი + მარტივად დაათვალიერე კომპიუტერისთვის განკუთვნილი ვებსაიტები მობილური აპარატით. ეს ფუნქცია ადიდებს ტექსტის ზომას, რომ მარტივად წაიკითხოთ იგი. შენიშვნა: ტექსტის განლაგება შეიძლება შეიცვალოს + სანიშნეების შესწორება + შენახული მონაცემების წაშლა + წაიშალოს ყველა ვებსაიტის მონაცემი და ლოკაციის უფლებები? + ყველას არჩევა + არასოდეს + აირჩიეთ საქაღალდე + ბოლოს დათვალიერებული გვერდი + დეველოპერის ოფციები + საწყისი ენა + სანიშნე + წაშლა + დღეს + კი + ჩასმა + შემდეგი + საწყის ეკრანზე დამატება შეუძლებელია. ეს ვებსაიტი არ იძლევა გადახედვის ნებართვას + მომხმარებლის აგენტი + მოულოდნელი შეცდომა + წაშლით ქსელის შეტყობინებების უფლებებს? + კვ. + შენახულია + შეეხეთ ორჯერ და გაიხსნება ვებგვერდი + ვებგვერდის დამატებითი ინფო + ნორმალური + არჩეულია %d ელემენტი + სანიშნეებში დამატება + სურათის ნახვა + იწყება ჩამოტვირთვა... + ცარიელია + სანიშნი + შრიფტის ზომა + წინ გადასვლა + Are you sure you want to clear history? + ყველა ქუქი–მონაცემების გასუფთავება + ინტერნეტ-ისტორია არ შეინახა + დათვალიერების მონაცემთა წაშლა + იაპონური (ISO-2022-JP) + ასლი + საქაღალდის სახელი + ამოსახტომი ფანჯრების დაბლოკვა + დასინქრონებული ჩანართები + დაამატეთ საწყის გვერდზე + შენახვა + სერთიფიკატი არასწორია + ინკოგნიტო რეჟიმი + იან. + კონფიდენციალურობა და უსაფრთხოება + ამობეჭდვა + ამ საიტს აქვს უსაფრთხოების სერთიფიკატთან დაკავშირებული პრობლემა + სიკაშკაშე + წაშლა? + შრიფტის ზომა + ავტომატური ამოცნობა + ფორმის მონაცემების დამახსოვრება + წაშლა + გაუქმ. + უსაფრთხოების გაფრთხილება + ჩამოტვირთავთ? + მოძებნეთ ან ჩაწერეთ URL + ფორმის მონაცემების გასუფთავება + დაიმახსოვრეთ პაროლები + ისტორიაზე გადასვლა + დღეს + უარი + პირადი + განახლება + ვებ-კლიპი + პაროლების წაშლა + საწყის გვერდად დაყენება + გაუქმება + ძალიან დიდი + შეტყობინება... + Google + ბოლო 7 დღე + (ტეგები არაა) + მუდამ ჩართული + ისტორია + ინტერნეტის დასახურად შეეხეთ კიდევ ერთხელ + ჩაწერეთ სანიშნის სახელი + ავტორიზაცია აუცილებელია + ბმულის შენახვა + აღარ მაჩვენო + ასლის შენახვა ბუფერულ მეხსიერებაში + საქაღალდის სახელის შეცვლა + ID/პაროლის ავტომატური შენახვა + საწყისი პარამეტრების დაბრუნება. განაგრძობთ? + მობილური + სანიშნეების არჩევა + დახურვა + პატარა + ავტო. პარამეტრის დაბრუნება + კორეული (EUC-KR) + LTE/GSM/WCDMA (ავტომატური დაკავშირება) + თეგის სახელის შეცვლა + საქაღალდის შექმნა + საწყისი გვერდი + URL არასწორია + ხედი ეკრანზე + მენიუ + URL არ მოიძებნა + მობილურის ხედი + ახალ გვერდზე გახსნა + ელ.ფოსტა + შეიქმნა სწრაფი ღილაკი + მონაცემთა კავშირი ვერ შესრულდა + ფორმის ავტომატური შევსება + საიტებს ჰქონდეს თქვენი ლოკაციის მოთხოვნის ნება + ხუთ. + საქაღალდის გადარქმევა + ამოიშალა სანიშნეებიდან + სანიშნე + გვერდების გადახედვა + მორგება სიგანეზე + ივლ. + მონაცემთა გადაცემის ქსელი + უნიკოდი (UTF-8) + სანიშნე დაემატა + ისტორია + გასული თვე + შესრულდა + ნიშნულის შეცვლა + წაიშალოს ყველა შენახული პაროლი? + სია + სანიშნეებში დამატება + მაისი + უსაფრთხოების პოლიტიკა ზღუდავს ინტერნეტ-ბრაუზერის გამოყენებას + მარ. + URL + ვერ ვამატებ ნიშნულს. მიღწეულია ნიშნულების მაქსიმალური რაოდენობა + ყოველთვის მკითხე + გვერდის შენახვა + აირჩიეთ სიტყვა + უსაფრთხოების გაფრთხილებების ჩვენება + შექმენი საქაღალდე + ყველას წაშლა + წაშლით შერჩეულ სანიშნეებს? + პერსონალურ მონაცემთა წაშლა + ბრაუზერის ყველა მონაცემის წაშლა და ყველა საწყისი მონაცემის დაბრუნება + სურათების ჩვენება ვებ გვერდებზე + ლექსიკონი + ნაგულისხმევი ხედი + დალაგება ჩანართებად + ვებ-აპლიკაციის დაინსტალირება + ბრაუზერის შესახებ + პერსონალური რეჟიმის გააქტიურება + სამახსოვრო ალბომი + საძიებო სისტემა + ჩემს მიერ აკრეფილი მონაცემების დამახსოვრება, მოგვიანებით გამოსაყენებლად + თემა არ არის + %d კვირის წინ + საწყის ეკრანზე დამატება + ლოკაციის ჩართვა + შეიყვანეთ URL + მექანიკური + ისტორია ცარიელია + JavaScript-ის გაშვება + %s ითხოვს თქვენს ლოკაციას + პარ. + ვერსია + შეტყობინება + ქეშ-მესხიერება + რედაქტ. + საერთო + შენახული გვერდები + დართეთ ნება მომხმარებელს ”%s” აჩვენოს შეტყობინებები + კონტექსტური სარკმლების დაბლოკვა ვებგვერდებზე + სურათის შენახვა + ყველაზე ხშირად ნანახი საიტები + გუშინ + შეიყვანეთ სათაური + დეკ. + ყველაფერი წაიშალა + არჩეულია %d ელემენტი + სურათს ვერ შეინახავთ + შეტყობინებები + გადალაგება + ტექსტის ზომის ავტოშეცვლა + წაშლით ვებსაიტის ლოკაციაზე წვდომის ინფორმაციას? + სიის ნახვა + გადაიტანთ შერჩეულ სანიშნეებს? + მეხსიერება არ არის საკმარისი + მეხსიერება საკმარისი არაა. წაშალეთ ზოგიერთი ელემენტი + diff --git a/res/kaz-KZ.xml b/res/kaz-KZ.xml new file mode 100644 index 0000000..ab36344 --- /dev/null +++ b/res/kaz-KZ.xml @@ -0,0 +1,345 @@ + + + + Веб-хабарландыру + Сүйреу + Ешқандай нәтиже табылмады + Қар + Қою + Бет мазмұны параметрлері + Жеке веб-сайттарға арналған қосымша параметрлер + Пайдаланушының бастапқы беті + ТЕРЕЗЕ РЕТТЕУШІСІ + Авто + Журналды тазарту + Ағымдағы бет + Ашық тұрған барлық бағдарламаларды жауып, бастапқы бетке өтіңіз + Куки файлдарын қабылдау + Байланысқа жол + Қытай (GBK) + Латын-1 (ISO-8859-1) + Әзірлеуші режимі + Маусым + Суреттерді жүктеу + Дайын + Қондырғ-р + Үлкен + Деректер байланысының мүмкіндігіне қатысты мәселе + Там + Ағымдағы бетті бастапқы бетке орнату + Қондырғ-р + Жою + Жапон (SHIFT JIS) + Идентификатор мен құпиясөз сақталды + Ашу + Қайтадан сұрамаңыз + Өшірулі күйде оқуға сақтау + Лайвбоксты қосу + Шілде + Қалта жасау + Қосу + Жоғары + Веб-сайттардың пайдаланушы аттары мен құпиясөздерін сақтау + Жапон (EUC-JP) + Реттеушіні жүктеу + Сәуір + Қытай (Big5) + Үлкен + Веб-сайт параметрлері + Бәрін жабу + Элементтер таңдау + Бәрін бөлектеу + Қайта қосу + Артқа + Журналды тазалау керек пе? + Баптар жоқ + ҚАЛТА + Реттелмелі пайдаланушы агенті + Жұмыс үстелін көру + Қыр + Сілт. URL көш-у + Жаңа беттен ашу + Сәр + Бетбелгі жоқ + Тег қосу + Суретті көру + Электрондық пошта арқылы жіберу + Рұқсатсыз + Жаңадан ашылған беттерді шолып көрсету + Үлкен + Picasa + Нобай көрінісі + Беттен табу + Кілтсөз + Тақырыбы + Мәтінді кодтау + Жойылды + Қондырғ-р + 1 элемент таңдалды + Азайту + Белгілер + Мәтінді бөлектеуді орындау + Жаңа қалта + Бетбелгілерге қосылған + Рұқсат + Оқылатын + Суреттер көрсету + Автоматты түрде + Қаз + Порт прокси + Өзгерту + Браузер журналын жою керек пе? + Қалта атын енгізңіз + Хабар арқылы жіберу + Қарау + Сей + Дүй + Көп терезе + Қолданыста бар + URL көшіру + Басымдығын еске сақтау + Орнына кіруді тазалау + Барлық «куки» файлдарын жою керек пе? + Бүкіл сақталған пішін деректерін жою керек пе? + Желі қателігі + Тоқтату + Беттен табу + Кірген сайттар жоқ + Сен + Жазу + Қосымшаны қосу + Жергілікті кэштелген мазмұн мен дерекқорларды жою керек пе? + Үзіліп кетті + Терезені жабу + Орташа + Соңғы апта + Веб-бетті көрсету мүмкін емес. Серверден жауап жоқ + Бетбелгіні жою + Сурет альбомына қосу + Ескірек + Алдыңғы + Басқа + Орналастыру + Кеше + Таңдау режимі + Белгіленбеген + Құрылды + SIM-картаны енгізу + Бетбелгі жойылды + Веб-хабарландыру туралы рұқсат параметрлерін тазалау + Сілтеме бөлісу + Веб-үлгіні авто толтыру мәтінін орнату + OK + Ұсақ + Сурет көшіру + Байланысты қорғау + Үлгі деректері + Көп кіретін + Таңдау + Қалта + Жаңа терезені ашу мүмкін емес. Ең көп терезелер саны ашылып қойған + Сайттарға JavaScript орындауға рұқсат ету + Авто жаңарту + Жаңа терезе + Жоқ + Сайттарға куки деректерін сақтауға және оқуға мүмкіндік береді + Науаны жабу үшін екі рет түртіңіз + Ойнату + Тегтердің ең үлкен санынан (%d) асып кетті + Жүктелуде. Күте тұрыңыз... + Тоқтату + Ұялы деректер өшірілді. Wi-Fi желісі арқылы қосылыңыз не ұялы деректерді қосыңыз + Cookies + Бос бет + Іздеу + Ақп + Құпиялылық режимін өшіру + Кэшті тазарту + Кілтсөз + Тұтынушы аты + Ұялы құрылғыңызда компьютер веб-сайттарын оңай көру. Осы мүмкіндік оқуға оңай болу үшін мәтіннің өлшем үлкейтеді. Ескертпе: Мәтіннің орналасуы өзгеруі мүмкін + БЕТБЕЛГІЛЕРДІ ӨЗГЕРТУ + Сақталған деректерді өшіру + Барлық веб-сайт деректері мен орын рұқсаттарын жою керек пе? + Бәрін бөлектеу + Ешқашан + Папканы таңдау + Соңғы қаралған бет + Әзірлеуші параметрлері + Бастапқы тіл + Қосымшалар + Тазалау + Бүгін + Иә + Қою + Сосын + Бастапқы экранға қосу мүмкін емес. Бұл веб-сайт алдын ала қарау мүмкіндігін бермейді + Тұтынушын агент + Ойламаған жерден үзілді + Веб-хабарландырудың рұқсаттарын өшіру керек пе? + Жек + Сақталған + Веб-бетті ашу үшін екі рет түртіңіз + Қосымша веб-бет ақпараты + Қалыпты + %d элемент таңдалды + Бетбелгілерге қосу + Суретті көру + Жүктеу басталуда... + Бос + Қосымшалар + Шрифт өлшемі + Алға + Are you sure you want to clear history? + Барлық куки деректерін өшіру + Интернет журналы сақталмады + Шолушы деректерді жою + Жапон (ISO-2022-JP) + Көшіру + Папка аты + Қалқымалы терезелерді бұғаттау + Синхрондалған жиекбелгілер + Бастапқы бетке қосу + Сақтау + Жарамсыз куәлік + Жасырын режим + Қаң + Құпиялық және қауіпсіздік + Басып шығару + Осы сайтқа арналған қауіпсіздік куәлігінде қателер пайда болады + Ашықтығы + Жою? + Шрифт өлшемі + Автоматты анықтау + Деректерден еске сақтау + Жою + Тоқт + Қауіпсіздік ескертуі + Жазасыз ба? + URL мекенжайын іздеу немесе енгізу + Формадағы деректерді өшіру + Құпиясөзді сақтау + Журналға өту + Бүгін + Бас тарту + Құпия + Жаңарту + Веб-клип + Құпия сөзді жою + Бастапқы бет ретінде орнату + Бас тарту + Ірі + Хабарлауда... + Google + Соңғы 7 күн + (белгі жоқ) + Әрдайым қосулы + ЖУРНАЛ + Интернетті жабу үшін тағы бір рет түртіңіз + Бетбелгі атын енгізіңіз + Түпнұсқаны тексеру қажет + Сілтеме сақтау + Ешқашан қайтадан көрсетпеңіз + Буферге көшіру + Папканың атын өзгерту + Автоматты сақтау идентификаторы/құпиясөз + Барлық параметрлердің әдепкі мәні. Жалғастыру керек пе? + Ұялы телефон + Бетбелгілер таңдау + Жабу + Ұсақ + Стандартты бапстапқы мәндеріне баптау + Корей (EUC-KR) + LTE/GSM/WCDMA (авто қосылу) + Белгінің атын өзгерту + ҚАЛТА ЖАСАУ + Үй беті + Жарамсыз URL + Көлемі + Мәзір + URL табылмады + Ұялы режим + Жаңа терезеден ашу + Email + Тіркесім жасалған + Деректерге қосылмады + Үлгілерді авто толтыру + Сайттарға орныңызға өтуді сұрауға мүмкіндік беру + Бей + ҚАЛТА АТАУЫН ӨЗГЕРТУ + Бетбелгілерден жойылған + Белгі қосу + Шолу кезінде беттер ашу + Еніне сәйкес келу + Шіл + Деректер желісі + Юникод (UTF-8) + Бетбелгі қосылды + Тарих + Соңғы ай + Дайын + Қосымшаны өзгерту + Барлық сақталған құпиясөздерді жою керек пе? + Тізім + Бетбелгіге қосу + Maм. + Қауіпсіздік саясаты интернет браузерінің пайдаланылуын шектейді + Нау + URL + Белгі салынбады. Белгінің саны шегіне жетті + Әрқашан сұрау + Бетті сақтау + Сөз таңдау + Қауіпсіздік ескертулерін көрсету + Қалтаны құру + Барлық жойылды + Таңдалған бетбелгілерді жою керек пе? + Жекеленген деректерді өшіріңіз + Браузердің барлық деректерін өшіру және барлық параметрлердің зауыттық мәндерін қалпына келтіру + Суреттерді веб-беттерден көрсету + Сөздік + Әдепкі көрініс + Тег бойынша реттеу + Веб-бағдарлама орнату + Бағдарлама туралы + Құпиялылық режимін қосу + Суреттер альбомы + Іздеу механизмі + Кейін пайдалану үшін формалардағы I деректер түрін еске сақтау + Тақырып жоқ + %d апта бұрын + Бастапқы экранға қосу + Орнын қосу + URL енгізіңіз + Қолмен + Жазбалар жоқ + JavaScript орындау + %s орныңызды сұрайды + Жұм + Нұсқа + Хабарлама + Кэш + Өзгер. + Жалпы + Сақталған беттер + %s хабарландыруларды көрсетуге рұқсат ету + Веб-беттердегі қалқымалы терезелерге тыйым салу + Көріністі сақтау + Көп кіретін сайттар + Кеше + Тақырыбын енгізу + Жел + Барлық жойылды + %d элемент таңдалды + Көріністі сақтау мүмкін емес + Хабарламалар + Қайта тапс. беру + Автом. өлшемін өзгерт. мәтін + Веб-сайт орнына кіру ақпаратын жою керек пе? + Тізімдік көрініс + Таңдалған бетбелгілерді жылжыту керек пе? + Жадында орын аз + Жад жетыспейт.Көп арналы жою. + diff --git a/res/kor-KR.xml b/res/kor-KR.xml new file mode 100644 index 0000000..b7bc59c --- /dev/null +++ b/res/kor-KR.xml @@ -0,0 +1,345 @@ + + + + 웹 알림 + 드래그 + 검색 결과가 없습니다 + 11월 + 붙여넣기 + 페이지 컨텐츠 설정 + 웹사이트 고급 설정 + 사용자 홈페이지 + 창 관리자 + 자동 + 기록 삭제 + 현재 페이지 + 열린 창을 모두 닫고 홈페이지로 이동합니다 + 쿠키 허용 + 공유 + 중국어(GBK) + 라틴어-1 (ISO-8859-1) + 개발자 모드 + 6월 + 이미지 표시 + 완료 + 설정 + 최대한 크게 + 데이터 연결 문제 + 8월 + 현재 페이지를 홈페이지로 설정 + 설정 + 삭제 + 일본어(SHIFT JIS) + 저장된 ID/비밀번호 + 열기 + 다시 묻지 않기 + 오프라인 보기로 저장 + 라이브박스 추가 + 7월 + 폴더 추가 + 추가 + 높음 + 입력된 사용자 ID와 비밀번호를 저장합니다 + 일본어(EUC-JP) + 다운로드 관리자 + 4월 + 중국어(Big5) + 크게 + 웹사이트 설정 + 모두 닫기 + 항목 선택 + 모두 선택 + 새로고침 + 뒤로 이동 + 기록을 삭제할까요? + 항목이 없습니다 + 폴더 + 사용자 에이전트 설정 + 데스크톱 보기 + 9월 + URL 복사 + 새 창에서 열기 + 수 + 북마크가 없습니다 + 태그 추가 + 이미지 보기 + 이메일로 전송 + 사용할 수 없습니다 + 전체 보기로 페이지를 엽니다 + 크게 + Picasa + 썸네일 보기 + 페이지 내에서 검색 + 비밀번호 + 제목 + 문자 인코딩 + 삭제되었습니다 + 설정 + 1개의 항목이 선택되었습니다 + 최소화 + 태그 + 문자 선택 켜기 + 새 폴더 + 북마크에 추가되었습니다 + 허용 + 읽을 수 있는 크기 + 이미지 표시 + 자동 + 10월 + 프록시 포트 + 편집 + 웹사이트 방문 기록을 삭제할까요? + 폴더 이름을 입력하세요 + 메시지로 전송 + 보기 + 화 + 월 + 멀티윈도우 + 이미 저장되어 있습니다 + URL 복사 + 설정을 기억합니다 + 위치 정보 삭제 + 모든 쿠키를 삭제할까요? + 저장된 양식 데이터를 모두 삭제할까요? + 네트워크 오류가 발생하였습니다 + 중지 + 페이지 내에서 검색 + 방문한 사이트가 없습니다 + 토 + 다운로드 + 북마크 추가 + 캐시에 저장된 컨텐츠와 데이터베이스를 삭제할까요? + 실패하였습니다 + 창 닫기 + 보통 + 마지막 주 + 서버에서 응답이 없어 웹페이지를 표시할 수 없습니다 + 북마크 삭제 + 스크랩북에 추가 + 이전 버전 + 이전 + 더보기 + 이동 + 어제 + 선택 모드 + 태그 없음 + 생성되었습니다 + SIM 카드를 삽입하세요 + 북마크가 삭제되었습니다 + 웹 알림 권한 설정을 삭제합니다 + 링크 공유 + 웹 양식 자동 입력용 텍스트를 설정합니다 + 확인 + 작게 + 이미지 복사 + 보안 연결 + 양식 데이터 + 자주 방문한 웹사이트 + 선택 + 폴더 + 열 수 있는 창의 개수만큼 이미 열려 있어서 새 창을 더 열 수 없습니다 + 웹사이트의 자바 스크립트 실행을 허용합니다 + 자동 새로고침 + 새 창 + 아니요 + 웹사이트가 쿠키를 저장하고 읽을 수 있도록 허용합니다 + 트레이를 닫으려면 두 번 누르세요 + 재생 + 최대 태그 수(%d개)를 초과하였습니다 + 불러오는 중... 잠시만 기다리세요. + 취소 + 데이터 네트워크가 해제되었습니다. Wi-Fi 네트워크를 사용하여 연결하거나 데이터 네트워크를 실행하세요. + 쿠키 + 빈 페이지 + 검색 + 2월 + 개인정보 보호 모드 해제 + 캐시 삭제 + 비밀번호 + 사용자 이름 + 내 디바이스에서 PC 웹사이트를 쉽게 볼 수 있습니다. 이 기능을 사용하면 글자 크기가 확대되어 쉽게 읽을 수 있습니다. 알아두기: 텍스트 레이아웃이 변경될 수 있습니다 + 북마크 편집 + 저장된 데이터 삭제 + 이 웹사이트에 저장된 데이터와 위치 정보 이용 권한을 모두 삭제할까요? + 모두 선택 + 안 함 + 폴더 선택 + 최근 방문 페이지 + 개발자 옵션 + 원본 언어 + 북마크 + 삭제 + 오늘 + 예 + 붙여넣기 + 다음 + 홈 화면에 추가할 수 없습니다. 미리보기를 허용하지 않는 웹사이트입니다. + 사용자 에이전트 + 예상치 못한 오류가 발생하였습니다 + 웹 알림 권한을 삭제할까요? + 일 + 저장되었습니다 + 웹페이지를 열려면 두 번 누르세요 + 웹페이지 추가 정보 + 보통 + %d개의 항목이 선택되었습니다 + 북마크에 추가 + 이미지 보기 + 다운로드를 시작하는 중... + 비어 있음 + 북마크 + 글자 크기 + 앞으로 이동 + 기록을 삭제할까요? + 모든 쿠키 삭제 + 인터넷 기록을 저장하지 않습니다 + 인터넷 파일 삭제 + 일본어(ISO-2022-JP) + 복사 + 폴더 이름 + 팝업 차단 + 동기화된 탭 + 홈에 추가 + 저장 + 인증서가 바르지 않습니다 + 시크릿 모드 + 1월 + 개인 정보 보호 및 보안 + 인쇄 + 이 웹사이트의 보안 인증서에 문제가 있습니다 + 밝기 + 삭제? + 글자 크기 + 자동 감지 + 양식 데이터 저장 + 삭제 + 취소 + 보안 경고 + 다운로드할까요? + URL을 검색하거나 입력하세요 + 양식 데이터 삭제 + 비밀번호 저장 + 방문 기록으로 이동 + 오늘 + 거부 + 개인 정보 보호 + 새로고침 + 웹 클립 + 비밀번호 삭제 + 홈페이지로 설정 + 취소 + 아주 크게 + 알림 준비 중... + Google + 최근 7일 + (태그 없음) + 항상 켜기 + 기록 + 인터넷을 종료하려면 한 번 더 누르세요 + 북마크 이름을 입력하세요 + 인증이 필요합니다 + 링크 저장 + 다시 표시하지 않기 + 클립보드에 복사 + 폴더 이름 변경 + ID/비밀번호 자동 저장 + 모든 설정이 기본값으로 되돌아갑니다. 계속할까요? + 휴대폰 + 북마크 선택 + 닫기 + 작게 + 기본값으로 초기화 + 한국어(EUC-KR) + LTE/GSM/WCDMA(자동 연결) + 태그 이름 변경 + 폴더 추가 + 홈페이지 + URL이 바르지 않습니다 + 데스크톱 보기 + 메뉴 + URL을 찾을 수 없습니다 + 휴대폰 보기 + 새 창에서 열기 + 이메일 + 단축메뉴가 추가되었습니다 + 데이터 연결을 실패하였습니다 + 양식 자동 채우기 + 웹사이트에서 내 위치 정보 수집을 요청할 수 있도록 허용합니다 + 목 + 폴더 이름 변경 + 북마크에서 삭제되었습니다 + 북마크 + 페이지 전체보기 + 너비에 맞추기 + 7월 + 데이터 네트워크 + 유니코드(UTF-8) + 북마크가 추가되었습니다 + 기록 + 지난 달 + 완료 + 북마크 편집 + 저장된 모든 비밀번호를 삭제할까요? + 목록 + 북마크에 추가 + 5월 + 보안 정책에 따라 인터넷 사용이 제한됩니다 + 3월 + URL + 북마크를 추가할 수 없습니다. 최대 북마크 수를 초과하였습니다. + 항상 묻기 + 페이지 저장 + 단어 선택 + 보안 경고 보기 + 폴더 추가 + 모두 삭제 + 선택한 북마크를 삭제할까요? + 사용자 설정 데이터 삭제 + 기본 설정으로 복구합니다 + 웹페이지의 이미지를 표시합니다 + 사전 + 기본 화면 + 태그별 정렬 + 웹 애플리케이션 설치 + 상세정보 + 개인정보 보호 모드 실행 + 스크랩북 + 검색 엔진 + 양식 데이터를 모두 저장합니다 + 제목이 없습니다 + %d주 전 + 홈 화면에 추가 + 위치 정보 사용 + URL을 입력하세요 + 수동 + 기록이 없습니다 + 자바 스크립트 실행 + %s이(가) 현재 위치 정보를 요청합니다 + 금 + 버전 + 메시지 + 캐시 + 편집 + 일반 + 저장된 페이지 + 알림을 표시하도록 %s 허용 + 웹페이지의 팝업을 차단합니다 + 이미지 저장 + 자주 방문한 웹사이트 + 어제 + 제목을 입력하세요 + 12월 + 모두 삭제되었습니다 + %d개의 항목이 선택되었습니다 + 이미지를 저장할 수 없습니다 + 메시지 + 순서 변경 + 글자 크기 자동 조절 + 웹사이트 위치 연결 정보를 삭제할까요? + 목록 보기 + 선택한 북마크를 이동할까요? + 저장 공간이 부족합니다 + 저장 공간이 없습니다. 필요 없는 파일을 삭제하세요. + diff --git a/res/lav-LV.xml b/res/lav-LV.xml new file mode 100644 index 0000000..8cbea6f --- /dev/null +++ b/res/lav-LV.xml @@ -0,0 +1,345 @@ + + + + Tīmekļa paziņojums + Vilkt + Nav atrasts neviens rezultāts + Nov. + Ielīmēt + Lapas satura iestatījumi + Atsevišķu vietņu papildu iestatījumi + Lietotāja sākumlapa + LOGU PĀRVALDNIEKS + Auto. + Nodzēst vēsturi + Pašreizējā lapa + Aizveriet visus atvērtos logus un atveriet sākumlapu + Pieņemt sīkfailus + Koplietot + Ķīniešu (GBK) + Latīņu-1 (ISO-8859-1) + Izstrādātāju režīms + Jūnijs + Ielādēt attēlus + Gatavs + Iestatījumi + Milzīgs + Datu savienojuma problēma + Aug. + Iestatīt pašreizējo lapu kā sākumlapu + Iestatījumi + Dzēst + Japāņu (SHIFT JIS) + Saglabātais ID un parole + Atvērt + Vairs nevaicāt + Saglabāt lasīšanai bezsaistē + Pievienot Livebox + Jūlijs + Izveidot mapi + Pievienot + Augsta + Saglabājiet tīmekļa vietņu lietotājvārdus un paroles + Japāņu (EUC-JP) + Lejupielāžu pārvaldnieks + Aprīlis + Ķīniešu (Big5) + Liels + Tīmekļa vietnes iestatījumi + Aizvērt visu + Izvēlēties objektus + Izv. visu + Ielādēt vēlreiz + Doties atpakaļ + Vai notīrīt vēsturi? + Nav vienumu + MAPE + Pielāgots lietotāja aģents + Darbvirsmas skats + Sep. + Kop. saites URL + Atvērt jaunā lapā + Tr. + Nav grāmatzīmes + Pievienot atzīmi + Skatīt attēlu + Sūtīt, izmantojot e-pastu + Nav atļauts + Rādīt pārskatu par tikko atvērtajām lapām + Liels + Picasa + Sīktēlu skats + Meklēt lapā + Parole + Nosaukums + Teksta kodēšana + Izdzēsts + Iestatījumi + Ir izvēlēts 1 objekts + Minimizēt + Atzīmes + Teksta izvēle ieslēgta + Jauna mape + Pievienots grāmatzīmēm + Atļaut + Lasāma + Rādīt attēlus + Automātiski + Okt. + Starpniekservera ports + Rediģēt + Vai dzēst pārlūka vēsturi? + Ievadiet mapes nosaukumu + Sūtīt, izmantojot ziņu + Skat. pēc + Ot. + Pr. + Vairāki logi + Jau pastāv + Kopēt URL + Atcerēties preferenci + Notīrīt atrašanās vietas piekļuvi + Vai izdzēst visus sīkfailus? + Vai dzēst visus saglabātos veidlapas datus? + Tīkla kļūda + Apturēt + Meklēt lapā + Nav apmeklētu vietņu + Se. + Lejupielādēt + Pievienot grāmatzīmi + Vai dzēst vietējās kešatmiņas saturu un datu bāzes? + Neizdevās + Aizvērt logu + Vidējs + Pēdējā nedēļa + Nevar parādīt tīmekļa lapu. Nav atbildes no servera + Dzēst grāmatzīmi + Piev. piezīmju albumam + Vecāka + Iepriekš. + Vēl + Pārvietot + Vakar + Izvēles režīms + Neatzīmēts + Izveidots + Ievietojiet SIM karti + Grāmatzīme noņemta + Notīrīt tīmekļa paziņojumu atļauju iestatījumus + Koplietot saiti + Iestatīt tekstu tīmekļa veidlapas automātiskai aizpildīšanai + Labi + Mazs + Kopēt attēlu + Drošs savienojums + Veidlapas dati + Biežāk apmeklētās + Izvēlēties + Mape + Nevar atvērt jaunu logu. Jau ir atvērts maksimālais skaits logu + Atļaut vietnēm palaist JavaScript + Automātiskā atsvaidzināšana + Jauns logs + Nē + Ļauj vietnēm saglabāt un lasīt sīkfailu datus + Lai aizvērtu ikonjoslu, veiciet dubultskārienu + Atskaņot + Sasniegts maksimālais atzīmju skaits (%d) + Notiek ielāde. Lūdzu, uzgaidiet... + Atcelt + Mobilie dati ir deaktivizēti. Izveidojiet savienojumu, izmantojot Wi-Fi tīklu, vai aktivizējiet mobilos datus + Sīkfaili + Tukša lapa + Meklēt + Feb. + Deaktivizēt privāto režīmu + Iztīrīt kešatmiņu + Parole + Lietotājvārds + Ērti skatiet datora tīmekļa vietnes savā mobilajā ierīcē. Šī funkcija palielina teksta lielumu ērtākai lasīšanai. Piezīme. Teksta izkārtojums var mainīties + GRĀMATZĪMJU REDIĢĒŠANA + Notīrīt saglabātos datus + Vai dzēst visus šīs vietnes datus un atrašanās vietu atļaujas? + Izv. visu + Nekad + Izvēlieties mapi + Pēdējā skatītā lapa + Izstrādātāja iespējas + Avota valoda + Grāmatzīmes + Dzēst + Šodien + Jā + Ielīmēt + Nāk. + Nevar pievienot sākuma ekrānam. Šī tīmekļa vietne neatļauj tās priekšskatīšanu + Lietotāja aģents + Neparedzēta kļūme + Vai notīrīt tīmekļa paziņojumu atļaujas? + Sv. + Saglabāts + Lai atvērtu tīmekļa vietni, veiciet dubultskārienu + Tīmekļa lapas papildinform. + Parasta + Ir izvēlēti %d objekti + Pievienot grāmatzīmēm + Skatīt attēlu + Sāk lejupielādi... + Tukšs + Grāmatzīmes + Fonta lielums + Doties uz priekšu + Are you sure you want to clear history? + Notīrīt visus sīkfailu datus + Interneta vēsture nav saglabāta + Dzēst pārlūkošanas datus + Japāņu (ISO-2022-JP) + Kopēt + Mapes nosaukums + Bloķēt uznirstošos logus + Sinhronizētās cilnes + Pievienot sākumam + Saglabāt + Nederīgs sertifikāts + Inkognito režīms + Jan. + Konfidencialitāte un drošība + Drukāt + Šai vietnei ir radušās problēmas ar drošības sertifikātu + Spilgtums + Dzēst? + Fonta lielums + Automātiski noteikt + Iegaumēt veidlapas datus + Dzēst + Atcelt + Drošības brīdinājums + Vai lejupielādēt? + Meklējiet vai ievadiet vietrādi URL + Notīrīt veidlapas datus + Atcerēties paroles + Atvērt vēsturi + Šodien + Atteikt + Konfidencialitāte + Atsvaidzināt + Tīmekļa klips + Notīrīt paroles + Iestatīt kā sākumlapu + Atcelt + Ļoti liels + Paziņo... + Google + Pēdējās 7 dienas + (nav atzīmju) + Vienmēr ieslēgts + VĒSTURE + Pieskarieties vēlreiz, lai aizvērtu internetu + Ievadiet grāmatzīmes nosaukumu + Nepieciešama autentifikācija + Saglabāt saiti + Nekad vairs nerādīt + Kopēt starpliktuvē + Pārdēvēt mapi + Automātiskās saglabāšanas ID/parole + Visi iestatījumi ir noklusētie. Vai turpināt? + Mobilais + Grāmatzīmju izvēle + Aizvērt + Mazs + Atjaunot noklusējumu + Korejiešu (EUC-KR) + LTE/GSM/WCDMA (automātisks savienojums) + Pārdēvēt virkni + IZVEIDOT MAPI + Mājas lapa + Nederīgs URL + Darbvirsmas skats + Izvēlne + URL nav atrasts + Mobilais skats + Atvērt jaunā logā + E-pasts + Izveidots īsceļš + Datu savienojums neizdevās + Aut. aizpildīt veidlapas + Atļaut vietnēm pieprasīt piekļuvi jūsu atrašanās vietai + Ce. + MAPES PĀRDĒVĒŠANA + Noņemts no grāmatzīmēm + Grāmatzīme + Atvērt lapas pārskatā + Pielāgot platumam + Jūl. + Datu tīkls + Unikods (UTF-8) + Pievienota grāmatzīme + Vēsture + Pagājušais mēnesis + Gatavs + Rediģēt grāmatzīmi + Vai dzēst visas saglabātās paroles? + Saraksts + Pievien. grāmatzīmēm + Maijs + Drošības politika ierobežo interneta pārlūka lietošanu + Mar. + URL + Nevar pievienot grāmatzīmi. Sasniegts maksimālais grāmatzīmju skaits + Jautāt vienmēr + Saglabāt lapu + Izv. vārdu + Rādīt drošības brīdinājumus + Izveidot mapi + Dzēst visu + Vai izdzēst izvēlētas grāmatzīmes? + Notīrīt personalizētos datus + Notīrīt visus pārlūka datus un atjaunot visus noklusējuma iestatījumus + Parādīt tīmekļa lapu attēlus + Vārdnīca + Noklusējuma skats + Kārtot pēc atzīmes + Instalēt tīmekļa programmu + Par pārlūku + Aktivizēt privāto režīmu + Piezīmju albums + Meklētājprogramma + Iegaumēt veidlapās ierakstītos datus turpmākai lietošanai + Nav nosaukuma + Pirms %d nedēļām + Pievienot sākuma ekrānam + Aktivizēt atrašanās vietu + Ievadiet URL + Manuāli + Nav vēstures + Palaist JavaScript + %s pieprasa jūsu atrašanās vietu + Pk. + Versija + Ziņa + Kešatmiņa + Rediģēt + Vispārīgi + Saglabātās lapas + Atļaut %s rādīt paziņojumus + Bloķēt uznirstošos logus tīmekļa lapās + Saglabāt attēlu + Biežāk apmeklētās vietnes + Vakar + Ievadiet nosaukumu + Dec. + Izdzēsts viss + Izvēlēts %d objekts + Nevar saglabāt attēlu + Ziņas + Pārkārtot + Autom. mainīt teksta lielumu + Vai dzēst tīmekļa vietnes atrašanās vietas piekļuves datus? + Saraksta skats + Vai pārvietot izvēlētās grāmatzīmes? + Atmiņa pilna + Nepietiek atmiņas. Izdzēsiet dažus vienumus + diff --git a/res/lit-LT.xml b/res/lit-LT.xml new file mode 100644 index 0000000..71edf74 --- /dev/null +++ b/res/lit-LT.xml @@ -0,0 +1,345 @@ + + + + Web pranešimas + Vilkti + Rezultatų nerasta + Lap. + Įklijuoti + Puslapio turinio nustat. + Papildomi nustatymai atskiroms svetainėms + Pagrindinis naudotojo puslapis + LANGŲ TVARKYKLĖ + Auto. + Išvalyti istoriją + Dabartinis puslapis + Uždarykite visus atvertus langus ir eikite į pradžios puslapį + Priimti slapukus + Dalytis + Kinų (GBK) + Lotynų-1 (ISO-8859-1) + Kūrėjo režimas + Birželis + Įkelti vaizdus + Atlikta + Nustat. + Milžiniškas + Duomenų siuntimo problema + Rgp. + Pasirinkti dabartini puslapį kaip pagrindinį + Nustat. + Trinti + Japanese (SHIFT JIS) + Išsaugotas ID ir slaptažodis + Atidaryti + Neklauskite dar kartą + Išsaugoti norint skaityti neprisijungus + Pridėti „Livebox“ + Liepa + Kurti aplanką + Pridėti + Didelė + Išsaugoti svetainėms skirtus naudotojo vardus ir slaptažodžius + Japonų (EUC-JP) + Atsisiuntimų tvarkytuvė + Balandis + Kinų („Big5“) + Didelis + Svetainės nustatymai + Išjungti viską + Pasirinkti elementų + Pasirinkti viską + Įkelti iš naujo + Eiti atgal + Valyti istoriją? + Elementų nėra + APLANKAS + Pasirinktinis naudotojo agentas + Darbalaukio peržiūra + Rug. + Kop. nuor. URL + Atid. nauj. lange + Tre. + Žymeklių nėra + Pridėti žymą + Žiūrėti pav. + Siųsti el. paštu + Neleidžiama + Rodyti naujai atidarytų puslapių apžvalgą + Didelis + Picasa + Miniatiūrų rodinys + Iešk. puslapyje + Slaptažodis + Pavadinimas + Teksto kodavimas + Ištrinta + Nustat. + Pasirinktas 1 elementas + Sumažinti + Žymos + Teksto atranka įjungta + Naujas aplankas + Įtraukta į adresyną + Leisti + Nuskaitoma + Rodyti vaizdus + Automatinis + Spal. + Proxy prievadas + Redaguoti + Trinti naršyklės istoriją? + Įrašyti aplanko pavadinimą + Siųsti kaip žinutę + Žr. pagal + Ant. + Pir. + Keli langai + Jau yra + Kopijuoti URL adresą + Įsiminti nuostatą + Ištrinti vietos prieigą + Ištrinti visus slapukus? + Trinti visų išsaugotų formų duomenis? + Tinklo klaida + Stabdyti + Iešk. puslapyje + Nėra lankomų svetainių + Šeš. + Atsisiųsti + Pridėti adresyno įrašą + Ištrinti įrenginyje saugomą turinį ir duomenų bazes? + Nepavyko + Uždaryti langą + Vidutinis + Praėjusią savaitę + Neįmanoma parodyti svetainės. Nėra atsakymo iš serverio + Panaikinti adresyno įrašą + Pridėti prie įr. knyg. + Senesnis + Ankst. + Daug. + Perkelti + Vakar + Pasirinkimo režimas + Nepažymėta + Sukurta + Įdėkite SIM kortelę + Adresyno įrašas pašalintas + Valyti žiniatinklio pranešimų leidimų nustatymus + Dalytis nuoroda + Nustatyti tekstą, kad būtų automatiškai pildoma žiniat. forma + Gerai + Mažas + Kopijuoti vaizdą + Saugus ryšys + Formos duomenys + Dažniausiai lankomas + Rinktis + Aplankas + Neįmanoma atidaryti naujo lango. Jau atidarytas didžiausias leistinas langų skaičius + Leisti svetainėms paleisti „JavaScript“ + Automatinis atnaujinimas + Naujas langas + Ne + Leidžia svetainėms išsaugoti ir skaityti slapukų duomenis + Bakstelėkite dukart, kad uždarytumėte dėklą + Paleisti + Pasiektas didžiausias žymų skaičius (%d) + Įkeliama. Palaukite... + Atšaukti + Mobilieji duomenys išjungti. Prijungti naudojant „Wi-Fi“ tinklą arba įgalinti mobiliuosius duomenis + Slapukai + Tuščias puslapis + Ieškoti + Vas. + Išjungti privatųjį režimą + Valyti talpyklą + Slaptažodis + Naudotojo vardas + Lengvai peržiūrėkite kompiuterio svetaines mobiliajame įrenginyje. Ši funkcija padidina tekstą, kad jį būtų lengviau skaityti. Pastaba. Teksto išdėstymas gali pasikeisti + REDAGUOTI ADRESYNO ĮRAŠUS + Išvalyti saugomus duomenis + Ištrinti visus svetainės duomenis ir vietos leidimus? + Pasirinkti viską + Niekada + Pasirinkti aplanką + Paskutinis peržiūrėtas puslapis + Kūrėjų parinktys + Šaltinio kalba + Adresyno įrašai + Valyti + Šiandien + Taip + Įklijuoti + Kitas + Neįmanoma pridėti prie pradžios ekrano. Šioje svetainėje negalėsite jo peržiūrėti + Vartotojo agentas + Nenumatyta klaida + Valyti žiniatinklio pranešimų leidimus? + Sek. + Išsaugota + Bakstelėkite dukart, kad atidarytumėte svetainę + Papildoma svetainės inform. + Įprastas + Pasirinkta elementų: %d + Pridėti prie adresyno įrašų + Žiūrėti pav. + Pradeda siųsti... + Tuščia + Žymelės + Šrifto dydis + Eiti pirmyn + Are you sure you want to clear history? + Pašalinti visus slapukų duomenis + Interneto istorija nesaugoma + Trinti naršymo duomenis + Japonų (ISO-2022-JP) + Kopijuoti + Aplanko pavadinimas + Blokuoti iškylančiuosius lang. + Sinchronizuojami skirtukai + Įdėti į pradžios ekraną + Išsaug. + Netinkamas sertifikatas + Nežinomas režimas + Sau. + Privatumas ir sauga + Spausdinti + Iškilo problemų dėl šios svetainės apsaugos sertifikato + Ryškumas + Trinti? + Šrifto dydis + Automatinis aptikimas + Prisiminti formos duomenis + Trinti + Atš. + Saugos įspėjimas + Ar atsisiųsti? + Ieškoti arba įvesti URL + Išvalyti formos duomenis + Prisiminti slaptažodžius + Eiti į istoriją + Šiandien + Atsisakyti + Privatumas + Naujinti + Žiniatinklio klipas + Išvalyti slaptažodžius + Nustatyti kaip pagrindinį puslapį + Atšaukti + Milžiniškas + Informuojama... + Google + Pastarosios 7 dienos + (žymų nėra) + Visada įjungta + ISTORIJA + Bakstelėkite dar kartą, kad išjungtumėte internetą + Čia įveskite žymeklio pavadinimą + Reikalinga patvirtinti autentiškumą + Įrašyti nuorodą + Daugiau neberodyti + Kopijuoti į iškarpinę + Pervardyti aplanką + Automatiškai išsaugoti ID / slaptažodį + Visi nustatymai numatytieji. Tęsti? + Mobilusis + Pasirinkite adresyno įrašus + Uždaryti + Mažas + Nustatyti į numatytąjį + Korėjiečių (EUC-KR) + LTE / GSM / WCDMA (automatinis prijungimas) + Pervadinkite žymą + SUKURTI APLANKĄ + Pradinis puslapis + Netinkamas URL + Darbalaukio peržiūra + Meniu + URL nerastas + Mobiliojo telefono rodinys + Atid. naujame lange + El. paštas + Sukurtas šaukinys + Nepavyko duomenų ryšys + Automat. pildomos formos + Leisti svetainei prašyti prieigos prie jūsų vietos + Ket. + PERVARDYTI APLANKĄ + Pašalinta iš adresyno + Adresyno įrašas + Atidaryti psl. apžvalg. + Pritaikyti pagal plotį + Lie. + Duomenų tinklas + Unikodas (UTF-8) + Žymelė pridėta + Istorija + Paskutinis mėnuo + Atlikta + Redaguoti žymelę + Trinti visus išsaugotus slaptažodžius? + Sąrašas + Pridėti į žymeklius + Gegužė + Saugos strategija riboja naudojimąsi interneto naršykle + Kov. + URL + Neįmanoma įtraukti žymelės. Pasiektas maksimalus žymelių skaičius + Visada klausti + Išsaugoti tinklal. + Pasirinkite žodį + Rodyti apsaugos įspėjimus + Kurti aplanką + Trinti viską + Trinti pasirinktus adresyno įrašus? + Išvalyti pritaikytus duomenis + Išvalyti visus naršyklės duomenis ir atkurti visus numatytuosius nustatymus + Rodyti paveikslėlius tinklalapiuose + Žodynas + Numatytasis vaizdas + Rūšiuoti pagal žymą + Diegti žiniatinklio programą + Apie naršyklę + Įjungti privatųjį režimą + Įrašų knyga + Paieškos sistema + Prisiminti formų duomenis, kad būtų galima naudoti vėliau + Nėra pavadinimo + Prieš %d sav. + Pridėt prie pradžios ekrano + Įjungti vietą + Įvesti URL + Rankinis + Nėra istorijos + Vykdyti „JavaScript“ + %s užklausų jūsų vietai + Pen. + Versija + Žinutė + Talpykla + Redaguoti + Bendri nustatymai + Išsaugoti puslapiai + Leisti %s rodyti pranešimus + Blokuoti iškylančiuosius langus tinklalapiuose + Išsaugoti vaizdą + Dažniausiai lankomos svetainės + Vakar + Įveskite pavadinimą + Gru. + Viskas ištrinta + Pasirinkta elementų: %d + Paveikslėlio išsaugoti nepavyko + Žinutės + Pertvarkyti + Autom.teksto dydžio keitimas + Trinti informaciją apie prieigą prie svetainės vietos? + Sąrašo vaizdas + Perkelti pasirinktus adresyno įrašus? + Nepakanka atminties + Nepakanka atminties. Ištrinkite kai kuriuos elementus + diff --git a/res/mkd-MK.xml b/res/mkd-MK.xml new file mode 100644 index 0000000..ea4a309 --- /dev/null +++ b/res/mkd-MK.xml @@ -0,0 +1,345 @@ + + + + Мрежно известување + Влечи + Нема резултати + Ное. + Пресликај + Опции за содрж. на стр. + Напредни опции за одделни сајтови + Корисничка почетна страница + УПРАВ. СО ПРОЗОРЦИ + Автоматски + Избриши историја + Тековна страница + Затворете ги сите прозорци и одете на почетната страница + Прифаќај колачиња + Сподели + Кинески (GBK) + Latin-1 (ISO-8859-1) + Режим за програмери + Јуни + Вчитај слики + Готово + Опции + Џиновски + Проблем со податочното поврзување + Авг + Постави ја моменталната страница за основна + Опции + Избр. + Јапонски (SHIFT JIS) + Сочувани идентификација и лозинка + Отвори + Не прашувај веќе + Сочувај за читање без мрежа + Додај Livebox + Јули + Нова папка + Додај + Висок + Меморирај кориснички имиња и лозинки за сајтовите + Јапонски (EUC-JP) + Уредување преземања + Април + Кинески (Big5) + Голема + Опции за сајт + Затвори ги сите + Изберете записи + Избери ги сите + Отвори повторно + Оди назад + Бриши историја? + Нема записи + ПАПКА + Прилагоден кориснички агент + Компјутерски приказ + Сеп + Коп. линк за URL + Отвори нова стр. + Сре + Нема сочувани страници + Додај ознака + Види слика + Прати преку email + Не е дозволено + Прикажи преглед на новоотворените страници + Голема + Picasa + Икони + Најди на стр. + Лозинка + Наслов + Кодирање на текстот + Избришано + Опции + Избран е 1 запис + Намали + Ознаки + Вкл.селектирање текст + Нова папка + Додадено во ознаки + Дозволи + Читливо + Покажи слики + Автоматски + Окт. + Порт за прокси + Измени + Да се избрише историјата на прегледникот? + Внесете име за папката + Прати преку порака + Преглед + Вто + Пон + Повеќе прозорци + Веќе постои + Копирај URL + Запомни преференци + Избриши пристап кон локација + Избриши сите колачиња? + Да се избришат сите сочувани податоци за формулари? + Грешка во мрежата + Прекини + Најди на стр. + Нема посетувани сајтови + Саб + Преземи + Додај сочувана стр. + Да се избрише локално кешираната содржина и бази? + Неуспешно + Затвори прозорец + Средна + Последна седмица + Не може да се прикаже веб-страницата. Нема одговор од серверот + Избриши омилена стр. + Додај во албум + Постаро + Претход. + Повеќе + Премести + Вчера + Режим за избор + Неозначено + Направено + Ставете SIM картичка + Омилената страница е отстранета + Избриши опции за дозволи за известувања од интернет + Сподели линк + Одредете текст за автом. пополнување формулари на интернет + OK + Мала + Копирај слика + Безбедна врска + Податоци за формулари + Најпосетувани + Избери + Папка + Не може да се отвори нов прозорец. Достигнат е максималниот број отворени прозорци + Дозволи страниците да извршуваат JavaScript + Автоматско обновување + Нов прозорец + Не + Дозволи сајтовите да меморираат и читаат податоци од „колачињата“ + Допрете двапати за да ја затворите лентата. + Емитувај + Достигнат е максималниот број ознаки (%d) + Се вчитува. Почекајте... + Откажи + Мобилните податоци се исклучени. Поврзете се со мрежа Wi-Fi или овозможете мобилни податоци + Колачиња + Празна страница + Пребарување + Фев + Исклучи приватен режим + Избриши кеш-меморија + Лозинка + Корисничко име + Лесно гледајте компјутерски страници на интернет на мобилниот уред. Оваа функција го зголемува текстот за да го олесни читањето. Забелешка: Распоредот на текстот може да се смени + ИЗМЕНИ ОМИЛЕНИ СТРАНИЦИ + Избриши ги меморираните податоци + Да се избришат сите податоци за сајтот и дозволи за локацијата? + Избери ги сите + Никогаш + Изберете папка + Последна гледана страница + Опции за програмери + Оригинален јазик + Сочувани адреси + Избриши + Денес + Да + Пресликај + Следно + Не може да се додаде на почетниот екран. Оваа интернет страница не дозволува да се прегледува + Кориснички агент + Неочекувана грешка + Да се избришат дозволите за известувањата од интернет? + Нед + Меморирано + Допрете двапати за да ја отворите страницата. + Доп. инфо. за инт.-страница + Нормално + Избрани се %d записи + Додај во Омилени + Види слика + Почнува преземање... + Празно + Сочувани адреси + Големина на букви + Оди напред + Are you sure you want to clear history? + Избриши ги сите податоци за колачињата + Интернет-историјата не е зачувана + Избриши податоци од разгледувањето на интернет + Јапонски (ISO-2022-JP) + Копирај + Име на папката + Блокирај појавни прозорци + Синхронизирај картички + Додај дома + Сочувај + Неправилен сертификат + Режим инкогнито + Јан + Приватност и безбеднсот + Печати + Има проблеми со безбедносниот сертификат на сајтот + Светлина + Избриши? + Големина на букви + Автоматско откривање + Запомни податоци за формулар + Избриши + Откажи + Безбедносно предупредување + Преземи? + Пребарајте или внесете URL + Избриши податоци за формулари + Памети лозинки + Оди до историја + Денес + Одбиј + Доверливо + Обнови + Веб-запис + Избриши ги лозинките + Постави како почетна страница + Откажи + Огромен + Се известува... + Google + Последните 7 дена + (нема ознаки) + Секогаш вклучено + ИСТОРИЈА + Допрете уште еднаш за да се затвори интернет + Внесете име на омилената страница + Се бара препознавање + Сочувај линк + Не прикажувај веќе + Копирај во посредната меморија + Преименувај папка + Автоматски сочувај ID/лозинка + Сите нагодувања ќе се ресетираат. Сепак продолжи? + Мобилен + Избери омилени страници + Затвори + Мала + Ресетирај на основните вредности + Корејски (EUC-KR) + LTE/GSM/WCDMA (автоматско поврзување) + Преименувај ознака + НОВА ПАПКА + Почетна стр. + Неправилен URL + Desktop приказ + Мени + URL не е пронајденo + Мобилен преглед + Отвори во нов проз. + Е-пошта + Направена е кратенка + Неуспешно податочно поврзување + Автом. пополн. формулари + Дозволи веб страните да бараат пристап кон вашата локација + Чет + ПРЕИМЕНУВАЈ ПАПКА + Отстрането од ознаките + Омилена страница + Отв. стр. во преглед + На цела широчина + Јул + Мрежа на податоци + Уникод (UTF-8) + Омилената страница е додадена + Историја + Последниот месец + Готово + Измени омилена стр. + Да се избришат сите сочувани лозинки? + Листа + Додај во омил.стр. + Мај + Политиката на безбедност го ограничува користењето прегледник за интернет + Март + URL + Не може да се додаде омилена страница. Достигнат е максималниот број омилени страници + Прашувај секогаш + Сочувај страница + Изберете збор + Прикажи безбедносни предупредувања + Направи папка + Избриши сè + Да се избришат избраните омилени страници? + Избриши персонални податоци + Избриши ги сите податоци на прегледникот и ресетирај ги сите нагодувања на основните + Прикажувај слики на веб-страниците + Речник + Основен преглед + Подреди по ознака + Инсталираj веб-апликација + За пребарувачот + Вклучи приватен режим + Албум со исечоци + Пребарувач + Памети ги податоците што ги внесувам во формуларите + Нема наслов + Пред %d недели + Додај на почетниот екран + Овозможи локација + Внеси URL + Рачно + Нема белешки + Активирај JavaScript + %s барања за вашата локација + Пет + Верзија + Порака + Кеш меморија + Измени + Општо + Сочувани страници + Дозволи %s да покажува известувања + Блокирај појавни прозорци на интернет-страниците + Меморирај слика + Најпосетувани сајтови + Вчера + Внеси наслов + Дек. + Избриши сè + Избран е %d запис + Не може да се зачува сликата + Пораки + Пререди + Автом. мен. голем. на текст + Да се избришат информациите за пристап на локација на сајтот? + Листа + Да се преместат избраните омилени страници? + Нема доволно меморија + Нема доволно меморија. Избришете некој запис + diff --git a/res/nld-NL.xml b/res/nld-NL.xml new file mode 100644 index 0000000..bc55cf2 --- /dev/null +++ b/res/nld-NL.xml @@ -0,0 +1,345 @@ + + + + Webmelding + Slepen + Geen resultaten gevonden + nov + Plakken + Instellingen pagina-inhoud + Geavanceerde instellingen voor afzonderlijke websites + Startpagina gebruiker + VENSTERBEHEERDER + Automatisch + Geschiedenis wissen + Huidige pagina + Sluit alle geopende vensters en ga naar de startpagina + Cookies accepteren + Delen + Chinees (GBK) + Latin-1 (ISO-8859-1) + Ontwikkelaarstand + Juni + Afbeeldingen laden + Klaar + Instellingen + Enorm + Probleem met dataverbinding + aug + Huidige pagina instellen als startpagina + Instellingen + Wissen + Japans (SHIFT JIS) + Opgeslagen id en wachtwoord + Openen + Niet nogmaals vragen + Opslaan voor offline lezen + Livebox toevoegen + Juli + Map maken + Toevoegen + Hoog + Gebruikersnamen en wachtwoorden voor websites opslaan + Japans (EUC-JP) + Downloadmanager + April + Chinees (Big5) + Groot + Website-instellingen + Alles sluiten + Items selecteren + Alles selecteren + Opnieuw laden + Ga terug + Geschiedenis wissen? + Geen items + MAP + User-agent aanpassen + Weergave bureaublad + sep + URL kopiëren + Open in nw venster + WO + Geen favorieten + Tag toevoegen + Afbeelding bekijken + Verzenden via e-mail + Niet toegestaan + Overzicht weergeven van onlangs geopende pagina's + Groot + Picasa + Miniatuurweergave + Zoek op pagina + Wachtwoord + Titel + Tekstcodering + Verwijderd + Instellingen + 1 item geselecteerd + Minimaliseren + Tags + Tekstselectie aan + Nieuwe map + Toegevoegd aan favorieten + Toestaan + Leesbaar + Afbeeldingen tonen + Automatisch + okt + Poort proxy + Bewerken + Browsergeschiedenis verwijderen? + Mapnaam invoeren + Verzenden via bericht + Weergave + DI + MA + Multi window + Bestaat al + URL kopiëren + Voorkeur onthouden + Toegang tot locatie wissen + Alle cookies wissen? + Alle opgeslagen formuliergegevens verwijderen? + Netwerkfout + Stoppen + Zoek op pagina + Geen bezochte sites + ZA + Downloaden + Favoriet toevoegen + Inhoud in lokale cache en databases verwijderen? + Mislukt + Venster sluiten + Normaal + Laatste week + Kan de webpagina niet weergeven. Geen reactie van de server + Favoriet verwijderen + Toevoegen aan plakboek + Ouder + Vorige + Meer + Verplaatsen + Gisteren + Selectiestand + Niet-getagd + Gemaakt + Plaats SIM-kaart + Favoriet verwijderd + Machtigingsinstellingen voor websitemeldingen wissen + Koppeling delen + Tekst instellen voor automatisch invullen webformulier + OK + Klein + Afbeelding kopiëren + Veilige verbinding + Formuliergegevens + Meest bezocht + Selecteren + Map + Kan nieuw venster niet openen. Maximumaantal vensters bereikt + Sites toestaan om JavaScript uit te voeren + Autom. vernieuwen + Nieuw venster + Nee + Sites toestaan om cookiegegevens op te slaan en te lezen + Tik tweemaal om het vak te sluiten. + Afspelen + Maximumaantal tags (%d) bereikt + Laden. Even geduld... + Annuleren + Mobiele gegevens uitgeschakeld. Maak verbinding via Wi-Fi-netwerk of schakel mobiele gegevens in + Cookies + Lege pagina + Zoeken + feb + Privacystand uitschakelen + Buffer leegmaken + Wachtwoord + Gebruikersnaam + Voor het gemakkelijk bekijken van pc-websites op uw mobiele apparaat. Met deze functie vergroot u de tekst zodat u deze gemakkelijker kunt lezen. Opmerking: de indeling kan hierdoor veranderen + FAVORIETEN BEWERKEN + Opgeslagen gegevens wissen + Alle websitegegevens en locatiemachtigingen verwijderen? + Alles selecteren + Nooit + Map selecteren + Laatst weergegeven pagina + Ontwikkelaarsopties + Brontaal + Favorieten + Wissen + Vandaag + Ja + Plakken + Volgende + Kan niet toevoegen aan startscherm. Deze website staat geen voorbeeldweergave toe + User-agent + Onverwachte fout + Machtigingen voor websitemeldingen wissen? + ZO + Opgeslagen + Tik tweemaal om de webpagina te openen. + Aanvullende info webpagina + Normaal + %d items geselecteerd + Toevoegen aan Favorieten + Afbeelding bekijken + Downloaden starten... + Leeg + Favorieten + Tekstgrootte + Ga vooruit + Are you sure you want to clear history? + Alle cookiegegevens wissen + Internetgeschied. is niet opgeslagen + Surfgegevens verwijderen + Japans (ISO-2022-JP) + Kopiëren + Mapnaam + Pop-ups blokkeren + Gesynchronis. tabbladen + Toevoegen aan startpagina + Opslaan + Ongeldig certificaat + Incognitomodus + jan + Privacy en beveiliging + Afdrukken + Er zijn problemen met het beveiligingscertificaat voor deze site + Helderheid + Wissen? + Tekstgrootte + Automatisch detecteren + Formuliergegevens onthouden + Wissen + Annul. + Beveiligingswaarschuwing + Downloaden? + URL zoeken of ingeven + Formuliergegevens wissen + Wachtwoorden onthouden + Ga naar historie + Vandaag + Weigeren + Privacy + Vernieuwen + Webclip + Wachtwoorden wissen + Instellen als startpagina + Annuleer + Extra groot + Melden... + Google + Laatste 7 dagen + (geen tags) + Altijd aan + GESCHIEDENIS + Tik nogmaals om internet te sluiten + Geef naam favoriet in + Verificatie vereist + Koppeling opslaan + Niet meer weergeven + Kopiëren naar klembord + Naam map wijzigen + Gebruikersnaam/wachtwoord automatisch opslaan + Alle instellingen op standaard. Doorgaan? + Mobiel + Favorieten selecteren + Sluiten + Klein + Standaardinstellingen + Koreaans (EUC-KR) + LTE/GSM/WCDMA (automatisch verbinden) + Tagnaam wijzigen + MAP MAKEN + Startpagina + Adres is onjuist + Bureaubladweergave + Menu + URL niet gevonden + Mobiele weergave + In nieuw venster + E-mail + Sneltoets gemaakt + Gegevensverbinding mislukt + Formulieren autom vullen + Sites toestaan om toegang tot uw locatie te krijgen + DO + NAAM MAP WIJZIGEN + Verwijderd uit favorieten + Favorieten + Open pag. in overzicht + Passend in breedte + jul + Dataverbinding + Unicode (UTF-8) + Favoriet toegevoegd + Geschiedenis + Vorige maand + Gereed + Favoriet bewerken + Alle opgeslagen wachtwoorden verwijderen? + Lijst + Toev. als favoriet + Mei + Gebruik van internetbrowser beperkt door beveiligingsbeleid + mrt + URL + Kan geen favoriet toevoegen. Maximumaantal favorieten bereikt + Altijd vragen + Pagina opslaan + Woord selecteren + Beveiligingswaarschuwingen weergeven + Map maken + Alles verwijderen + De geselecteerde bladwijzers verwijderen? + Wis aangepaste gegevens + Alle browsergegevens wissen en alle standaardinstellingen terugzetten + Afbeeldingen weergeven op webpagina's + Woordenboek + Standaardweergave + Sorteren op tag + Webapp installeren + Browserinfo + Privacystand inschakelen + Plakboek + Zoekmachine + Ingetypte formuliergegevens onthouden voor later gebruik + Geen titel + %d weken geleden + Toevoegen aan startscherm + Locatie activeren + URL invoeren + Handmatig + Geen geschiedenis + JavaScript uitvoeren + %s vraagt om uw locatie + VR + Versie + Bericht + Buffer + Bewerken + Algemeen + Opgeslagen pagina's + %s toestemming geven om meldingen weer te geven + Pop-ups blokkeren op webpagina´s + Afbeelding opslaan + Meest bezochte sites + Gisteren + Titel invoeren + dec + Alles verwijderd + %d item geselecteerd + Opslaan afbeelding mislukt + Berichten + Indeling wijzigen + Tekstgrootte autom. wijzigen + Toegangsgegevens voor websitelocatie verwijderen? + Lijstweergave + Geselecteerde favorieten verplaatsen? + Onvoldoende geheugen + Onvoldoende geheugen. Wis een aantal items + diff --git a/res/nob-NO.xml b/res/nob-NO.xml new file mode 100644 index 0000000..ad33e7f --- /dev/null +++ b/res/nob-NO.xml @@ -0,0 +1,345 @@ + + + + Webvarsel + Dra + Fant ingen resultater + Nov. + Lim inn + Innst. for sideinnhold + Avanserte innstillinger for individuelle webområder + Brukerangitt hjemmeside + VINDUSBEHANDLER + Auto + Tøm logg + Gjeldende side + Lukk alle åpne vinduer og gå til startsiden + Godta informasjonskapsler + Del + Kinesisk (GBK) + Latin-1 (ISO-8859-1) + Utviklermodus + juni + Åpne bilder + Utført + Innstillinger + Gigantisk + Datatilkoblingsproblem + aug. + Angi gjeldende side som hjemmeside + Innstillinger + Slett + Japansk (SHIFT JIS) + Lagret ID og passord + Åpne + Ikke spør på nytt + Lagre for frakoblet lesing + Legg til Livebox + juli + Lag mappe + Legg til + Høy + Lagre brukernavn og passord for webområder + Japansk (EUC-JP) + Nedlastingsbehandling + april + Kinesisk (Big5) + Stor + Innstillinger for webområde + Lukk alle + Merk elementer + Merk alt + Oppdater + Gå bakover + Fjerne historikk? + Ingen elementer + MAPPE + Tilpass brukeragent + Skrivebordsvisning + sep. + Kopier URL + Åpne i en ny side + ons + Ingen bokmerker + Legg til tagg + Vis bilde + Send via e-post + Ikke tillatt + Vis oversikt over nylig åpnede sider + Stor + Picasa + Miniatyrvisning + Finn på side + Passord + Tittel + Tekstkoding + Slettet + Innstillinger + 1 element valgt + Minimer + Tagger + Tekstmerking på + Ny mappe + Lagt til i bokmerker + Tillat + Lesbar + Vis bilder + Automatisk + okt. + Proxy-port + Rediger + Slette nettleserhistorikk? + Angi mappenavn + Send via melding + Vis etter + tir + man + Flervindu + Finnes allerede + Kopier URL + Husk preferanse + Fjern plasseringstilgang + Slette alle informasjonskapsler? + Slette alle lagrede skjemadata? + Nettverksfeil + Stopp + Finn på side + Ingen besøkte områder + lør + Last ned + Legg til bokmerke + Slette lokalt bufret innhold og databaser? + Det oppstod en feil + Lukk vindu + Middels + Siste uke + Kan ikke vise nettsiden. Serveren svarer ikke + Slett bokmerke + Legg til i utklippsbok + Eldre + Forrige + Mer + Flytt + I går + Valgmodus + Ikke tagget + Opprettet + Sett inn SIM-kortet + Bokmerke fjernet + Tøm innstillinger for nettvarseltillatelser + Del kobling + Angi autoutfyllingstekst for webskjema + OK + Liten + Kopier bilde + Sikker tilkobling + Skjemadata + Mest besøkt + Velg + Mappe + Kan ikke åpne nytt vindu. Maksimalt antall vinduer er allerede åpnet + Tillat at sider kjører JavaScript + Automatisk oppdatering + Nytt vindu + Nei + Tillater områder å lagre og lese data fra informasjonskapsler + Dobbelttrykk for å lukke skuffen. + Spill av + Det maksimale antall tagger (%d) er nådd + Åpner. Vennligst vent... + Avbryt + Mobildata deaktivert. Koble til ved hjelp av Wi-Fi-nettverk, eller aktiver mobildata + Informasjonskapsler + Tom side + Søk + feb. + Deaktiver privatmodus + Tøm mellomlager + Passord + Brukernavn + Vis PC-nettsteder enkelt på mobilenheten. Denne funksjonen øker tekststørrelsen slik at den blir lettere å lese. Merk: Tekstens layout kan bli endret + REDIGER BOKMERKER + Fjern lagrede data + Slette alle webområdedata og plasseringstillatelser? + Merk alt + Aldri + Velg mappe + Siste viste side + Utvikleralternativer + Kildespråk + Bokmerker + Slett + I dag + Ja + Lim inn + Neste + Kan ikke legge til på startskjermebildet. Dette nettstedet tillater ikke forhåndsvisning + Brukeragent + Uventet feil + Tømme webvarseltillatelser? + søn + Lagret + Dobbelttrykk for å åpne nettsiden. + Ytterligere nettstedsinfo. + Normal + %d elementer valgt + Legg til i Bokmerker + Vis bilde + Starter nedlasting... + Tom + Bokmerker + Skriftstørrelse + Gå forover + Are you sure you want to clear history? + Tøm alle informasjonskapseldata + Internett-historikk lagres ikke + Slett nettlesingsdata + Japansk (ISO-2022-JP) + Kopier + Mappenavn + Blokker popups + Synkroniserte faner + Legg til på startskjermbilde + Lagre + Ugyldig sertifikat + Inkognitomodus + jan. + Personvern og sikkerhet + Skriv ut + Det er problemer med sikkerhetssertifikatet for dette området + Lysstyrke + Slett? + Skriftstørrelse + Automatisk gjenkjenning + Husk skjemadata + Slett + Avbryt + Sikkerhetsadvarsel + Laste ned? + Søk eller angi URL + Tøm skjemadata + Husk passord + Gå til logg + I dag + Avvis + Personvern + Oppdater + Nettklipp + Tøm passord + Bruk som hjemmeside + Avbryt + Veldig stor + Varsler... + Google + Siste 7 dager + (ingen tagger) + Alltid på + LOGG + Trykk én gang til for å lukke Internett + Angi bokmerkenavn + Krever godkjenning + Lagre kobling + Vis aldri igjen + Kopier til utklippstavle + Endre mappenavn + Autolagre brukernavn/passord + Alle innstillinger til standard. Fortsette? + Mobil + Velg bokmerker + Lukk + Liten + Tilbakestill til standard + Koreansk (EUC-KR) + LTE/GSM/WCDMA (automatisk tilkobling) + Endre navn på tagg + OPPRETT MAPPE + Startside + Ugyldig URL + Skrivebordsvisning + Meny + URL ikke funnet + Mobilvisning + Åpne i nytt vindu + E-post + Snarvei opprettet + Datatilkobling mislyktes + Autoutfylling av skjema + Tillat områder å be om tilgang til din plassering + tor + GI NYTT NAVN TIL MAPPE + Fjernet fra bokmerker + Bokmerke + Åpne sider i oversikt + Tilpass til bredde + juli + Datanettverk + Unicode (UTF-8) + Bokmerke lagt til + Historikk + Forrige måned + Utført + Rediger bokmerke + Slette alle lagrede passord? + Liste + Legg til i Bokmerker + mai + Sikkerhetspolicy begrenser bruk av Internettleser + mars + URL + Kan ikke legge til bokmerke. Maksimalt antall bokmerker er nådd + Spør alltid + Lagre side + Velg ord + Vis sikkerhetsvarsler + Opprett mappe + Slett alle + Slette valgte bokmerker? + Fjern personlige data + Tøm alle nettleserdata og tilbakestill alle innstillinger til standard + Vis bilder på nettsider + Ordbok + Standard visning + Sorter etter tagg + Installer webprogram + Om nettleseren + Aktiver privatmodus + Utklippsbok + Søkemotor + Husk data jeg skriver inn i skjemaer til senere bruk + Ingen tittel + %d uker siden + Legg til på startskjerm + Aktiver plassering + Tast inn URL + Manuelt + Ingen logg + Kjør Java-skript + %s forespør din plassering + fre + Versjon + Melding + Mellomlager + Rediger + Generelt + Lagrede sider + Tillat %s å vise varsler + Blokker popup-vinduer på nettsider + Lagre bilde + Mest besøkte sider + I går + Angi tittel + des. + Alle er slettet + %d element valgt + Kunne ikke lagre bilde + Meldinger + Omordne + Endre tekststrl. automatisk + Slette plasseringsinformasjon for nettsted? + Listevisning + Flytte valgte bokmerker? + Ikke nok minne + Ikke nok minne. Slett noen elementer + diff --git a/res/pol-PL.xml b/res/pol-PL.xml new file mode 100644 index 0000000..e73b677 --- /dev/null +++ b/res/pol-PL.xml @@ -0,0 +1,345 @@ + + + + Powiadomienie internetowe + Przeciągnij + Nie znaleziono wyników + Lis. + Wklej + Ust. zawartości strony + Zaawansowane ustawienia konkretnych witryn WWW + Strona główna użytkownika + MENEDŻER OKIEN + Automatyczny + Wyczyść historię + Bieżąca strona + Zamknij wszystkie otwarte okna i przejdź na stronę główną + Odbiór plików cookie + Udostępnij + Chiński (GBK) + Łaciński-1 (ISO-8859-1) + Tryb programisty + Czerwiec + Załaduj obrazy + Gotowe + Ustawienia + Gigantyczna + Problem z przesyłaniem danych + Sie. + Ustaw bieżącą stronę jako główną + Ustawienia + Usuń + Japoński (SHIFT JIS) + Identyfikatory i hasła + Otwórz + Nie pokazuj ponownie + Zapisz stronę + Dodaj livebox + Lipiec + Utwórz katalog + Dodaj + Wysoki + Zapisz nazwy użytkowników i hasła do witryn WWW + Japoński (EUC-JP) + Menedżer pobierania + Kwiecień + Chiński (Big5) + Duża + Ustawienia witryn internetowych + Zamknij wszystko + Wybierz elementy + Zaznacz wszystko + Odśwież + W tył + Wyczyścić historię? + Brak elementów + KATALOG + Dostosuj agenta użytkownika + Widok komputerowy + Wrz. + Kopiuj URL + Otw. na nowej str. + Śr + Brak zakładek + Dodaj etykietę + Wyświetl obraz + Wyślij przez e-mail + Niedozwolone + Pokaż przegląd nowo otwartych stron + Duża + Picasa + Miniatury + Znajdź na stronie + Hasło + Tytuł + Kodowanie tekstu + Usunięto + Ustawienia + Wybrane elementy: 1 + Minimalizuj + Etykiety + Zaznacz tekst + Nowy katalog + Dodana do zakładek + Zezwalaj + Można odczytać + Pokaż obrazy + Automatyczny + Paź. + Port serwera proxy + Edytuj + Usunąć historię przeglądania? + Wpisz nazwę katalogu + Wyślij w wiadomości + Sortuj wg + Wt + Pn + Wiele okien + Już istnieje + Kopiuj adres URL + Zapamiętaj preferencje + Wyczyść dostęp do lokalizacji + Usunąć wszystkie pliki cookie? + Usunąć wszystkie zapisane dane formularzy? + Błąd sieci + Stop + Znajdź na str. + Brak odwiedzanych witryn + So + Pobierz + Dodaj zakładkę + Usunąć zawartość lokalnej pamięci podręcznej oraz bazy danych? + Błąd + Zamknij okno + Normalny + Ostatni tydzień + Nie można wyświetlić strony WWW. Brak odpowiedzi z serwera + Usuń zakładkę + Dod. do alb. z wycink. + Starsze + Wstecz + Więcej + Przenieś + Wczoraj + Tryb wybierania + Nieoznaczone etykietą + Utworzono + Włóż kartę SIM + Usunięto zakładkę + Wyczyść ustawienia uprawnień dotyczące powiadomień internetowych + Udost. adres URL + Ustaw tekst na potrzeby automatycznego wypełniania formularzy + OK + Pomniejsz + Skopiuj obraz + Bezpieczne połączenie + Dane formularzy + Popularne + Wybierz + Katalog + Nie można otworzyć nowego okna. Została juz otwarta maksymalna liczba okien + Zezwalaj stronom na uruchamianie JavaScript + Automatyczne odświeżanie + Nowe okno + Nie + Zezwalaj witrynom na zapisywanie i odczytywanie danych plików cookie + Dotknij dwukrotnie, aby zamknąć zasobnik. + Odtwórz + Osiągnięto maksymalną liczbę etykiet (%d) + Czekaj. Trwa ładowanie... + Anuluj + Dane po sieci wyłączone. Połącz się, korzystając z sieci Wi-Fi lub włącz transmisję danych po sieci + Pliki cookie + Pusta strona + Szukaj + Lut. + Wyłącz tryb prywatności + Wyczyść cache + Hasło + Nazwa użytkownika + Wyświetlaj wygodnie witryny PC na urządzeniu przenośnym. Ta funkcja powiększa rozmiar tekstu, ułatwiając czytanie. Uwaga: układ tekstu może ulec zmianie + EDYTUJ ZAKŁADKI + Wyczyść zapisane dane + Usunąć wszystkie dane witryny internetowej i zezwolenia dotyczące lokalizacji? + Zaznacz wszystko + Nigdy + Wybierz katalog + Ostatnio wyświetlana strona + Opcje programisty + Język źródłowy + Zakładki + Wyczyść + Dzisiaj + Tak + Wklej + Dalej + Nie można dodać do ekranu startowego. Ta witryna nie zezwala na wyświetlanie podglądu + Agent użytkownika + Niespodziewany błąd + Wyczyścić uprawnienia dotyczące powiadomień internetowych? + Nd + Zapisano + Dotknij dwukrotnie, aby otworzyć stronę internetową. + Więcej inf. o stronie WWW + Normalny + Wybrane elementy: %d + Dodaj do zakładek + Wyświetl obraz + Rozpoczynanie pobierania... + Puste + Zakładki + Rozmiar czcionki + W przód + Are you sure you want to clear history? + Usuń wszystkie pliki cookie + Historia intern. nie jest zapisywana + Usuń przeglądane dane + Japoński (ISO-2022-JP) + Kopiuj + Nazwa katalogu + Blokuj wyskakujące okna + Zsynchr. karty + Dodaj do ekranu startowego + Zapisz + Nieprawidłowy certyfikat + Tryb incognito + Sty. + Prywatność i bezpieczeństwo + Drukuj + Wystąpiły problemy z certyfikatem zabezpieczeń dla tej witryny + Jasność + Usuń? + Rozmiar czcionki + Wykrywanie automatyczne + Zapamiętaj dane formularza + Usuń + Anuluj + Ostrzeżenie zabezpieczeń + Pobrać? + Wyszukaj lub wprowadź adres URL + Wyczyść dane formularza + Pamiętaj hasła + Przejdź do historii + Dzisiaj + Odmów + Prywatność + Odśwież + Klip internetowy + Wyczyść hasła + Ustaw jako stronę główną + Anuluj + Bardzo duży + Powiadamianie... + Google + Ostatnie 7 dni + (brak etykiet) + Zawsze włączone + HISTORIA + Dotknij jeszcze raz, aby zamknąć aplikację Internet + Wprowadź nazwę zakładki + Wymagane uwierzytelnianie + Zapisz łącze + Nie pokazuj więcej tej wiadomości + Kopiuj do schowka + Zmień nazwę katalogu + Autom. zapisuj id/hasło + Wszystkim ustawieniom zostaną przywrócone wartości domyślne. Kontynuować? + Komórkowy + Wybierz zakładki + Zamknij + Pomniejsz + Przywróć domyślne + Koreański (EUC-KR) + LTE/WCDMA/GSM (auto) + Zmień nazwę etykiety + TWORZENIE KATALOGU + Strona domowa + Nieprawidłowy adres URL + Widok komputerowy + Menu + Nie znaleziono adresu URL + Widok dla telefonów komórkowych + Otwórz w nowym oknie + E-mail + Utworzono skrót + Błąd połączenia danych + Autom. wypełn. formularzy + Zezwalaj witrynom na żądanie dostępu do lokalizacji + Cz + ZMIEŃ NAZWĘ KATALOGU + Usunięto z zakładek + Zakładka + Otw. str. w tr. przegl. + Dopasuj do szerokości + Lip. + Sieć danych + Unicode (UTF-8) + Zakładka została dodana + Historia + Ostatni miesiąc + Gotowe + Edytuj zakładkę + Usunąć wszystkie zapisane hasła? + Lista + Dodaj do zakładek + Maj + Zasady zabezpieczeń ograniczają użycie przeglądarki internetowej + Mar. + Adres URL + Nie można dodać zakładki. Osiągnięto maksymalną liczbę zakładek + Zawsze pytaj + Zapisz stronę + Wybierz słowo + Ostrzeżenia zabezpieczeń + Utwórz katalog + Usuń wszystko + Usunąć wybrane zakładki? + Wyczyść własne dane + Wyczyść wszystkie dane przeglądarki i przywróć ustawienia domyślne + Wyświetl obrazy na stronach WWW + Słownik + Widok domyślny + Sortuj według etykiet + Zainstaluj aplikację internetową + Przeglądarka - informacje + Włącz tryb prywatności + Album z wycinkami + Wyszukiwarka + Zapamiętuj dane wpisywane w formularzach w celu przyszłego wykorzystania + Brak tytułu + %d tyg. temu + Dodaj do ekranu startowego + Włącz lokalizację + Wpisz adres URL + Ręcznie + Brak historii + Uruchom JavaScript + Witryna %s żąda dostępu do lokalizacji + Pt + Wersja + Wiadomość + Pamięć cache + Edytuj + Ogólne + Zapisane strony + Zezwól %s na pokazywanie powiadomień + Blokuj wyskakujące okna na stronach WWW + Zapisz obraz + Najczęściej odwiedzane witryny + Wczoraj + Wpisz nazwę + Gru. + Usunięto wszystko + Wybranych elementów: %d + Błąd zapisywania obrazu + Wiadomości + Zmień kolejność + Autom. zmień rozmiar tekstu + Usunąć informacje o dostępie do lokalizacji witryny internetowej? + Widok listy + Przenieść wybrane zakładki? + Brak pamięci + Brak pamięci. Usuń niektóre elementy + diff --git a/res/por-BR.xml b/res/por-BR.xml new file mode 100644 index 0000000..4f8a072 --- /dev/null +++ b/res/por-BR.xml @@ -0,0 +1,345 @@ + + + + Aviso da web + Arrastar + Nenhum resultado encontrado + Nov. + Colar + Def. conteúdo de página + Configurações avançadas para sites da Web individuais + Página inicial do usuário + GERENC. DE JANELA + Automático + Limpar histórico + Página atual + Feche todas as janelas abertas e vá para a página inicial + Aceitar cookies + Compartilhar + Chinês (GBK) + Latino-1 (ISO-8859-1) + Modo de programador + Junho + Carregar imagens + Concluído + Config. + Gigante + Problema de conexão de dados + Ago. + Definir a página atual como homepage + Config. + Apagar + Japonês (SHIFT JIS) + ID e senha salvos + Abrir + Não perguntar mais + Salvar para leitura offline + Adicionar Livebox + Julho + Criar pasta + Adicionar + Alta + Salvar nomes de usuário e senhas para sites da Web + Japonês (EUC-JP) + Gerenciador de download + Abril + Chinês (Big5) + Grande + Configurações de site da Internet + Fechar todas + Selecionar itens + Selecionar tudo + Recarregar + Ir para trás + Limpar histórico? + Sem itens + PASTA + Agente do usuário personalizado + Exibir modo clássico + Set. + Copiar link URL + Abrir em nova pág. + Qua + Sem favoritos + Adicionar etiqueta + Ver imagem + Enviar por e-mail + Não permitido + Mostrar visão geral das páginas abertas recentemente + Grande + Picasa + Ver por miniaturas + Encontrar na página + Senha + Título + Codificação de texto + Apagado + Config. + 1 item selecionado + Minimizar + Marcas + Ativar seleção + Nova pasta + Adicionado aos favoritos + Permitir + Legível + Exibir imagens + Automático + Out. + Porta do proxy + Editar + Excluir histórico do navegador? + Insira o nome da pasta + Enviar por mensagem + Ver por + Ter + Seg + Multi janela + Já existe + Copiar URL + Lembrar preferência + Limpar acesso à localização + Apagar todos os cookies? + Excluir todos os dados de formulário salvos? + Erro da rede + Parar + Encontrar na página + Nenhum site visitado + Sáb + Download + Adicionar favorito + Excluir conteúdo em cache local e bancos de dados? + Falhou + Fechar janela + Médio + Última semana + Não é possível exibir a página da Web. Nenhuma resposta do servidor + Apagar favorito + Adic. ao blc. rascunho + Mais antigo + Anterior + Mais + Mover + Ontem + Modo de seleção + Sem marcas + Criado + Insira cartão SIM + Marcador removido + Apagar as configurações de permissões de notificação da web + Compartilhar link + Definir texto p/ preenchimento automático de formulário da Web + OK + Pequeno + Copiar imagem + Conexão segura + Dados do formulário + Mais visitados + Selecionar + Pasta + Impossível abrir janela nova. Número máximo de janelas já aberto + Permitir sites que executem JavaScript + Atualizar automaticamente + Nova janela + Não + Permite que os sites salvem e leiam dados de cookies + Toque duas vezes para fechar a bandeja. + Reproduzir + Número máximo de etiquetas (%d) atingido + Carregando. Aguarde... + Cancelar + Dados móveis desativados. Conectar usando rede Wi-Fi ou ativar dados móveis + Cookies + Página em branco + Pesquisar + Fev. + Desativar modo privado + Excluir cache + Senha + Usuário + Visualize sites da web com facilidade no seu dispositivo móvel. Este recurso amplia o tamanho do texto para torná-lo mais fácil de ler. Observação: o layout do texto pode alterar + EDITAR FAVORITOS + Limpar dados salvos + Excluir todos os dados do site e permissões de localização? + Selecionar tudo + Nunca + Selec. pasta + Última página visualizada + Opções do desenvolvedor + Idioma de origem + Favoritos + Limpar + Hoje + Sim + Colar + Próximo + Não é possível adicionar à tela de início. Este site da web não permite que ele seja visualizado + User agent + Falha inesperada + Apagar todas as permissões de notificação da web? + Dom + Salvo + Toque duas vezes para abrir a página da web. + Inform. adic. da página web + Normal + %d itens selecionados + Adicionar aos Favoritos + Ver imagem + Iniciando download... + Vazio + Favoritos + Tamanho de fonte + Ir para a frente + Are you sure you want to clear history? + Limpar todos os dados de cookies + O hist. da Internet não está armazen. + Remover dados do navegador + Japonês (ISO-2022-JP) + Copiar + Nome da pasta + Bloquear pop-ups + Guias sincronizadas + Adicionar ao início + Salvar + Certificado inválido + Modo anônimo + Jan. + Privacidade e segurança + Imprimir + Existem problemas com o certificado de segurança para este site + Brilho + Apagar? + Tamanho de fonte + Detecção automática + Lembrar dados de formulário + Apagar + Canc. + Aviso de segurança + Baixar? + Procurar ou inserir URL + Limpar dados de formulário + Lembrar senhas + Ir para histórico + Hoje + Recusar + Privacidade + Atualizar + Clip da web + Limpar senhas + Página inicial definida + Cancelar + Enorme + Notificando... + Google + Últimos 7 dias + (ninguna marca) + Sempre ligado + HISTÓRIA + Toque mais uma vez para fechar a Internet + Inserir nome do favorito + Autenticação solicitada + Salvar link + Não mostrar novamente + Copiar para área de transferência + Renomear pasta + Salvar auto. ID de usuário/senha + Todas as definições para padrão. Continuar? + Celular + Selecionar favoritos + Fechar + Pequeno + Restaurar padrão + Coreano (EUC-KR) + LTE/GSM/WCDMA (conexão automática) + Renomear Etiqueta + CRIAR PASTA + Página inicial + URL inválida + Área de trabalho + Menu + URL não encontrada + Modo retrato + Abrir em nova janela + E-mail + Atalho criado + Falha da conexão de dados + Preencher formul. autom. + Permitir que os sites peçam o acesso à sua localização + Qui + RENOMEAR PASTA + Removido dos favoritos + Favoritos + Abrir págs visão geral + Ajustar à largura + Jul. + Rede de dados + Unicode (UTF-8) + Favorito adicionado + Histórico + Mês passado + Concluído + Editar favorito + Apagar todas as senhas salvas? + Lista + Adic. aos Favoritos + Maio + A política de segurança restringe a utilização do navegador da Internet + Mar. + URL + Não é possível adicionar favorito Número máximo de favoritos atingido + Perguntar sempre + Salvar página + Selecionar palavra + Exibir avisos de segurança + Criar pasta + Apagar tudo + Excluir os favoritos selecionados? + Limpar dados personalizados + Limpar todos os dados do navegador e zerar todas as configurações padrão + Exibir imagens em páginas da Web + Dicionário + Vista padrão + Ordenar por rótulo + Instalar app web + Sobre o navegador + Ativar modo privado + Bloco de rascunho + Mecanismo de pesquisa + Memorizar os dados que inseri em formulários para utilização posterior + Sem título + há %d semanas + Adicionar à tela inicial + Ativar localização + Inserir URL + Manual + Nenhum histórico + Executar JavaScript + %s pede a sua localização + Sex + Versão + Mensagem + Cache + Editar + Geral + Páginas salvas + Permitir a %s exibir avisos + Bloquear janelas pop-up em páginas da web + Salvar imagem + Sites mais visitados + Ontem + Inserir título + Dez. + Apagar tudo + %d item selecionado + Impossível salvar imagem + Mensagens + Reordenar + Redimensionar texto autom. + Excluir informações de acesso ao local do site? + Ver por lista + Mover os marcadores selecionados? + Memória insuficiente + Memória insuficiente. Apague alguns itens + diff --git a/res/por-PT.xml b/res/por-PT.xml new file mode 100644 index 0000000..5a9ea4e --- /dev/null +++ b/res/por-PT.xml @@ -0,0 +1,345 @@ + + + + Notificação Web + Arrastar + Nenhuns resultados encontrados + Nov. + Colar + Def. conteúdo de página + Definições avançadas para sites da Web individuais + Página inicial do utilizador + GESTOR DE JANELAS + Automático + Limpar histórico + Página actual + Feche todas as janelas abertas e vá para a página principal + Aceitar cookies + Partilhar + Chinês (GBK) + Latino-1 (ISO-8859-1) + Modo de programador + Junho + Carregar imagens + Concluir + Definições + Gigante + Problema de ligação de dados + Ago. + Definir a página actual como homepage + Definições + Eliminar + Japonês (SHIFT JIS) + ID e palavra-passe guardados + Abrir + Não voltar a perguntar + Guardar para leitura offline + Adicionar Livebox + Julho + Criar pasta + Adicionar + Alta + Guardar nomes de utilizador e palavras-passe para sites da Web + Japonês (EUC-JP) + Gestor de transferências + Abril + Chinês (Big5) + Grande + Definições de site da Web + Fechar todas + Seleccionar itens + Seleccionar tudo + Recarregar + Ir para trás + Limpar histórico? + Sem itens + PASTA + Agente do utilizador personalizado + Ver página Web normal + Set. + Copiar URL lig. + Abrir pág. nova + Qua. + Nenhum favorito + Adicionar etiqueta + Ver imagem + Enviar por e-mail + Não permitido + Mostrar visão geral das páginas abertas recentemente + Grande + Picasa + Vista de miniatura + Local. na pág. + Palavra-passe + Título + Codificação de texto + Eliminado + Definições + 1 item seleccionado + Minimizar + Etiquetas + Ligar selecção de texto + Nova pasta + Adicionado aos favoritos + Permitir + Legível + Mostrar imagens + Automático + Out. + Porta de proxy + Editar + Eliminar o histórico do browser? + Introduzir nome da pasta + Enviar por mensagem + Vista por + Ter. + Seg. + Multi Janela + Já existe + Copiar URL + Lembrar preferência + Limpar acesso à localização + Eliminar todos os cookies? + Todos os dados de formulários guardados serão eliminados + Erro da rede + Parar + Local. na pág. + Nenhuns sites visitados + Sáb. + Transferir + Adicionar favorito + Eliminar conteúdo na memória cache local e bases de dados? + Falha + Fechar janela + Médio + Última semana + Impossível apresentar a página Web. Sem resposta do servidor + Apagar favorito + Adic. ao álbum record. + Mais antigo + Anterior + Mais + Mover + Ontem + Modo de selecção + Sem etiqueta + Criado + Introduza cartão SIM + Favorito removido + Limpar definições de permissão de notificação da Web + Partilhar ligação + Definir texto de preenchimento automático de formulário Web + OK + Pequeno + Copiar imagem + Ligação segura + Dados do formulário + Mais visitado + Seleccionar + Pasta + Impossível abrir janela nova. Número máximo de janelas já aberto + Permitir que os sites executem JavaScript + Actualização auto + Nova janela + Não + Permite que os sites guardem e leiam dados de cookies + Toque duas vezes para fechar o tabuleiro. + Reproduzir + Número máximo de etiquetas (%d) atingido + A carregar. Aguarde... + Cancelar + Dados móveis desactivados. Ligue utilizando a rede Wi-Fi ou active os dados móveis + Cookies + Página em branco + Procurar + Fev. + Desactivar modo privado + Limpar cache + Palavra-passe + Nome de utilizador + Veja sites da Web de PC mais facilmente no seu dispositivo móvel. Esta função amplia o tamanho do texto para facilitar a sua leitura. Nota: a disposição do texto pode ser alterada + EDITAR FAVORITOS + Limpar dados guardados + Eliminar todos os dados do site da Web e todas as autorizações de localização? + Seleccionar tudo + Nunca + Seleccionar pasta + Última página visualizada + Opções de programador + Idioma de origem + Favoritos + Limpar + Hoje + Sim + Colar + Seguinte + Impossível adicionar ao ecrã principal. Este site da Web não permite a sua pré-visualização + Agente de utilizador + Erro inesperado + Limpar permissões de notificação da Web? + Dom. + Guardado + Toque duas vezes para abrir a página Web. + Infos adicionais página Web + Normal + %d itens seleccionados + Adicionar aos Favoritos + Ver imagem + A iniciar transferência... + Vazio + Favoritos + Tamanho da fonte + Ir para a frente + Are you sure you want to clear history? + Limpar todos os dados de cookies + O histórico da Internet não é guardado + Eliminar os dados do browser + Japonês (ISO-2022-JP) + Copiar + Nome da pasta + Bloquear janelas de contexto + Separadores sincronizados + Adicionar ao início + Guardar + Certificado inválido + Modo incógnito + Jan. + Privacidade e segurança + Imprimir + Existem problemas com o certificado de segurança para este site + Brilho + Eliminar? + Tamanho da fonte + Detecção automática + Lembrar dados de formulário + Eliminar + Canc. + Aviso de segurança + Transferir? + Procurar ou introduzir URL + Limpar dados de formulário + Lembrar palavras-passe + Ir para histórico + Hoje + Recu. + Privacidade + Actualizar + Web clip + Limpar palavras-passe + Definir como homepage + Cancelar + Muito grande + A notificar... + Google + Últimos 7 dias + (sem etiquetas) + Sempre ligado + HISTÓRICO + Toque mais uma vez para fechar a Internet + Introduzir nome do favorito + Autenticação requerida + Guardar ligação + Nunca mais mostrar + Copiar para bloco de notas + Renomear pasta + Gravação automática de ID/palavra-passe + Todas as definições para padrão. Continuar? + Telemóvel + Seleccionar favoritos + Fechar + Pequeno + Repor padrão + Coreano (EUC-KR) + LTE/GSM/WCDMA (ligação automática) + Mudar nome da etiqueta + CRIAR PASTA + Página inicial + URL inválido + Vista de ambiente de trabalho + Menu + URL não encontrado + Vista móvel + Abrir em nova janela + E-mail + Atalho criado + Falha da ligação de dados + Preen. autom. formulários + Permitir que os sites peçam o acesso à sua localização + Qui. + RENOMEAR PASTA + Removido dos favoritos + Favorito + Abrir págs visão geral + Ajustar à largura + Jul. + Rede de dados + Unicode (UTF-8) + Favorito adicionado + Histórico + Mês passado + Concluído + Editar favoritos + Eliminar todas as palavras-passe guardadas? + Lista + Adic. aos Favoritos + Maio + A política de segurança restringe a utilização do browser da Internet + Mar. + URL + Impossível adicionar marcador. Número máximo de marcadores atingido + Perguntar sempre + Guardar página + Selec. palavra + Mostrar avisos de segurança + Criar pasta + Eliminar tudo + Eliminar os favoritos seleccionados? + Eliminar dados personalizados + Limpar todos os dados do browser e repor todas as definições padrão + Apresentar imagens em páginas da Web + Dicionário + Vista padrão + Ordenar por etiqueta + Instalar aplicação da Web + Acerca do browser + Activar modo privado + Álbum de recordações + Motor de pesquisa + Memorizar os dados introduzidos em formulários para utilização posterior + Sem título + há %d semanas + Adicionar ao ecrã principal + Activar localização + Introduzir URL + Manual + Nenhum histórico + Executar JavaScript + %s pede a sua localização + Sex. + Versão + Mensagem + Cache + Editar + Geral + Páginas guardadas + Autorizar %s a mostrar notificações + Bloquear pop-ups nas páginas da Web + Guardar imagem + Sites mais visitados + Ontem + Introduzir título + Dez. + Eliminar tudo + %d item seleccionado + Impossível guardar imagem + Mensagem + Reordenar + Redimen. txt automaticamente + Eliminar informações de acesso à localização do site da Web? + Vista de lista + Mover os favoritos seleccionados? + Cartão SD cheio + Memória insuficiente. Apague alguns itens + diff --git a/res/ron-RO.xml b/res/ron-RO.xml new file mode 100644 index 0000000..cf78584 --- /dev/null +++ b/res/ron-RO.xml @@ -0,0 +1,345 @@ + + + + Notificare Web + Tragere + Nu au fost găsite rezultate + Nov + Lipire + Setări conţinut pagină + Setări avansate pentru site-uri Web individuale + Pagina de pornire a utilizatorului + MANAGER FERESTRE + Automat + Ştergere istoric + Pagină actuală + Închideţi toate ferestrele deschise şi accesaţi pagina de pornire + Acceptare module cookie + Partajare + Chineză (GBK) + Latin-1 (ISO-8859-1) + Mod dezvoltator + Iunie + Încărcare imagini + Efectuat + Setări + Gigant + Problemă la conectivitatea de date + Aug + Setare pagină curentă ca pagină principală + Setări + Şter. + Japoneză (DEPLASARE JIS) + ID-uri şi parole salvate + Deschidere + Nu întreba din nou + Salvare pentru citire offline + Adăugare Livebox + Iulie + Creare folder + Adăugat + Ridicată + Salvaţi nume de utilizatori şi parole pentru site-uri Web + Japoneză (EUC-JP) + Manager descărcare + Aprilie + Chineză (Big5) + Mare + Setări pentru site-uri web + Închidere totală + Selectare elemente + Selectare toate + Reîncărcare + Înapoi + Ştergeţi istoricul? + Niciun element + FOLDER + Personalizare user agent + Vizualizare desktop + Sep + Cop. link URL + Desc. în pag. nouă + Mie + Niciun marcaj + Adăugare etichetă + Viz. imagine + Trimite prin e-mail + Nepermis! + Afişaţi prezentarea generală a paginilor recent deschise + Mare + Picasa + Vizualizare pictograme + Găsire în pag. + Parolă + Titlu + Codificare text + Şters + Setări + 1 element selectat + Minimizare + Etichete + Selecţie text activă + Folder nou + Adăugat la marcaje + Se permite + Lizibil + Afişare imagini + Automat + Oct + Port proxy + Editare + Ştergeţi istoricul browserului? + Introduceţi numele folderului + Trimitere prin mesaj + Viz. după + Mar + Lun + Ferestre + Există deja + Copiere URL + Reţinere preferinţe + Autorizare acces la locaţie + Ştergeţi toate modulele cookie? + Ştergeţi toate datele salvate din formular? + Eroare reţea + Oprire + Găsire în pag. + Niciun site vizitat + Sâm + Descărcare + Adăugare marcaj + Ştergeţi conţinutul stocat în memoria cache la nivel local şi bazele de date? + Nereuşit + Închidere fereastră + Mediu + Ultima săptămână + Nu se poate afişa pagina web. Niciun răspuns de la server + Ştergere marcaj + Ad. la album însemnări + Mai vechi + Anterior + Mai multe + Mutare + Ieri + Mod selecţie + Fără etichetă + Creat + Introduceţi cartela SIM + Marcaj eliminat + Ştergeţi setările legate de permisiunile pentru notificările web + Partajare link + Setare text pentru completarea automată a formularului Web + OK + Mic + Copiere imagine + Conexiune securizată + Date formular + Cel mai frecv. viz. + Selectare + Folder + Imposibil de deschis fereastră nouă. Număr maxim de ferestre deja deschise + Se permite site-urilor să execute JavaScript + Reîmprospătare automată + Fereastră nouă + Nu + Se permite site-urilor să salveze şi să citească date de tip module cookie + Atingeţi de două ori pentru a închide bara. + Redare + S-a atins numărul maxim de etichete (%d) + Se încarcă. Aşteptaţi... + Anulare + Date mobile dezactivate. Conectaţi-vă utilizând reţeaua Wi-Fi sau activaţi datele mobile + Module cookie + Pagină goală + Căutare + Feb + Dezactivare mod privat + Ştergere cache + Parolă + Nume utilizator + Vizualizaţi cu uşurinţă site-uri web pentru PC pe dispozitivul mobil. Această caracteristică măreşte dimensiunea textului, pentru a facilita citirea. Notă: aspectul textului se poate schimba + EDITARE MARCAJE + Ştergere date stocate + Ştergeţi toate datele şi permisiunile de locaţie pentru site-ul web? + Selectare toate + Niciodată + Selectare folder + Ultima pagină vizualizată + Opţiuni pentru dezvoltatori + Limbă sursă + Marcaje + Golire + Azi + Da + Lipire + Următor + Nu se poate adăuga la ecranul de pornire. Acest site web nu permite previzualizarea acestuia + Agent utilizator + Eşec neaşteptat + Ştergeţi permisiunile pentru notificările web? + Dum + Salvat + Atingeţi de două ori pentru a deschide pagina web. + Informaţii suplim. pag. web + Normal + %d elemente selectate + Adăugare la Marcaje + Viz. imagine + Se începe descărcarea... + Liber + Marcaje + Dimensiune font + Înainte + Are you sure you want to clear history? + Ştergere integrală date module cookie + Istoricul de internet nu este stocat + Ştergere date de navigare + Japoneză (ISO-2022-JP) + Copiere + Nume director + Blocare ferestre de tip pop-up + File sincronizate + Adăugare la ecranul principal + Salvare + Certificatul nu este valid + Modul Incognito + Ian + Confidenţialitate şi securitate + Imprimare + Au apărut probleme privind certificatul de securitate pentru acest site + Luminozitate + Ştergere? + Dimensiune font + Detectare automată + Memorare date formular + Ştergere + Anul. + Avertizare de securitate + Descărcaţi? + Căutaţi sau introduceţi adresa URL + Ştergere date formular + Memorare parole + Accesare istoric + Azi + Refuzare + Confidenţialitate + Reîmprospătare + Decupaj web + Ştergere parole + Setare ca pagină de pornire + Anulare + Foarte mare + Se notifică... + Google + Ultimele 7 zile + (nicio etichetă) + Activat întotdeauna + ISTORIC + Atingeţi încă o dată pentru a închide internetul + Introduceţi numele marcajului + Se solicită autentificare + Salvare link + Nu se mai afişează niciodată + Copiere în clipboard + Redenumire director + Salvare automată ID/parolă + Toate setările sunt la valoarea implicită. Continuaţi? + Mobil + Selectare marcaje + Închidere + Mic + Reiniţializare la valori implicite + Coreeană (EUC-KR) + LTE/GSM/WCDMA (conectare automată) + Redenumire etichetă + CREARE FOLDER + Pagină de pornire + URL invalid + Vizualizare spaţiu de lucru + Meniu + URL negăsit + Vizualizare mobilă + Desc. în fer. nouă + Email + Comanda rapidă a fost creată + Conexiunea de date a eşuat + Compl. autom. formulare + Permiteţi site-urilor să solicite accesul la locaţia dvs. + Joi + REDENUMIRE FOLDER + Eliminat din marcaje + Marcaj + Desc. pg. în prez. gen. + Încadrare pe lăţime + Iul + Reţea de date + Unicode (UTF-8) + Marcaj adăugat + Istoric + Luna trecută + Gata + Editare marcaj + Ştergeţi toate parolele salvate? + Listă + Adăugare la Marcaje + Mai + Politica de securitate restricţionează utilizarea browserului de Internet + Mar + URL + Imposibil de adăugat marcajul. S-a atins numărul maxim de marcaje + Se întreabă întotdeauna + Salvare pagină + Selectaţi un cuvânt + Afişare avertismente de securitate + Creare director + Ştergere toate + Ştergeţi marcajele selectate? + Ştergere date personalizate + Ştergere integrală date navigator şi resetarea tuturor setărilor la valorile implicite + Afişare imagini în pagini Web + Dicţionar + Vizualizare implicită + Sortare după etichetă + Instalare aplicaţie web + Despre navigator + Activare mod privat + Album de însemnări + Motor de căutare + Memorare date introduse în formulare pentru utilizare ulterioară + Nici un titlu + Acum %d săptămâni + Adăug. la ecran. de pornire + Activare locaţie + Introduceţi URL + Manual + Nici un istoric + Executare JavaScript + %s solicită locaţia dvs. + Vin + Versiune + Mesaj + Cache + Editare + General + Pagini salvate + Se permite lui %s să afişeze notificări + Se blochează ferestrele pop-up pe paginile web + Salvare imagine + Site-urile cele mai vizitate + Ieri + Introduceţi titlul + Dec + Şterse toate + %d element selectat + Imposibil de salvat imaginea + Mesaje + Reordonare + Redimensionare automată text + Ştergeţi informaţiile privind accesul la locaţie al site-ului Web? + Vizualizare tip listă + Mutaţi marcajele selectate? + Memorie plină + Memorie insuficientă. Ştergeţi câteva elemente + diff --git a/res/rus-RU.xml b/res/rus-RU.xml new file mode 100644 index 0000000..a66573b --- /dev/null +++ b/res/rus-RU.xml @@ -0,0 +1,345 @@ + + + + Веб-уведомление + Перетащите + Ничего не найдено + Ноя + Вставить + Параметры содерж.страницы + Дополнительные настройки для отдельных сайтов + Домашняя страница пользователя + ДИСПЕТЧЕР ОКОН + Авто + Очистить журнал + Текущая страница + Закрыть все открытые окна и перейти на домашнюю страницу + Разрешить cookies + Поделиться + Китайский (GBK) + Латиница-1 (ISO-8859-1) + Режим разработчика + Июнь + Загружать графику + Готово + Настройки + Гигантский + Сбой подключения для передачи данных + Авг + Установить текущую страницу в качестве домашней + Настройки + Удал. + Японский (SHIFT JIS) + Сохраненные логин/пароль + Открыть + Больше не спрашивать + Сохранить страницу + Добавить Лайвбокс + Июль + Создать папку + Добавить + Высокий + Сохранять имена пользователей и пароли для сайтов + Японский (EUC-JP) + Диспетчер загрузки + Апрель + Китайский (Big5) + Большой + Настройки веб-сайтов + Закрыть все + Выберите элементы + Выбрать все + Обновить + Назад + Очистить журнал? + Нет элементов + ПАПКА + Настраиваемый агент пользователя + Версия для ПК + Сен + Копировать URL ссылки + Открыть в новом окне + Ср + Нет закладок + Добавить тег + Просмотр картинки + Отправить по E-mail + Запрещено + Открывать страницы в мелком масштабе для ознакомления + Большой + Picasa + Эскизы + Найти на странице + Пароль + Название + Кодировка текста + Удалено + Настройки + Выбран 1 элемент + Свернуть + Метки + Выделить текст + Новая папка + Добавлено к закладкам + Разрешить + Для чтения + Показать изображения + Автоматически + Окт + Порт прокси + Изменить + Удалить журнал браузера? + Введите имя папки + Отправить в сообщении + Просм. по + Вт + Пн + Несколько окон + Уже существует + Копировать URL + Запомнить настройки + Удалить данные о местоположении + Удалить все cookies? + Удалить все сохраненные данные форм? + Ошибка сети + Остановить + Найти на странице + Нет часто посещаемых сайтов + Сб + Загрузить + Добавить закладку + Удалить локально кэшированное содержимое и базы данных? + Сбой + Закрыть окно + Средний + Последняя неделя + Невозможно отобразить веб-страницу. Нет ответа от сервера + Удалить закладку + Добавить в альбом + Старые + Назад + Еще + Переместить + Вчера + Режим выделения + Непомеченные + Создано + Вставьте SIM-карту + Закладка удалена + Очистить параметры разрешений для веб-уведомлений + Отправить ссылку + Настройка текста для автозаполнения веб-формы + OK + Маленький + Копировать изображение + Безопасное соединение + Данные формы + Самые посещаемые + Выбрать + Папка + Не удалось открыть новое окно. Открыто максимальное количество окон + Разрешить сайтам выполнять JavaScript + Автообновление + Новое окно + Нет + Позволяет сайтам сохранять и читать данные cookie + Дважды нажмите, чтобы закрыть область + Играть + Достигнуто максимальное количество тегов (%d) + Загрузка. Подождите... + Отмена + Мобильные данные отключены. Подключитесь к сети Wi-Fi или включите мобильные данные + Файлы Cookie + Пустая страница + Поиск + Фев + Отключить приватный режим + Очистить кэш + Пароль + Имя пользователя + Просматривайте веб-сайты на мобильном устройстве, не напрягая глаза. Эта функция увеличивает текст, чтобы его было легче читать. Примечание. Макет страницы может измениться + ИЗМЕНИТЬ ЗАКЛАДКИ + Очистить хранящиеся данные + Удалить все данные для веб-сайта и разрешения для местоположений? + Выбрать все + Никогда + Выбор папки + Последняя просматриваемая страница + Параметры разработчика + Исходный язык + Закладки + Стереть + Сегодня + Да + Вставить + Далее + Не удалось добавить на главный экран. Данный веб-сайт не поддерживает предварительный просмотр + Агент пользователя + Неожиданный сбой + Удалить разрешения для веб-уведомлений? + Вс + Соxранено + Дважды нажмите, чтобы открыть веб-страницу + Дополнительно о веб-странице + Обычный + Выбрано элементов: %d + Добавить в Закладки + Просмотр картинки + Начало загрузки... + Пусто + Закладки + Размер шрифта + Вперед + Are you sure you want to clear history? + Удалить cookies + Нет журнала браузера + Удалить данные браузера + Японский (ISO-2022-JP) + Копировать + Имя папки + Блокировать всплыв. сообщения + Синхрониз. закладки + Добавить на главный экран + Соxранить + Неверный сертификат + Анонимный режим + Янв + Конфиденциальность и безопасность + Печать + Проблемы с сертификатом безопасности этого сайта + Яркость + Удалить? + Размер шрифта + Автоопределение + Сохранять данные форм + Удалить + Отмена + Предупреждение системы безопасности + Загрузить? + Выполните поиск или введите URL-адрес + Очистить данные форм + Сохранять пароли + Перейти к журналу + Сегодня + Отказать + Конфиденциальность + Обновить + Веб-клип + Очистить пароли + Сделать домашней страницей + Отмена + Огромный + Уведомление... + Google + Последние 7 дней + (нет меток) + Всегда вкл. + ЖУРНАЛ + Нажмите еще раз, чтобы выйти из Интернета + Введите имя закладки + Требуется проверка подлинности + Сохранить ссылку + Больше не показывать + Копировать в буфер обмена + Переименовать папку + Автоматическое сохранение идентификатора и пароля + Все параметры будут сброшены. Продолжить? + Мобильный + Выбор закладок + Закрыть + Маленький + Восстановить настройки по умолчанию + Корейский (EUC-KR) + LTE/GSM/WCDMA (автоматическое подключение) + Переименовать метку + СОЗДАТЬ ПАПКУ + Дом. стр. + Неправильный URL + Версия для ПК + Меню + URL-адрес не найден + Мобильный просмотр + Открыть в новом окне + E-mail + Создана ссылка + Сбой подключения для передачи данных + Автозаполнение форм + Разрешить сайтам запрашивать доступ к данным о вашем текущем местоположении + Чт + ПЕРЕИМЕНОВАТЬ ПАПКУ + Удалено из закладок + Закладка + Отк. стр. в реж. обзора + По ширине + Июл + Сеть данных + Юникод (UTF-8) + Закладка добавлена + Журнал + Последний месяц + Готово + Редактировать закладку + Удалить все сохраненные пароли? + Список файлов + Добавить к закладкам + Май + Политика безопасности ограничивает использование браузера Интернета + Мар + URL + Невозможно добавить закладку. Достигнуто максимальное число закладок + Всегда спрашивать + Сохранить страницу + Выберите слово + Предупреждать о безопасности + Создать папку + Удалить все + Удалить выбранные закладки? + Очистить персональные данные + Удалить все данные браузера и сбросить все параметры + Показывать изображения на веб-страницах + Словарь + По умолчанию + Сортировать по тегу + Установить веб-приложение + О браузере + Включить приватный режим + Альбом + Поисковая система + Сохранять введенные в формы данные для дальнейшего использования + Нет названия + %d нед. назад + Добавить на главный экран + Включить местоположение + Введите URL + Вручную + Нет записей + Выполнять JavaScript + %s запрашивает сведения о вашем местоположении + Пт + Версия + Сообщение + Кэш + Изменить + Общие + Сохраненные страницы + Разрешить %s отображать уведомления + Блокировать всплывающие окна на веб-страницах + Сохранить картинку + Часто посещаемые сайты + Вчера + Введите название + Дек + Все удалено + Выбран %d элемент + Невозможно сохранить изображение + Сообщения + Изменить порядок + Автонастройка размера текста + Удалить сведения о доступе к веб-сайту? + Список + Переместить выбранные закладки? + Недостаточно памяти + Недостаточно памяти. Удалите некоторые элементы + diff --git a/res/screen-density-high/00_button_sweep_delete.9.png b/res/screen-density-high/00_button_sweep_delete.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ad7b154ab011ae280b3e03067e7d32bd9f647f66 GIT binary patch literal 980 zcmV;_11tQAP){x)+Vq0ei`4rTb_8mGUD;b$kwegx^0_`?c6D+a&jijtSyAM;6Cc}jT`9co;@;> zlk?Xeqn?Zm@n>a?n>BXW(XqpazrHFiwuOGzpOq!eZueKS#_lb4y>D&(Ho9ZS&u4dP z7&WD(eKTw9URn1Coamnmva{71Qc}dMvBlmuHOVjrnRKkNQHF6on4*sjZP`Lqzh+Go zv3H@63}$9h=~zR94C3l$s!vXK#@+%Oz#vml#p>&2VDn}w6?+4$AA?L3*0*UBRo&{< z3Kk4X-^PtpD)t)KBMdU>SY4ew+OUDDZq+Jh>=m$w>(^7&GFUGLnRKkSR(joTs@jz+ zow1iSHS%EHI;t8Cdjae|2AMc4J)Np%#R>(hu9kai*HTq$*z>9?xto?oRh^U+MeG@{ zJE^HuRVr3lDYx-khp8$tQNaQMxs7`}lZrhBb_;_{l^PZSb`y6{rpo2ZXJIk}tEiA3 z+^3iVGclQsm6uBo?gmVOgoIhxjJG)s>;?vz{=jCRv$3)=xsDGoQw4?LGsjdBAMcEf zmX^vjT-i(%){Q}?auvhh{@u73naYE_ zha|;(z6$5m{`hj&| zkV(giiliepmWsm8E?7Wi;nhVC>jQQMgG@TMf4`iWKc7m+3JWQy9r+Zj^Ik#0lo@QF zH_x#Xm??^jn=)(cu$Bwkw}0ut-9W>_IA?oZt}kYd9hMTv$cUWBExCQ}T-%NTvv8f| zr>95E8pmzIP(s2)8y1|z!qd|_j<200009?sHp~=J+o1599(a0XRx3i~RU2M9$yUJb75Vqi$35T~fQz^FG*S8Uq~H_9-Xb;)k%HXV8^kU_q;P@~y9kkj+}LZxE;Kcf zIBquU$5s$K50QfW*g1$4j)`Kg5SxNXL2m3NVv`Ul9F-nB3z32_wv1Q?A_cG1*bBtY zK%^i)b{ZlDRcdSru~QH!$c;TmEDe#u5xFs+j}%JrnBW~ye59)NG+q{|g8?nZjYc-s z*;(f^TCw@rk&*38TbnQzYHek%o}O(!qZPBq1_vvXcour0L`%#5^RnA3d`9<}Fl4n> zqb3s@$99t#{z(E`3t~k)MeP3`E|^I(`WrYL*P-rgEt5$OQ) s(9voZtTi01^3PfF(dxf_k&f_x07q}F_v6x0BLDyZ07*qoM6N<$g1drNhyVZp literal 0 HcmV?d00001 diff --git a/res/screen-density-high/I01_controlbar_icon_delete.png b/res/screen-density-high/I01_controlbar_icon_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd4551a84e76b7b25aaceefe3bbca0d223ebb39 GIT binary patch literal 593 zcmV-X0Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE;UJt{NMlp0jfzv zK~!i%?OIW113?fDp|7EY67tm7Qc5X(Eg_WBe^5dxeadUx-@d2zo4Dg#_I7u6cP^Ls z!an3OJNwNyJKx<-ZZ_kG43L4VW1z0d&{Gy`)s7efTVertkjZ5iNH80cqEzW1@= z+G{_{XU7jvw-|32JKu0^&%S+(jbn`uTw9wE0mq*yb!9cDXpji*&I)L%Utro63lh%W zQ-N5{D;eO6CD0V#ApKA*Kyd_zOSyqhWY`EzQO2g~3>jRUF^em6UPQf8YNpg22AInL zGpIZ!X}4}}f`aphGT7cqe1IE)ng?v28(%w@T@YZdfh)l7X~74+UE6nF?ASaoz}#%P z<}-sHk>M5vIjlj8y6gI64YCH0XUoC9DQl25n8^S|h9X0eITjI0fv1T~IdM;?$WUY` zG87pTap^n+pLDh%JiqPlkxi%lkR5!@o7=?WWSUL_1i&^JKY^CuS4`s=HYfkzkM<@; z3_xu&S7UFwJ)5m_uK`rjR$fXl4^S2;30mU|0p5%fpa?;z-Za2tY^Ci#N^o3+43Ggb fKnBRb6*2G+pddGUK{u!800000NkvXXu0mjfk7(=E literal 0 HcmV?d00001 diff --git a/res/screen-density-high/I01_controlbar_icon_delete_disable.png b/res/screen-density-high/I01_controlbar_icon_delete_disable.png new file mode 100644 index 0000000000000000000000000000000000000000..82f0d064c0c2464c408e3f44d57f5584ca097bd4 GIT binary patch literal 518 zcmV+h0{Q)kP)T=L3!WDhG*~nEZ-eJKrJyoFiyVV+Ma#; z7#qhLdpvtFAp(vMDRpHvr)ZD}?%4`xs$XFGEEXi3?NfnR&MO(`Sb*XP z4xi)zpUAKgnxc$N)md{?+$)nSb6!NfQfj8u90r)n05hn(CTX{BZi0gIhceh6B|gB7 zK+OX-+s4<)WfugPYv2m7dt2~I*L-HsBQo5gAcr+*QFmRRtU=b` z^=>)XH)Rd71~VC;$WUY`GS?zPDeyLtDJSmf6d8&PMTR0{A}*aT!8e_42+w!>d1TY+ zGGqr|^T{0(0v5n_7+-;w;4!9g44a$Z???M5Mhrl0Ggo78x;>k%v(^AAX)Aw9Fb_}` zC<$8Q3jr=h2~dO}RBsyKF}Bk7A0;?0LI%hH86X2>;DH$U1Hmb0pQWFRCjbBd07*qo IM6N<$g7>`8o&W#< literal 0 HcmV?d00001 diff --git a/res/screen-density-high/I01_toolbar_input_field.#.png b/res/screen-density-high/I01_toolbar_input_field.#.png new file mode 100644 index 0000000000000000000000000000000000000000..0b433515dee4c7167f6c7e2eceaecca2821c27de GIT binary patch literal 1045 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 Y018^;!)8E_9{>OV07*qoM6N<$g0>l(xBvhE literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/00_button_expand_opened.png b/res/screen-density-xhigh/00_button_expand_opened.png new file mode 100644 index 0000000000000000000000000000000000000000..547f884ddab046247d2e58b16e5efc18442f2a94 GIT binary patch literal 3469 zcmV;84RZ2{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} z0008GNklrFGTi_y+b7=1Jxe+BcZ3 zyNp#RQq*jeiWXM}q*}TNwxKbZl`=C-$6=EB2lux;mwWhd7l*@@!Z752OM?F}0xi%2 zEzklj(6L93+MrY_eOsCVEFcej0``F3sQZ>>{dx44ktAs*l}cIj^Yi)1$w^$-Ep|E` ztKaXJ!Z7UpGcWxmSXEU^*Y*6y#s-;8hP%5vn$2du)oOioUAGk1awf+FMpf0SuIu^T z-CYdBV0wC*TrS7d)D%GR;^LzE^z>BuXVA%HvbwUe@~&7cVi*Rqv$G@;3FhYJFbsp? zaERx5`&U<2c%E1J>u5z$s!K~t`&(OEtgWrRf&mhV1nG1d!!Q^O2Kc_e-)^@f!y}=~ z<#IKf&F*h+Z?nF>PCA`_1;1o$Y>b741qy`%K@b2$hRadGJ3BjUZf=svWRT_8c0J%d z@Bx^SWf@J=FirF2JQ7@v3N}p>P19b%VHoxXgF(sjJX=u|dtze3k|b#)9H{(u^jl!p zbxYUR*S6z0Xqsj(FE5u=RUHX0m&+U+98`WA`VBCy>+W4%UfPF;huq%Yvbea&a5%Je zU4O5tYE_aX;(*I>fC2jbex=oFeX=Zz)6-LWy&ew_4*-mhkJnaLS4k$5RUk54jsxs@ zUghTIrgn66#QFI--ENm42=z&1Mr>mXRc>md$1(!{s=@^?IF?lN0Xm?|FWH{;G%X`#6q6qtSRNMTW~! zz>1>O>h(H}Mgzxj@O}Tgz2b(CME?vJcoQ52K5B-KL>CGL+ceGmkHElBfqw<=d7eFT vs}vuQ0xi%2Ezklj&;l*c0xi(LoX-OQA1jrlJsW8-00000NkvXXu0mjf6U%?Z literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/00_button_expand_opened_press.png b/res/screen-density-xhigh/00_button_expand_opened_press.png new file mode 100644 index 0000000000000000000000000000000000000000..d539fd0749b6da320bf59f49852c5e2d49e18676 GIT binary patch literal 2987 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/00_button_off.png b/res/screen-density-xhigh/00_button_off.png new file mode 100644 index 0000000000000000000000000000000000000000..a87a8dc3259a2d5e9dfd0d09c7024b420064ddf0 GIT binary patch literal 4295 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/00_button_on.png b/res/screen-density-xhigh/00_button_on.png new file mode 100644 index 0000000000000000000000000000000000000000..43212d748f8ac50ee07bd124d5398f3218a30524 GIT binary patch literal 4608 zcmV+b694UqP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/00_button_sweep_delete_press.9.png b/res/screen-density-xhigh/00_button_sweep_delete_press.9.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6be60b45a928fe749c25b08bb18e9faf477163 GIT binary patch literal 1555 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/00_circle_button.png b/res/screen-density-xhigh/00_circle_button.png new file mode 100644 index 0000000000000000000000000000000000000000..38283e28f659fe7c5e5192b0ffe4149956416c16 GIT binary patch literal 7659 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/00_circle_button_Expand_open.png b/res/screen-density-xhigh/00_circle_button_Expand_open.png new file mode 100644 index 0000000000000000000000000000000000000000..85e99f911f9c9bcb0f3d0a9cfb66f8968ea1ec86 GIT binary patch literal 7148 zcmV004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 K4BV{i8v9?Nqdw;V literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/00_icon_favorite_off_74x74.png b/res/screen-density-xhigh/00_icon_favorite_off_74x74.png new file mode 100644 index 0000000000000000000000000000000000000000..85a8fd881dd8c243732d717774d29c9d263f4081 GIT binary patch literal 2483 zcmaJ@c{r47AD*&HX;F4f6B%h%>rBWpGf@VOK_xV1Ml;N2W|*-?v@n**R;QGt1reDz z3JEDoq!7t*K9!e-LJgq{!GZKcOpYyNqNW}KX3}gSJ{CkIk>^Bb zFr6d$bk9gPGBq-UilISv*nw@tSU`YH7gE4tHj5*`iftj^b+JHuaToyse}@P|Y$5+7 zwU_7tcH;8sU<)`BMnzhpz?SB4lsOV(j@brABT+~M3XMQo!B9x7g%uWw0{tJ_;iYp%O`WWtfgJ_U~q+80fWl}J9%2b zQD7e?hsG5NzT=5RtP4jVq;RNo7o05wP=GU;G%OBfiL^vo6VPTjClm^g#+c*Ga5yUm zl$o`K6&~%d#Km!`VQe}_xWuLXyFi=zL~4okrku+2HR>#xj4M3+|VC zKe)7C=3^7Ig?tg78v#w`EOYY+` z@jGCI1=^Q#cY>J`g{5+o<~sYNV^~Yy>GaVKiYe7^MbEd)^Eg8P`}Vq+{5LLN2X#kn z-wbVh6wxU-A7!88Y$(t9#^tBQCA_#`4PBKCRMnv#dKyYzpeqln;@26worrM{aMWQ0 zz(Lc~)2|e>T4t9ErRTn>#RNdDwwPw&Q8u3OOWHC$=#&=H@bw{{xE*Q#i5qEtc)Uy4seX-sXoTip%%b1Y;oN3C#MW=pNut1}@Y zARupjjDK5&w!26)*F~5soa=*op}U4J&O*f!mGM0}gx${{{nMJ5lfr95rBR>gY8ud1w^*|(py`=o)Mw0#8i`*Zz0MdZWluNjZc ze4g4MX-?}d=t?KWUA#Rrb^2qmjlm=R%Oq_ROXsk#uv1tpc7N#S71KFcDsLy!=o^9^YMM5z6O3x&PJ>CYvqS)`)r zS8^JGJ+Cv3-K#WL0&b{Cd6`Kl&~C!WvNml$Dn1 zTi9<@X|2!9-xRaH>7&81%P-d$RO(5Z+nR?oOmFYp^z^2U;e#Z(t`FyJqabmwf||a{ zo!HPBpz=<$pW&8WU5DyArWIs; zDXp|KC1qvCT%K7vrVZ3V>z^%ioXlRge$-A5d8#>Z&BLH6FZqQ}V`F3Ccb}8}{MZ@` zMNmRg5zjhW{ss;5F>gUGW|hT>KQvz*Nh^CBVxp6p_QD`s^2aG~L&xC`4)A5|_FZo@ zN-Yg{{L}HU>`vaA8g-L!g$Y{IHtBIMwaZ42R9Zz57r&w|rF<(WwdpHZyo+^}njOC1 g#gz@?0m~FYQHhnAdtqtXi@#AWcsJa2$Ad@y24p`G7XSbN literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/00_icon_favorite_on_74x74.png b/res/screen-density-xhigh/00_icon_favorite_on_74x74.png new file mode 100644 index 0000000000000000000000000000000000000000..d02e41fbd81501d2f9a4a127fd28ac107c52cb0a GIT binary patch literal 2751 zcmaJ@dpy(YAK$vUL~@REatSkHv@2U|nQS&prZwbp;+So0*u^%Pb&j+ab>v5K%euIi zbPjbYp^+k?Bz1`BatOzzg!pyAnNIcl{qgJfeZ8LV=Xsvj`~CiWp67YLUe9xw=HsEO zZLAFd0CXvyB)U3!EjP_I>i@>h8?owOBq0Y%d<7Abc!r1#Ag~1CY!HRVh-A~*3|2yH zE87_WSPAC(1xf;`-Z-X!2WKo};8LDY%?1FRw@HNzW;9y@3TH=h`FQZFx&|L zFjOQ}=*H%7J!K-cugu4fDT`)eS>SChAZIB~Ex=<-7$7MxhA+lR@!*fTICXz{8UY4< zgh-Be7^K6l9M?ArUBh1kw?PLgFxvI3x=6 z=>w~?iC7UhI?4T0F7*fx=13$$90Cy^9}karfD1&C2ox5JMIh}F_VzF}0wzx2OBhlZ zUu^kVfy5RwMO>kTE8v5c6&c}zI0+uCuJoTJ@PuDv`QlI8q~0)ulp#c*;K=1AeFjpg z{~yZZeL;&QboPJh{hz{OzXTy0L1&8vaU!Pr;36!SQwecyA~r)J5cvrNF`svl#t}#a zVvaxva`VN&QJ?@WpCyPFf5cO%I0|1ZVepx33JDKZE5Ny27LG_pqR1#GcY6nt8wy3X z$D*)Eq7#{bbR=TX?r8VVT#|qp$7Ay)pSi3rTrBdd++{29gzC&Bwurlj&2kqBc%Y9< z#&N%13+bzRpSY~A*5X9|Di@(H2C;mw|8>xxr_}CQ?tZbYdho^gY`)sGfp9Chs%fm>S*4w6-pdeTeRQ z9a7J`bAlc%DHC1d=0i9BXj@cfRBk0d(zJOEF=3!}U{bZG`sucGx>@YAm!gr$eZyOq zRCxYU!@|`2g}M2qSMUy`j`gK_6L``$u381FXe%JVEPxm1V;Bnp92|72SW~)B`m?!Y zT0Ua6Ny&lk8*8>&f2J2j~ChwQC&jnqi$;L1WB{KrXVaR^~L^1m)oQ8%m-Pq z+0S;Kd_poBzpkB--qM1^z%xOWQCFhVSEL8Yoi*In%!B^jaeRx>lMCu8LFNjD@uS(r zB~;b-yRCEqmGsA@9>9_qkb5K{Z5*yuFu+k#~8X-L)XCR&#{(Ywzn%#n;4CswTN`$V!4+(3K_NS$#h(dZTm`GSp<&U*Sn#U2{IJv%5Hg2azx# zzD|I{Njr*g9PWKi;p6eJ$+l@zQrr*kY6CLDm0y@T7 zm2iu_JrVTMqdQgR4l1+;mdaCqYLhi4OsH%fod-(ZtZX>{Lv9z-uEp)Sv!CbZH#lQAvE1l@1^*zs+IC&G-l+7R2mR|5LuRlGr^Jstu*Es5KM$wA? zm%M$OTTMWP?Zax13cS1xtZ0N9xj!4T@uF z$X!2Av3mQbWiLk0gw9>2wWOZY*-iMfsdzCY2m7NL)%TL3^25WFz>%ibrC^ZvSv^&ET!X)nk<)iN#dcxNaN5=L0?dQdQTV z!s*!f`suqlt0^(}-URC5kA<4JJwV?Na5+lR6ur1M`h(3LsKKT*y|fjcaZ@v^J9j9| z{CmxvoIINakyak3`du0nFbMoV+ znM1$r)r{KqVp*evhiLpka99R`(m+QH{S7qzII5G|hwy;+li7r#~V z?a(FeYNw9v#QT4k$UD68-pUKif4xA%N4wsuN=&L4( z2J>J~4&@fH5|+X@1DNP7>=NvlH+mn?Aje>;yC?98e+bKGD>H0VIhvPbG^bky!W-9K z_~>0UV46g3A{VT8Yc)Lh2f?8r8JPT5chmp?)qiIiYIbw58h$bjQ*F28EE_Hx8+y~{ zn%04CdfJ}75PA8XEV=*@$7^QCoxXgfV(j=*um-0Z`?QL;*Ll=$#8s$YxOkR#b#HNz z#lgv$NK=D}_x&;P7|zKAZr+1r;x`h*5_CE~jYr#kt<>eo#)wkGCF-htE#eNH-{0An rOyL^TPtZ-DZYkoo>dVTBw{I;H&>V5-(0t1L$2TQ~>_hsE7$*N4!s?g9 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/00_list_expand_closed_press.png b/res/screen-density-xhigh/00_list_expand_closed_press.png new file mode 100644 index 0000000000000000000000000000000000000000..b421ad12c552e414a5c71024700a4cc030381dee GIT binary patch literal 3098 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 Y01ETHC0GGL#Q*>R07*qoM6N<$f;1Q#z5oCK literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/2.png b/res/screen-density-xhigh/2.png new file mode 100644 index 0000000000000000000000000000000000000000..32ff6458ce480fa64f72e5e8db49ac15ed96bc4c GIT binary patch literal 1020 zcmVE=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#o=HSORCwBA{Qv(y11`VK@Ni2i46V#?POuZ=URXOVkE{Z zDBb`OAg{n2bOwmuLFxZ6SHm2HVKz`FBNGE201F{TH1YogT?-IEcqNIk669c5#Nf09 z=6!5&0s}r!`a3p1;M2GRh)sa_FF~imVgeS?g#3tX<9Db(7;&imPnA#w2q3aGGBJ<| zkmC_O_c34#I9NQg;PO1S$S20BAcg*DV#c`Q5e7Vw%K{{D2AZO_;<9l&5VI3-I#!J! z8+D;cj)9mYhioGq;t@|8CEBU@0_DiSrB#3cBHKoC0TTnA0Y+p1b0sH``bKVuVW~<8 z`p|eV1nC+y*Aq(9|DjlmTnj^x(mkjcVkT0bA~6{XU;JzV;*C^IG&sO4Af5@tPoZoO zNC2e?T3MJzvupt^hZxC7t+0xWnOq;9C9}D0;y+U7H5Z6a(j()y0x=hKM8J&J z^1|N*cUA926zZJ2K7M4W*?? zO{Ky>tO5-ha;m4LDNHDnQQ`qwUh6Zy`W{ z(LD}_eTa^Fkd|F1bU=%8j@IQSxiRR(0GasvPX~O7npGj*LI!EN<_w)924pciy<(7a zAW|M(@*tT2)R$Yy02zk74{e}&0CC_@FGWF}9c^geu?C3MfjAlJ;UH*#qk~Md`H}J{ zs0&|8%{)kG`Wpt)86e~Cpec&0XmZPdI2y|SKxFTM5zT`i(B#4MpVTTvi2*aAA$%1} zfl&`-yOP*78q^j2WoVLRhvvlO})hES%PP za32th4NxirHOsmNQ)8P_zys}nmO|^%K~aj{W`K-P(-ZuqXDO-&ZD>EGLr3@^5SueV qR-sbXn;0q8#Ha^HJviz?+5rIHR1Kj~wDXt%0000E=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#)k#D_RCwBA{Qv(y11`V{^fn%wmM{0tC#Q?H+Bc3!$v>)*~`N+VfRe%5@+eUH$69b(AMq~if4=0fNMsA3q z3&3(OJ|7wnh9J!a)rwH|M*TTurnwAk-H6JEYpCU0C3Rm2$M#^lA&|=G& z;zWZdh(NV$F%YX0Q~yzFAqYqSaWB=g1+*MuBqO-aVrvVM;zN>}5Y!G*Mrv6&{L4~+ z02=;29R3!vpw)%Qg{}|@<~)TKeGG)^Lu~o*Es2)Fz-}ORBPo?aeMm{NC9B3C6p3al zQV)xrfLdmJ1wXMC`am02py1}g(uY6>JkZMd4<#0Y4B$lSPpT84hndnu^AXyf0ae7$ z@gy34q~QogN)in})GxEEFiuH zjXw#h)Q40mX{eTHXjam^Bh#$iP+FSQI1~nA6==|qQ#~yuC(+y?)0dzuV?b#teF(&I z^sFt`kZJa7VzUKR0eZF=ZI=#x3jqR*?r}KmLv+-GwCp;e16q`Gv@SQvjX_X5^a%rE zgpii_5;dzryoC(Xbj=w$N6arGI%rgjLC%3ld34ExWCBoIaXJuRfc8oiq0KnyppKdF{ebu&R1DPLI8LV7{788e)P*k{2oDB9yZ!k7VA zsbCLi$e@b>Y5tR5N%Rt0A+dk~GF3Vq+7C0Mq`y2^EBfz9eR9y$z^0+)v t6rlN_9TfNIM@ls@>cLSDj(U)G000tZ8w@UVT5tdW002ovPDHLkV1h@T%sc=9 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/4.png b/res/screen-density-xhigh/4.png new file mode 100644 index 0000000000000000000000000000000000000000..66bc543b285b23e3f4a35fb57ca59aa9c3711f19 GIT binary patch literal 955 zcmV;s14R6ZP)E=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#T}ebiRCwBA{Qv(y11`V59AOhqSn4Rd_Wq^`TkzKnOiTwoGwHOuybuz+2h!IWhKS9?51Q1?Hd;n%8$W5?_ z!D$K1``F?H2HpYjbS&ckaYZH!2oZ8B+>bz~azfJ%KBxW%1u43X-=UI>I5hsJN~i(^ z5ZM};7{~<3@ra)L7|@e2ay+u&@;tW4C)TNYXnbR0H1c8*I|Ibt_%!+e@n>>Ebql4@ zaf!C^h$oE_)JRNx9vQf_3J^eK+ej{8VxTj?hzuf%ECy0CA1wFc^P%xz3esX|sh~$d z-G3<7qQpW*XagdX1U-txWGHMP1sc>QK>Qkt3xIe6#fb(7n1jT=2E`#%Nu@*pEo^Z^ ziG@d?@kMHCg;iwC( zL1~1NAe98-dnBl5rX)yb0kJN&HVQ>$DV`u@L=tBtGDyLEa)T7sfHHydO=#^yT)w55 z50Sx4dc+|qB@NYmNcEED9hqkBhSJicw%UY&SOpq1WI0(cyp(7L_^bRQ|8YeSDAa(%a zbRce`z$|{GJo*QSO9$G6`=EIU|4DBT`U9~uw7YtMfxuAvfYyT~ zf}7A01~zDwB0cCUdJ+L>PU;JkErUh=GPK_hN?KcnVj*)FN5wr2Dz6LWZ=q)ljyATb z05Xx9V57Z>f$-q>0dUuMEOj5vJa`sbuf3*|=Rl>c2AWtnt*Z%8%S3E|QdtoL+5*nO z*4QSeC*caj`A~XLRP?tQAS2ZD1b^vSih|Y(fu_Em(xD>^>VBC6@eYc6^rIF1s0T+q dIO;)40RSpE5>2tvzCZu~002ovPDHLkV1lNMmNx(Z literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/5.png b/res/screen-density-xhigh/5.png new file mode 100644 index 0000000000000000000000000000000000000000..f17bba089f762d2fbd426c7a80a26a88cd386d45 GIT binary patch literal 1017 zcmVE=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#n@L1LRCwBA{Qv(y11`V-1Q6L8nHb0f z$nl7t`xvkV94sDLhzvooKxErUE?{DyGr))pV6NoElDvryF)XzOK_40qmLMf1 z9sh@7Epjcq45cSR>miWke~HkiNUnvOfH)9{^MSY>h=qW-n<|M02dIY9tw8(^h~H8z zl@e(&12ru?0*xb5Q!A_@VAgqT+Ei=A?pI8eQLk)p7 z9WLQf%LDCG{Gr6cSwNf\VRhDbfklvsEQ+N7`t;%Fc?q)J&zLMmm%p$;U@55yl} zd~#E%2@?A+JyI!X9Do-Zm!J`xa9Y>+SD{VCtw6jN8kcm9Lws>dl{lnnN%M|Ovvxyi zX;R}*7>HG%K|@aUw3M7gbB9b{<^Zt)rK$8G5X;fCwpc@^*{_Ms7E}f3*x9wPra?JJ>vEIa7<6KQOria!1HMGfst|7>gEU=phRzZ53)=Lh zOAK-jM9QN}9wZa21mcf4kbp&AnoM(%`zfGqVkHBSW9`)T z;9Mvj3&b;N6e*w~1JFd{HE6GqZuKB2WEVi$`_M*nKv)}yZw}>({sJ`S(x82DxNoR>a5_?QJc1=}UO?&?4@nPZ0`YBVOxmL5zZ3?@ zng`HqvhGl>CR7HX)ic^%A_TqYAdlG$mQwUKv;?Im_)D!kNDKhY9D?R&p3E=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#$4Nv%RCwBA{Qv(y11`VI?6so$agV8o&JKUG2%Ab`l$ z$izSY*$cYYqAZ{U)>?n^%LVm)hk(l^AGH_`XAb`lWkzByUKxcpv8Ngi038cP}8)8^$ z3xYm09t=Tx9L@EF()52Q)*{zJD`*yt0AfiJJfuiWhQbCwwWb6RuR!wQYakY-IMLt$ zpehdky;iG|FRSyfQG*h zhrfj^XmufSp({j!IZuK31=ivTtvf>v4VIQrLA ztDZQaG_0*^2~Gb0X_aXBu{1Sko=QP2Hen#{1LA0;)*H=g{O3Tt4BFnghpoLyR((jN zl7=7JAqMjYWl8gnOtWBFMViz&1SJj?EUA;&>S-xCiRKQOzRUq)14>irLm-x;XKk^D zOtW7Tn=Pmc(6hy8yL9MV2oPX&kHcXfqN5(9W!DKE(4w59b-77y41${WPZ$s*gtWw$ zs96=_Eo6|UYtGO)Vtzq;6Lg6|&VfjIbjgDhfb~GU1KMr`^#@`ZAd^``z7!3D_A63= zSRIJdfcOg#n?uECk!dbJQXU0$;Y+ER2MJAo!vM%rb8)DL^#DLgPnV3L9^{S~4EO-? zR%(@^#1sm1q3l2)HbEQB(S!C4%SH2;FeDg(4btUFXa2rAi5LSs`EDgUuUW3CH` z&kw4$C>a1$*WDZKO$;&*ejfmLq1(w!OAmtbk23>~aU>c5P${c{CKgWXJh%^t#Re#q z6#;SYU~6ns+LLgF)~Bw6r4+r*02!gCC-_UxQdAGxQ+P^;j_^Tf?_>wXy@`=hO^kYQ f)PtiQq#XbNY#9jO%mAQq00000NkvXXu0mjfiP^*O literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/7.png b/res/screen-density-xhigh/7.png new file mode 100644 index 0000000000000000000000000000000000000000..427f1716c6dc9040cb0699ccbc8e782bdbf5c72d GIT binary patch literal 940 zcmV;d15^BoP)E=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#PDw;TRCwBA{Qv(y11`V59 zAOhqSn4SNTya58dK*=vmIK1(hpjTia#E300@VXWtfbdEZV@Y z>_4H%WI>O0bijlj6HxGnkROpXeup}b5r^9UR0&mp03ur>69bt5IUdn-9|N|4gT*5Y zF3%H+QzjgWu!XKM*1&;gAbd80GZ>*H$4G9d<`5l^)N(5E@kqd5ocJ^n6Q2W^RsjNt zY#Yf1Obm1e7?A-?KcE=fWr+O;I1JY=cEue{lk&M&|tH=~dDrvB^6NxS;v6+va4_U~~(4%E3 zE&vcf!{3L)-$E7~c~Aw2`AIP6CJ=uiR2SmPhi`#chz!Sr3inoWf>emi(6St|iRLm| zAAk{B5#s_v_zHevEYwA6GJr5BC9J@s-UEowKrzKZ>I1|fK&(ZCS`|tw;J?uJ%zt`i zd@CSMre_o56c8VvSJCzhS3inY7QO@Gne;5YC8*VE8x$qYJ2K5W4yC1uZek!+PwGI- zLxN?XF2F}9`zN$C`UtF^1c=QRH_7znYN%xt<--poR>l-3n)PIwy`Gdfqzb^+#29Ut z4t)y&0*vl)IP61o)PuC_I$^Y8s9erb8(=Fp$&EoLAby3`+@}>@N~k`iS|NipU2}%c zk+T)rg`rCfat_-(NCE&gV%HF%P6*nu9C986&90usBflGn?=wJ_0FdLsC}`dUffqpR z5A8P6&4bc7dU3CT*bs=HLLC@I1-n2UxLrUjKu-_iD=0u+p(lj;QbVnxUx4Jf=L6+A zT6qxEpG<_ZSCH759TFalgVLZOQ}5x{7QKU1y7>*KdJqOw7$_Xi9PLfez=Pihz+HdQ z_{_BQAgG1n46U^30YKwbp=e^^wCqg`Bml+S76!;n3o-zWiwaP)KS)miYKmn7@k0j4 zazl^7P>PZ}pGmDeO7j?00^((K$fvKN_9#&$4~~>-V$_499vt-`?EnBY{{395o}h*R O0000E=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#%}GQ-RCwBA{Qv(y11`V59 zAOhqSn4KW)@<99$s(=?L`32dvFMxPGl>HfQEEN32Y9}m2&;tXnYXJfXuOvPIcMs4v zu!zBF3C#QW;)D^0_F((@1pA7?`vQ5I|(xNG@PvpfkXT3}E`<1XAC~4Ka-9XJaGi zL*u~^q+ifn&qzT1e_Y9yg-8o|fVcw5qAse%Ar9aJEkt0h)`M32y|l7$3zTk!76X@P z?L!!-rh2vjf+NtlA~m(bDl$2eN*XNfM4}5yZ04iqLl$x~^k`X%3jhSr@b}^Hw~z%# z9#jEheiF>N39V7^)`ht8;aeaUBE#`D(6W}~AQd7rv@C~oqIrbW!vf)tc+?8vEBJ}E zPzi`vLksa9{D?n6^CA)rD@1$-4Wv;f4pxCRcW9f!P7OF==p z7l_&EQPOBZX(xK5Qc)n51meX&EC9snw6^dS5Ko4-cUA!L4SKZNLZEo)S5NQAH0wB0 zo+Yk{fmA)IL;DlNf;&jX-A`!i{3Eb>5+F7XZ<6WDMc76JNKG^!NUV%0PBiPuGyq()Gp_!4X~A)1Zg9cDfj`k)7lLx;KfVE=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#zez+vRCwBA{Qv(y11`VKnNshNZS3=tJYd5TvuvT+awCgBkFYzaXqdu7!$7Y*^kdAWn3sq`VVGefu9Vhx#Qza}IS?t2E_skl@EzI-IR$Mug4&vaKG|9;9~mFDzXg7}zmr>Om601R%Z!?Hsa0yG|<5zB$O#LeLK9m!axGSn>k_(D>U0 zXsoJ3J;e)^a~-OM%svLh0OM|GA)^lUtTR+iI1q;n)fjYwcF6sqr6w|v0OGw+H4H;J ziGrF~=SO=JgUo~92f$tEcG7hG_bjxKcugnIT?S$eG_i16=Rr^jDKWk700000NkvXXu0mjfm&CqJ literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/EditBackground.png b/res/screen-density-xhigh/EditBackground.png new file mode 100644 index 0000000000000000000000000000000000000000..a6bcaa56c21aa5653ab19c2ed3aac9a8826c3cce GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl{SNcITwWnidMV_;}#VPNhJyShX&#pfYfQtA$T^vI+f|C;@SeuPm7#L?U VFoqbln*n7QJYD@<);T3K0RU=YE9(FN literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_Nocontents_Bookmarks.png b/res/screen-density-xhigh/I01_Nocontents_Bookmarks.png new file mode 100644 index 0000000000000000000000000000000000000000..f944b88e5e16f4e32bea8e1afadf6c3471e9b8b8 GIT binary patch literal 8539 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 U7tcm5YybcN07*qoM6N<$f)4ZnV*mgE literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_URL_bookmark_icon.png b/res/screen-density-xhigh/I01_URL_bookmark_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7976a2f25cecb9167133cc9804b8033fe510a6 GIT binary patch literal 6037 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 P00000NkvXXu0mjfxww80 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_URL_toolbar_button.png b/res/screen-density-xhigh/I01_URL_toolbar_button.png new file mode 100644 index 0000000000000000000000000000000000000000..030a380c70343a825f5d7d93e3c48641418ffd16 GIT binary patch literal 4651 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 HQ$iB}o=wVc literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_controlbar_icon_Play_temp.png b/res/screen-density-xhigh/I01_controlbar_icon_Play_temp.png new file mode 100644 index 0000000000000000000000000000000000000000..b1f9cdbdc29950f9139b5461bf2e610fc5aa86f3 GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^en9NO!3HEFJ|6~>3@qu6zK#qG8~eHcB(ehek|nMY zCBgY=CFO}lsSE*$nRz98ey$-3WyX4@dZwOTe;zO}Fm`#mIEGZjy}f0~b;v;E*vF>T z4|wOyv1xdqVo}K!zWm;z>+hDV4^k9~o@|nNwz_`df*H%6JU@M1AUbr9fCB>~3s#~- zDC73G8zyHrTkrZFI5)z^bHh7%3-*Hai%J=1?mzhTYW36Iz5(ger1}q9UM=7HhGt z40(DZNOZa0@uI_=5i?i+Ke6@w?=6m2V|i_G)PmWshwQ~J)% zT*XutY`8UuKPhKbnWY+ge`RlDeY5g$n^VCPDyCdL+^NQ)(7?cijrgzhfvJAgsVEbM Rf~TOk^mO%eS?83{1OUjE(dhsH literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_controlbar_icon_Play_temp_press.png b/res/screen-density-xhigh/I01_controlbar_icon_Play_temp_press.png new file mode 100644 index 0000000000000000000000000000000000000000..af153707e6947da7e1b772fb7b6d7bacbde42959 GIT binary patch literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^en9NO!3HEFJ|6~>3@qu6zK#qG8~eHcB(ehek|nMY zCBgY=CFO}lsSE*$nRz98ey$-3WyX4@dZwOTe;zO}Fm`*oIEGZjy}f0~b;v;ESmD9Y z4{UyZat;MSb8MPd2cLhOxODP9uhxJZ-%CqO-~VlGN}4rkzJ9#(o1}x>j4T2U4A_W9 zjmBN;%9sCsd{gG^?-hPJ^Hd_P^Uq=4u`NT;Tjy`ggwP zt`w{)%30MFJUw~mLzXpXuGT-f^}Y7ijFqeGjt7O$X$VcO(-D2%7B*+g^Ts(7R%RI; zKjst4xO>HnsFmy&%|mC)Om05D=huP#2PY=WJ=OHEIrZwHi!ja*s~4|-6+RoQ P2Z~HjS3j3^P63@qu6zK#qG8~eHcB(ehek|nMY zCBgY=CFO}lsSE*$nRz98ey$-3WyX4@dZwOTe;zO}FxGmyIEGZjy}jkjb;v-V?I9Oe z7f07Fp)1^#%j0%it6y^JSZijloB2$XOHb#>@q9H;-_Vav42&!S4%i5V?8ar8e5JAb z&!pZW+@0_O>HQVCBuR2r4-Cr6f?r7}czVT07qJS?Z zUS7Gd-fG2yyT_ND`PXx2@%G~OkO3dp0GSb zGuY6Q<3=9Wh9vd&DYZVnD`#!JIz>}^T?p$N3-JiSrCJHMcODeupPnQr-MsIHu6Ti9 zzrpgjA`$!5MwTv1&fl3;6&+ghC?{X+z{i)#r$v(`K5qyLUCF1o{9S!_?D5tm2C4sp zS+6H9kFZ(YvYFxMX0;_Hx(C|d?+Yz`H0SI6>j$OMLi;WH-qx$+{opw{^+=`4InDUK zO4eJod9SS}IIpbg;1Y9>wB7SVgNZ|-fdLC~V8Q|E3zkx9e`*arfuhgT)z4*}Q$iB} D5UISM literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_controlbar_icon_backward_temp.png b/res/screen-density-xhigh/I01_controlbar_icon_backward_temp.png new file mode 100644 index 0000000000000000000000000000000000000000..db67c909e642bf6d12b68848b6235df1e94e6da0 GIT binary patch literal 499 zcmeAS@N?(olHy`uVBq!ia0vp^en9NO!3HEFJ|6~>3@qu6zK#qG8~eHcB(ehek|nMY zCBgY=CFO}lsSE*$nRz98ey$-3WyX4@dZwOTe;zO}Ft&QSIEGZjy}jkjb;v-V?O{{& zL1vD1F_jDlrz%u%Zf|;^TlIEbiIQ&1jjYd?C#A(Ld~nFA=1^6SjnmD@v)s-OFo#wau2Zd;6Dn<2k;=+svNMX&yC zzfl_F!4>??KD0o#tn27zFAMGo_SsHe*O_X5yo(N1KNtDGR(4Hd*w>E7H~zUlYCAt6 z#&eGQqdA|R&In&{_xZMc%$8GDwXaAhoO1PWcfV2t0~3b=7J`R!599marvg>n9koHx N=;`X`vd$@?2>{lP%!&X2 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_controlbar_icon_backward_temp_press.png b/res/screen-density-xhigh/I01_controlbar_icon_backward_temp_press.png new file mode 100644 index 0000000000000000000000000000000000000000..04b94f2cf3f0cfe9ebc187c1f32b06aadce5a1ff GIT binary patch literal 499 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 FV1lVVTciL0 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_controlbar_icon_compose.png b/res/screen-density-xhigh/I01_controlbar_icon_compose.png new file mode 100644 index 0000000000000000000000000000000000000000..11cdaf1a4efbc3810553e19f6b0b58d620ec1416 GIT binary patch literal 790 zcmV+x1L^#UP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE;UJt{NMlp0&ht~ zK~!i%?U>(Z13?hSk5ED=c?zLVc`6~4QbH*qPo+ltkDq?l*_H^O)x`kXZ1qeht%L$J?aySHCzSM1L^_wfOAt}jz0PWVNTR*m{vX6Pd zJYXI$510ph+85q5)ngHf;yB97 zM>J3U)Sf_5k2<2LOLL6-LSsR#DH^I3@D~HrMmyKJdaVMw#m_ZVE0+QYhu>j*xKpKC zugh7~fq5<6b24NX00GkX4aaX=B79a?2MCa!Z*QR0Y=tpi3MC+>n8rsNpUR2)I`QZj?3V&I#y79!pRL@PvUICQKC-30}0e+PX;d7CD)tQ z^3vSu|Ftm)lf9gMV})so@69wzlp~8AB-=m|8x%K%0?%X40TJ0ofODENDk}b z4vO!STs_QLnxqh{&hc&}JH{@vW6hkRp;`frF|`hMY2%(AFeVu9+PR?nt+ij&!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC?Q$m z8c`CQpH@gGW$R7W=-SpB{4f~h^m4@qa1*hM?loS8JvG`HVbioAihuz$5EH~0wZtQMw zmr!+xtP$cAOxc|E86j9+fe-|#%_^{#rSi1Tf|VXp-(q8pkZ{%(vm`oOLb{mQeAM^zXY O)C``kelF{r5}E+!ow#}c literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_controlbar_icon_create_disable.png b/res/screen-density-xhigh/I01_controlbar_icon_create_disable.png new file mode 100644 index 0000000000000000000000000000000000000000..71ef71e2139dce7e225d84e6f07c28c37dcf54f3 GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q1|(OsS<3+_#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC?Q$m z8c`CQpH@Mmxs1O_lVFt;&tR+QxX$}R62 z0vUuZl*=5yf6e3iqCW)(Co;rUAJpByygKH9a!=RiSht4Q7JWSlp@jK@3GbQY5~nbv ze)LpvneevBk?rJy?hS8xlmb<Tcw%d5b?!2wcU>wR;=uE{hMA zMJB(hKAlX7>s*+=<@3&pliMFD6j$wvX*)L?*ADS1v_Vqu`L|bXIsI~47au~Uw{?0pjK>pUoc$Tj&drksFnZeW5 K&t;ucLK6Uwe711_ literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_controlbar_icon_create_folder.png b/res/screen-density-xhigh/I01_controlbar_icon_create_folder.png new file mode 100644 index 0000000000000000000000000000000000000000..f3f1e37bb129396d7bb76893c46e3022ada0b99d GIT binary patch literal 633 zcmV-<0*3vGP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE;UJt{NMlp0n$lC zK~!i%?N`BO1VIoTmJq^{(-J}mA%w7mWeIx<`Gb&C$Oq&Ua+%+rQ}W90(#9tBrn_`z z)*FhUtE=C8RW;MqG}qf?-ekKlx&2w>P?_+>P_@ozQyx+p! zGwlicW;Edl@Lmi6`rHG;`tkXj_6Rgw+VAe*^X2sH2NiV-qS&TaHuQ(ufw;^L#f(F#SngdF7GpQ0i zR2lkB^k!A6#3Opli}A0&2^(WPfTimL2*zL4s5A#Tf#}K;3qF^yQ_qjSYzJYd!q}w1 z0B3vocvAq2+(QI&1tQg*B9|PLgO%5|DUN5=_jW2^QTwO{RfDR*y54cD zL0q?O{}ngW;vnX8K-Xh7|)S#U(Ri#npaPKG`cS+7bR@rWApa{TFM!rB-Q zVC#GV!T75hWphvvh~9W&A?6h0$cv*d+dPx#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE;UJt{NMlp0jfzv zK~!i%?OIW113?fDp|7EY67tm7Qc5X(Eg_WBe^5dxeadUx-@d2zo4Dg#_I7u6cP^Ls z!an3OJNwNyJKx<-ZZ_kG43L4VW1z0d&{Gy`)s7efTVertkjZ5iNH80cqEzW1@= z+G{_{XU7jvw-|32JKu0^&%S+(jbn`uTw9wE0mq*yb!9cDXpji*&I)L%Utro63lh%W zQ-N5{D;eO6CD0V#ApKA*Kyd_zOSyqhWY`EzQO2g~3>jRUF^em6UPQf8YNpg22AInL zGpIZ!X}4}}f`aphGT7cqe1IE)ng?v28(%w@T@YZdfh)l7X~74+UE6nF?ASaoz}#%P z<}-sHk>M5vIjlj8y6gI64YCH0XUoC9DQl25n8^S|h9X0eITjI0fv1T~IdM;?$WUY` zG87pTap^n+pLDh%JiqPlkxi%lkR5!@o7=?WWSUL_1i&^JKY^CuS4`s=HYfkzkM<@; z3_xu&S7UFwJ)5m_uK`rjR$fXl4^S2;30mU|0p5%fpa?;z-Za2tY^Ci#N^o3+43Ggb fKnBRb6*2G+pddGUK{u!800000NkvXXu0mjfk7(=E literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_controlbar_icon_delete_disable.png b/res/screen-density-xhigh/I01_controlbar_icon_delete_disable.png new file mode 100644 index 0000000000000000000000000000000000000000..82f0d064c0c2464c408e3f44d57f5584ca097bd4 GIT binary patch literal 518 zcmV+h0{Q)kP)T=L3!WDhG*~nEZ-eJKrJyoFiyVV+Ma#; z7#qhLdpvtFAp(vMDRpHvr)ZD}?%4`xs$XFGEEXi3?NfnR&MO(`Sb*XP z4xi)zpUAKgnxc$N)md{?+$)nSb6!NfQfj8u90r)n05hn(CTX{BZi0gIhceh6B|gB7 zK+OX-+s4<)WfugPYv2m7dt2~I*L-HsBQo5gAcr+*QFmRRtU=b` z^=>)XH)Rd71~VC;$WUY`GS?zPDeyLtDJSmf6d8&PMTR0{A}*aT!8e_42+w!>d1TY+ zGGqr|^T{0(0v5n_7+-;w;4!9g44a$Z???M5Mhrl0Ggo78x;>k%v(^AAX)Aw9Fb_}` zC<$8Q3jr=h2~dO}RBsyKF}Bk7A0;?0LI%hH86X2>;DH$U1Hmb0pQWFRCjbBd07*qo IM6N<$g7>`8o&W#< literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_controlbar_icon_more.png b/res/screen-density-xhigh/I01_controlbar_icon_more.png new file mode 100644 index 0000000000000000000000000000000000000000..6e2fbd6649980c40186af63a736eaab99c1cd70e GIT binary patch literal 3097 zcmZveXCM@Q1IK?NpIYZ0_tCPR`19N`_stGtbC&LgpD+ z3E|1;WIp|0KhKNr_w)MudG$@XYHh*{;fDYKn9WQL?f&x0zoDo7+hvJbLVv*!Z0d9u z07i~~Lk03*@B#p_xq(1jz3Lwn8g$n`C|KAGfe;S96XbW}mM;L|(>QxH(teFwhcdSZ zw@Ai3w+OQ1q8GM+TU$nyNY?_W!bchD0nrLeRJfRQ#<~vAbEU$>QxQWmu2|4x zIDvj-8oUJP8&hF$xsvvvkOp}4dwVT`t8&0Y>f!fMfWaN)MNt8l=OSEGg&9DY!#CLw z_-lcxp=*zg07?OH`dM^pfJr%^VCLv&3f|QNB8iQ$7SJ;R1>59=%YY^dc=U*gg@gD! zz-heWsQpW(hHVx4*Hm7uHbGp&DAt8uE`-j}5hf%}GUJiqRP#LNnXeCPkI3UwidA9# zwmSeoVFuUVwYw+bB$gTyNi7Y};x4z|N_!^i<+XIWGE^C?55Pib%ubVixv}j z`buJp#{W8F;XO*KUoETtM^Lyn?YJBKuN$MHr-Z4gmF4A0^G>*nXP;yADZ1UA=y-DL zPmK04W&c~tqIj&5TdWDq!MFB-J|*h!5uC9goXZkKodYgYN{P9`axH1yzW){)w5vEUd zk2NAPsL_PMg*}A~Oi`97>q*lx;fvxb7p5818K~oJ+oeP^%Pc-fHeC4A$?K)0n1nKw z6&q(y=a6TMN=9_5i?gR7l%xnx&zZe{gB)QWF&?>XC$=VAj#V+`7t8FO_6ew^(|9f` zEYp*)j9czlR$dlZ7TIxu;Joxh-W=F3O563_H0N7kTTxk|_03f>aCn_>H(OSOyr7!y z46iQ2+r70-D&tVOm#;Ax$8Ba&T>UC*l;5AnpK{~vkI;q-vspscIbR${`qxZ; zO4~}4jb^o)%~D)Rvr(hdQ7nr=x4D$7lnFYWbRM^AKV?5#3Mu8b($U1J3ha6KLX<@Z)wUuvYMJTyk zqGhRN**!Qg_-b%GPZg`9IH9zPUBymd=j%P3!<}XEW%y6NX0^-CB~DxTrrQb58cxM1 z2WPiB<7!;B#CT(MW9fxbf_0{KWx+VQBIEx86Ch>!L}d-0&_Ki70@ zWj1F}=G{sUW=qwm>_ro1d&1;%-`J@+HdeNWvve)F%s3EqYN#!LxNB`x{ z8#sIHs0o?}O}HDko1B_r@u(k`qYJ|dbj|iOFPn$%hqx_7j_l*Gb=daJGV#a8kberK1P&&30v2kMU)eLcn}gj19sj7X5KmOx{~Q!?AkeU43y_1;ull zNB6hxotI0xOWNvlN^?%`1M0;3p89^9j-Uefgn7h6u`{2u$g^Qkijkl~Q>Vll#JZe2 zI*5EA(we5HN%s9+JGE)>q>y01Wsv@;`q4^TwTOSu&!^QQl+|2P2I&S%!qu1`<6r1J zzk8;3#4t%EBqcZ|>ZJuIqxgpvb5z5IXApPi4G#^o4d<|EMH`K`a^|W~-3r)E?P>J} zl?J^on4i8yM3!={&;gYX%V-`xD>^cE8pW598pAS-%BXvE{Czp zYG&(OCR<;5{vQK2Xc_kti5-qGi8M$=yI?z7RDM`(IC&D`3Kg>6F@;)1KKq%`q#7aq zS-Dttg%B@Q{V=ES-_otUpP=nN3&Tm?pemu5O{@%RVE(2j{fd*&`yn9`?_U0EPAxH(YQM}DgQV*BOU zCVM;k!ZUnvqJ^WJAnJQ_)lH3B?T`pEWQps%OyV`#D(z2?@zB6Ao61ecoSK+s$w;e! z*z0Y5kJ>&`1#B=nKvoi>H)bX_-E2_uPV*l<4-;_$x?CxbYdFa~Ib07XrDwud1d@XK zTJvU}e<-i)B=`*Zjrgs7pOY(aVacw@`JTgan|W&b1M~c~51aeHjmYvjgVN;2I6Q*z zx>fsAlW%D+X;4cK`3AX%JVdH(jm&=ZoH)2Wyd@CT^jqcU7}=$Xa-!SYLUy2Xup09l z^F1;bFMpNl*;AzxyBp`z^+VZMv(y)nJ^XfzYOGxP+Pg^P}X{h9F~zrshYdXwgFvIcE8 zu!Sy+7@eiAYBgz*Tz5W&?$nZ3I2=DY=D*c+4_psj*FMc0wdrnr(U@ODa19`AMK*to z@}sN?6sVJC_nISqai5Kk6=>+pHt$9TQ9e`l=ecKN?ns@G`WvUhq_(P?Y?|En^fwKr z5VJ{RdM>9kliM>7ZxX`_cZX+8D6|Q2L#G-0>8yzJ>3Qk>iOh)`1y^)6G#2&loU9#} zB8Gg1Bnx;>U!C^X@Nmn=9E@#DkcM-Ii*j~yGFt;56rZdUH~8L?yV|>iT6)8k6|e7I zJKAgun+X%#em&1>v;08#q4b&mpZELrUrLWM`7$%lXsB~{kG+-U$bbK)u(zq56#$VE z0AS((_;dD`YXIC+0ASq%0L@$gc!Hj}e>Mhy%FxWv02x00b8UsV!aE8Ti$n znS?n9kuLn7su3b1mEyl)xcvdorKm#nI#`P&MJR~K5Z)T~oB08#Z`W-s7sA*m@0KTE z31>!PTQX`_xZ?80_&m)6Fb#k1xl`sec)D<|{Ln`9l-r49S8z{h* zpeP`~@OVUJ2^e z?{3cZmss;{j`96JG2c(!-M#s7I|CyV3x|M$Lj(00jdiSTi50@72FZJ0ZLe0Jts~I* zQ{b!ht8I>dJ8ZwH%U^4)dG%S{qgK=6YziaeET89x0v#HjD5xqpXxfQ?7g%6%`16X(D<-eFzHF01qaV|j z@7H_({A}XLmfw1r;qH;0_pZ%5PsaM=2M{=2w_OD$W)1s2@;>|d_$ka_49H%GwRpUZcPFEB}b%gVCi+n>vK zxdUcx_{PK(QvL7cJ5~+fh-ya0Rkr_2z6&n+82Iek`PSHcIh$|wKTk;3$Z6Q#W#c~b zpltEBUn#GCymV&FGI+CdTgSuPuQz|(`0vy3Y*yak(&Ub_`{ycus}cJe+aSePdulUH>b3E@6YX;w!rRyaVD+NnszP^=z|Bof(<>5MudY)g` z#qPc0zR<<=rI?%1DyBRBr=60`d};QKKfCts{q!N5amWAk$F6_&&9U^@_~(P^tGiKe kzBtk##!=GJAM-|Qed$M2ST(0q1Cuy|r>mdKI;Vst0MDB`i~s-t literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_field_btn_Clear.png b/res/screen-density-xhigh/I01_field_btn_Clear.png new file mode 100644 index 0000000000000000000000000000000000000000..44317766242e279519b553fc10592d83ef99b3b5 GIT binary patch literal 3495 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 AVE_OC literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_fit_screen.png b/res/screen-density-xhigh/I01_fit_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..666ba6cb8e983e84900d5336f6c3b1a0a6b934f2 GIT binary patch literal 3740 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_font_button_left_press.png b/res/screen-density-xhigh/I01_font_button_left_press.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5a1f59d11b6039d0233ff497ffe5985f89adc6 GIT binary patch literal 6412 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 A82|tP literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_font_button_right_press.png b/res/screen-density-xhigh/I01_font_button_right_press.png new file mode 100644 index 0000000000000000000000000000000000000000..89ef5cbe91eacf94ffe49f6c95c7e44e42e89bb6 GIT binary patch literal 6878 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 Y0HjB-8+IcWnE(I)07*qoM6N<$f=Xr!)&Kwi literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_icon_Back.png b/res/screen-density-xhigh/I01_icon_Back.png new file mode 100644 index 0000000000000000000000000000000000000000..e217a0a64b37836f78a99955634a67e35151366e GIT binary patch literal 2798 zcmaJ@c|25mAGRjdR8+{4F+-_4X2URJ-wnnxBOyyOW-u{}nZpcMN{bT8lC9e|6%rAp zY*CgXF3~lK=w|nltFTw1jrflH^pYbUwgYzF0Erb0@W>pRgcX%Vp@H!XatMt`BU7UzT4`d2G=%Qy4R{k= za6v2voV<#G^BHV0TP$Y5XOn}%XaJZ(3!yX3AhR{~5HOu;2H9swKoZzCv{1TZ42MRF zarF#}2@AqfAr|IfQ$9{Cz@PzSFrN|5U^EhiM4-?Jq>&y9i8D09AyMG32SjX*Lk-3eZSB9> z60gi4p#Z?fArL$s56;tvvp69L6c&p`AkhdkT2GA7<3=+9GGC9$g?>}8rE!BebT&X| zF~O^fWC|-1FoTFa{U-zl`@1ZY`!!ACgdzB3HUb4lu7>mtNFe-wD1-4G%>{_GAO8MN zVXkL1n}#6LxU5J{khpNc&{b1xoDGLY23Q2xa28f}dUIbw=Hq^tWLkTt$6Xh@o7wPw{yg8{Rc| zQ87Qk(aW~pei}*g3zlpo%E;_GN<}dpA5-qN!$wpg5iodC(B^0H!&f(?y|G;5Ig?E+87&_#lq1z}Ch19Df9tq)2(q~y?;do1tn2)U zY01jUI<8FTuSN8-w?zHxjEk{h&dO5JFINJbU0s*?;o;Nzm*iw+xAnYup=_LV82>u{M(U{>yP{U``-^XG&J}TiRohvC)RJeB-_Ao81OFY3D}{c(y}l= zKi^jyeP^?ZN@$Em+T!B-_wA349ZHn<=0xL3bxMozs6;u**6vzxMRB=0#Q0%0K2uX zu2Yu0e`IQ1P&3ZuucH&=Nl8h2a^zYUdZs=c^}SWs+ugnJ>*2#I#Z>2sHxV`W?k#3D zraYM$sDXM=N+c4`q$0A8KI`exIZ}+Yut2=@+nf_?C2)Ul$$0y)6ktawB#@q-h!&k* zpy~OS6fU;#Vq$z%R8VO<#Aq59~5x4Ng~N-d1N$YO3E) zIB`N=AP`(2Si!URe`uT1(8d}Wg~T`(Vxq9swU4K#i;?>JP;mUZ+qd)Oo6VBl-|#>n zkmgHkW7sdhOl`7V*k+%(anh%)F4oHxe9bu(mMQ)BL0=r3$MB9}6)Q2g4XBiql*>xW z%JpYo9QD&0PB(?Rme0vG%*`P)ky{lM(%d~fy6z~EL8(bewf=keez<-2uED@wCr~13 zNV|RHln%eNuyFU8tKKPW-BkHnhtl{+iZO5IfI~E4oW}J#6zX_}x2ZdsbTT z;>_fvfTdd#_j$==toz>Gtk@t$k=lgZjP%F^H zgpFNR=UEPbM-)DNMbU>H@Ks(8y3I;Yy1XL~AO6iDv?LQNk`XnxJ@5 z%c%&BK+O8@ug-d3w<5L8GLfIL(A(QPCw|^?kI8KkhFAWT-8vR;bwMbl93NPI=T1M& z!a>cY+xz*i?H`AxB9zWmNruXnNCZlcYh8?KiJh8!UZ8f5(Jx%wddh8hPFeoi%o(30 z0B7q^0JII9uQ*Q3Zh^+XU%148v;Q?M=!PJJn`or~-hWw^8soP8=mX`}$Bne4-Ga0_U2*VCAYIU@5eTCw$w=Wx zU2aa}QumPW`DW1WcjQ0gb6hCRC#!UXk=O1R99kG@P0k$bze~>;)H+1}MK|N>=_&!Ja^-UZjre; z7F)HxK;IQw`v@fIV{iXB+IWwJDyU81xkvMHQ0`52p z_*d1-^nlY|VMF)`uP}Vf`i+`*@87TYArh~a2`Lq{(2BnN%F4=lk%+IE>Ga{eZhwts zrpf@O3~_&CYr|CH?YSGT4{hyTFViO|j!sJscqRAT&QK~6GFevzAGhQ-B}{OocHsX2#&1W=69Rw}?n}BT7`3 zlY}UHlwBnuRHE!zvo@6!x}#g&?>pz~d!O^Z&vJgh-+w*Nd876?IVi1GTP-6aqeR$= zCrM|^3j-A=j(~i7pi*mGnh%zQ zxBq5Ky0d~Z`Fsu*1``MbCIV9vfXjd(Fc=IBj)WnR#!`eaPZYqX2#o`H+TRuMbRLz< z;_z8O0AyK_;td4yt)Nm*{|UjL^Fua(_bpA*gu#Rq4h&%eUk>RzkVyRhP=Eg)Xda(L z|JUFDDa>;bap*7-od*PRsnWvvXfK=MU~Rc{3LoIQ0D#~3Ebd_fe1OLUI1pQBa}xx_ zl@&k(1iY_!A`wdn;PEK|R5}4~1(hn8uvj##4H}I{;_*nNsf`^1VTZJVTcgl+)_8kc z8zdSIM}6nw0cxN>J%In6OZ%5=`cv+5EBJGymhp5h>j<4@&jtJ;Uqi;Se(nqWr+VMG zw4eKe_$e1Abq2Ov*#9W>_akZdEH8hwt#tFF@#z85Zs$tdnlTg9CnEzoK)_qO2)ic8 zK^&JM72MoZcXnhxZ}{;Fn!v?EkxQ* z6uRILU|6;}=8S@w2K@P(e#~FReW&l8jFX(myIQ&`F4!SR?Zb*laZbXkdanl0)d`}Z zl--RPV=J4JWl!zGtB1Ip1+}=>=n8Oiq4R1Q3SLdNX`)?EA96GJUT#jhez%5fuCz0% zafrw6HHsEH#9lemuT-Y3>serU#<_^buoD4Vc$Bv-a7%7J1eR^S_<-wFpkZ!7l+hG*>!lR8r&P%G@p9x!<@Wrw_(hY617(0YxPke@|fwf zzDe{dlF-OrpcMvGxTU^>UY*RVwRY*QHJ)B9)hE{+ z?041ljl&eY94ALau@I^g^HpiVn7RWqs0`ex}+PO2>z|}cTdAk zSI`>19B?}*rnxPTs4}^;W=KD&OjGn0{`n@HvHR-#PS@1TNb4=?q=rwhWZ6)G{6@oL zArFoZH8xLlcUo!mBkR`eB~2}`)A_UYg9FAq@2gq^rG7Tro2q-;W!$R%bOJXQYaSJy zE8Ca>NscO2nI+bZ-@Y~QWgcveZZ+xMFl}{@vne#k;MDDUiN<2cj3yA*$1EsJVc-uF z&zFO0Mj;=|ooe?;9K4D$DxdScIu@P5dU;7FAjj2}+1thg4|%ue+O`oZ{_;L$&blYk z^c>_~9G$-ARzexqg|w~Gwyu}7uU)|#)V(tysZMwnZo!@M>|d|-3`T~!#6yRt z0p*sywgb2wZPnE#s&BU_WLv(wP*!ra)R5HmDtuurJeq0$4oU_a8#TVlKWbjdXP*cj zj|xkpFFbZKXKwd>qjoPQJbRX_BMZK7qs}~<+fAC@QrSOl&0~+OtDjpRV1WQ~+fl*Uc%)t>4xzt;bb?y;A}yv*F(O1oCS{h(i!O99x|MvMmycCy>v`S{CsX) zMRI3C9@iH(cayeTr+dLP=HzH?d)!F@II;w`Rs`X)1`@JRjLakG4Xa)4o)2_TQ%94Y z=v9Y;r?oxo?w&#B*(R3H`H$>2zVbj^Au}Lrxey83^n&8HPHr$-Dcv`!RkzH{-4oTH z9Y!OV?ow&&DWzROw-s8nB$Q1kk)CW{A{J#S8Yau<8QoSsLm2ki8l2Q|zN7^LJTkxO z{RHJsSVe`h&&F_ad@!Wp3(N#C(LfUDS};GoJMHCz!1t5Ua-ks!f$%d{!ZPc8(LaV4vYxFt9)uaYq1d`J2=yqqDZM0r%1~#XDx7$J9a2`CcSG|_Q-7P} zUd10t?Usnvlax&IrQWFP)x!LDMp?hAWPGZ<)X`aJxt@{i_7Y93sn@l`Xmn7GN9qj9 zCL@cq(`){SD^TUzzX`|A2YDjQn2n7%YOK@!l$Ap1%{IkBC&wSIRfE46@nj+Ge_gNs zE`Xe1ySYrC)JD)f$eokSGi8CZtm##svXplzgnHh|lQ=8R(+>3e?&QH-KLc0U1PVX2 z&?%Q_Dsj~|(!b2or$$%^HW6`iFw z9CN#c>Dnp#f)<_4WxN|6wTJk$TD4fd=nWZH=}CxeeORad)L~AY2|-iUI2%{a?AMv05y4>UK~4hHD1ZcH^h@#e3pEytXe6p&z?4 zG0_XwWG?M6+qWLbfKFrq6(478r&nw>rM=co9&J`C`}DrPjB9i-^CTu3oq4mnf2^y} z)b65N$o1K~0?8CLBENy0(;AayQydb107Y`IQX9TzszNS$9*)kn>qvh;q^Fw@6Y8k# z@cZJ_O7I&4_+izpd$k9jjeBwTUI!PcjqPgRM{j^QzBb76?C7cx9e%wAseGY`8~3o7 z=^!@d+|1NVf-7}JW004&%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(*OVf32;bRa{vGf5&!@T5&_cPe*6Fc02*{f zSaefwW^{L9a%BKeVQFr3E>1;MAa*k@H7+qQF!XYv000fdNkl;ITwU?+aLKEMhUiSDAO?kiTG z)4Wn@322b)Zt{|c=hUe>&8KBu*G=&6{rmU-`Sj`24lT{ z^sgH?ZggeaJ$dq^*`7Xq+C6*rtmBsZI7Z9P*LgmN=j!=-eLWZZ{`)+B`0!!>4Bj3; zejN5=zP1Ms9&~81#qQm^f0-F*!-friK5^p2zpq@m(%rjvuW$G7-|r`5i^e{V>z4EQ z1DqetW#64Uce+-)d-v|_Ui>;3!@1aU9`|+2>)*b8yF>HeW4~^1-MZCXx^$`Ax^?S6 zX9g->wPMYhH7ie^Jh^!7+O^&=Ze6!DjX4mlrk6!2_~k4$pHiMnA_f#^Z|@FAhPv+}s4MJix5MlUA)-wer}p zV~dwBU!G-))hZ`L=D_mO>0(!!Rpu zI$?`2$uXprIdm+d4N568obUvZWmvs0o}<@~UTj7sDhw*IKVd7eJt=YBw-W0EOoH1+ z@g0G(0=$E02FB4tcqor~uzM^#g5g8YasK0>TZI^n0fVs7NZ3ZeO+Zx826#GyC zl2JRzDj1VxM}0mP&CL>w-=`)T7_~6zI>ZoaXaH+(8JTp~_BXBs(y2if0?yv&Vdi6= z6|ru|G0cH?0fV-0-##RYY7k^J8jBe&%5D*Z%?zYrH4o!Oh$5U_w?*mO$!vCg;+zuJ zh+l;~2nHY*!WN+hux20k8E&Ueof3Pe7TdK&iqA)J6Z`Ej6<@N>@)}T33yxESvj0M@uEAPoG|d zEODmH^shIj_2@As?BxzO49g{MAT@$ZCFfc=MyL)91pTFYOm!KxnaU8CBzjDq1S8>1 zP=08!9XA|N{m3g=LxM+YJt^`U8pg?`|F({68HXWQRTR}5;0X%MtPwH0d6shqj%+tp zDjDN2Q5N*HVQd}KIgy=YZqz=QCRY9uvKr1WVNorh4&N+oB{o?XOEXazvawJe*? zqud!DnO4KNW>7D$dS#U3YWymTd1@!maRM3jGbA||UW70!Z?JC+x1&doE@Hh2Z<5l2 zA~TaHV}!EBwxjhiFXyUvX-%kF7t45%dR8W6iC3EKJOs&;jvP7iGe{W1$g>G+Lf+4i zB95`^`9{@qTJy+z}QqVl) z5_7(kjb|QM8K|Vt30fg;Rk|mxAoX+KQ$Ib;!_6~ZG0^v={r=FQL(>ZvF7$jOW3?I% zS~BIzgJvIH#XyS217gdDV{J$pJjOm7`_7#^*KOXsd8uGVfW4O zX(-c3{cUX1V^NR3RjN5y*u;s~rc4uD3w z*M_uj6krf;z?}#-P7gO+L$ez{;)+&J z;Th^R8M}5(=7Kp|PYXRrzwF?b9tAKbB_1c(dcz#_aW0QJ&-;0uvGZ^~jZ_%-6od_L zGyAsC`yF(>B*OX87bu*IIit%yy41t)L3lA#n2j_ejfEk{an4wVqmh(xdqx_oDYb-d zR>S5sD-0s}^Nf=bKh1Pr8eu4E`6Jp_aOb$zqZGIiZU`%_QR^3G89!1$XGnU9S4k;C z6=7HLAZ8ogD!D@ja-HV2A1}!ghqT`rcvLFU3Z_y3Q~~gYi5m*CU+Ya#Nd#%W;z6x) zN5+v{{X6LDLZqvE&16}|WB9suV?AliC|N0^6?)Wdm4WzhnJTA|T87LP7}X=xh>CMG zlH#3WT7*d~x+&@V8lyx&UJ*r=6#7O9sAGJH8Ep)xncZ}r_GvctYh}Ql$q21M`%0>p zPy7SXs%TH~sUnqqx^S3@TC!w{QQfLo<-S%5BJ5HgrJm`s1R>!W$wQBx78%mhK98#q z`&uUL-p04y@`TKLTHZ%I!d5Y$+QCDseK|%2L^wGwZP2p&2UDT{=#T@Ko-)3lGXHmOUsQRx{l^ z6o8>UFK}mu$*PRipCUx5*l#*Y(TZK3=`u;-@9fj%m{mOP^_T^HN(;q~tS+q~=5urr(nAVkG+e86;+}+s00K9?X6$P< zH4@IDSRGUpBNnXWFalgp#Z1RpNbzAXu34!ic(p1pwjWgi#`q5T50{W|3F0$kE^3BwQ=G)VI<6_iP9Wia~M zERq(jd2T$X7)l4m$}Ca%aj^jl1#I-B{rmUN76P0C=zl(ddeGoM79a^!P^FRhK>DF) zw&dd(EebWyKJ%t~Vwu*cqH}egviZnJ#2x^%?pJD_hKW7}_CMFmYS9{k(dRK<_ldqJ z;T#={LRmvP!$kE&&u;tn?fYx_ZnBpo2sefrc~FHx{#FUlo<6g*>zRrm8m+fQRYk2M zW!1?jV|m>vt3zr3ub%WnS$ls4BSE`)@xJmPdP(%D3VDxz8bj`*{krz<UAuNIln>tfFVXz(<}0ZYG1)BcHB-18$kg|kDj%z7tCzVK zj#V(DifQpA{HI30-Lq%U0zHWttzy!?KBagP=`#;C4Y8Isi|}GBy{ibuwf*I&KFdla z*~_7k%EwYOBO%pSX`VL`=_=xr>neX(e^56Xj}`B}#H(5%lYKwHb9B5Y_6eF$fZmf3 zZsqTA`$a>9-KI^OmejmjzLj>J!Mf{aGGfdScn~~96h^HwhjJb~bSYc(jYgm$A_E#v z>Wx%Bd0E)IcW<|Gy{~O-7?f?E)K(_w^+#)f&N@tK#00000NkvXXu0mjffE51s literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_icon_bookmark_off_temp.png b/res/screen-density-xhigh/I01_icon_bookmark_off_temp.png new file mode 100644 index 0000000000000000000000000000000000000000..93b0504ba06a6a7df96c3bd34d0b8e957fcb69b6 GIT binary patch literal 3944 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 a=GOq@7UYQsgY}010000hK*kU literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_icon_more.png b/res/screen-density-xhigh/I01_icon_more.png new file mode 100644 index 0000000000000000000000000000000000000000..49a6d06a5cff1c82344d93cb5c9a67c2527cda1e GIT binary patch literal 1497 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|l`=yjN+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh)vuvVobQf|-e)p^1T| ziKUK$k%6IszM+x6fw``sft9Jbm4TrG6et00D@sYT3UYCS+6CmEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{LKY@8PFS`} zm>iGcx|-tsR&{~Lg6>;c7v38GWQe>yHO1*4zYTkPVnv9J)_EESPcgZJC@S5vHh^3%$u)bOJ~jTQ(w$`;?m16eHUw-A0%z8aO3_b z_)9@4<5uVNsa{LB_c>>;zW-j{WVY|M*I(y#UQ4aYt5+A|+!~|jJ<-Eu;llW~^9Q(o zc72KvH(oZSeagwu2%r7!?{_`^A7u~p;RAMtIcL-2C+)i`-hFgh!?LXk%zvJJtk8N} z_WO!Sf!=iPvuT^(H##_|If|cKx{~wG;+_8S0y`?FFROpI`26$9&I>PWJ=A$Ev99vL zD{C3Po!8Kn(4K4+s`Jw>E0gGpIP@^KNf2>|Gd5F+e=G>JePJKp87)1*Y_e< z>!F)gd~4t4ZU4PAZhd~ntZj-)2C=dA*Ro7?<@)z8m_Pk>h3?+ve_VdLTu}QQeM#@B z;Jw43xOjM}AajRFjFg`47Vp)ocHPe~d2%sBM3{Hlb@^Vm^Q*7E(h=*nH7|M@y5D>M wLYwPHdxO26hVApdznuXsN*_#pw4Q;P;o23Gyj`rJt3ZXVr>mdKI;Vst0I~Trr2qf` literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_icon_more_press.png b/res/screen-density-xhigh/I01_icon_more_press.png new file mode 100644 index 0000000000000000000000000000000000000000..3a135097366db9d6b268d59882d67e10cb32a046 GIT binary patch literal 1570 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 i_TUS@tTeY>d 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 QL;wH)07*qoM6N<$f@&P<7XSbN literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_icon_page_navigation_05.png b/res/screen-density-xhigh/I01_icon_page_navigation_05.png new file mode 100644 index 0000000000000000000000000000000000000000..7545f2150ba7b30de2d88b8d83e8266536c30fd6 GIT binary patch literal 4917 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_icon_page_navigation_06.png b/res/screen-density-xhigh/I01_icon_page_navigation_06.png new file mode 100644 index 0000000000000000000000000000000000000000..47e260e764fd4f8f6b8fbad55d31758d02135848 GIT binary patch literal 4975 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 Hu0mjf)l}=y literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_icon_page_navigation_08.png b/res/screen-density-xhigh/I01_icon_page_navigation_08.png new file mode 100644 index 0000000000000000000000000000000000000000..d017474dd1109a70bee83a4d23a764c177709920 GIT binary patch literal 4986 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 Ef?Ysez5oCK literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_icon_page_navigation_09.png b/res/screen-density-xhigh/I01_icon_page_navigation_09.png new file mode 100644 index 0000000000000000000000000000000000000000..bf759d554d969a2a822f10fb142791cb180c19ab GIT binary patch literal 4966 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 b`P23r=GDs;{|vg;00000NkvXXu0mjfP*UlF literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_popup_bottom_bg.9.png b/res/screen-density-xhigh/I01_popup_bottom_bg.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d74827f88df4c0322406945d938756ac10c433a2 GIT binary patch literal 108 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 IM6N<$g2Z8k5C8xG literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_search_icon_refresh_temp.png b/res/screen-density-xhigh/I01_search_icon_refresh_temp.png new file mode 100644 index 0000000000000000000000000000000000000000..eb1003680cdcab3ebb73679a75be222b15493caf GIT binary patch literal 3546 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 Dd=iTM literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_search_list_icon_favorite.png b/res/screen-density-xhigh/I01_search_list_icon_favorite.png new file mode 100644 index 0000000000000000000000000000000000000000..fe43523924c3fb0ddfd0e80c3c762f5d3f600f5f GIT binary patch literal 4844 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 P)(Jpc!$7?jW*hN8%W)!B literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_search_list_icon_favorite_press.png b/res/screen-density-xhigh/I01_search_list_icon_favorite_press.png new file mode 100644 index 0000000000000000000000000000000000000000..599242d5375e839e2a5fc64eab29b56eb003d23a GIT binary patch literal 4170 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 Ui)dBxZvX%Q07*qoM6N<$f@9#>SpWb4 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_search_list_icon_history.png b/res/screen-density-xhigh/I01_search_list_icon_history.png new file mode 100644 index 0000000000000000000000000000000000000000..8c5948c6baa75116486bf21e30ab7465693cae23 GIT binary patch literal 6224 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 a1D^z`dtW#(kRgw3fSQuFVhz~p!~X#Jt>8ic literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_tab_icon_bookmarks.png b/res/screen-density-xhigh/I01_tab_icon_bookmarks.png new file mode 100644 index 0000000000000000000000000000000000000000..4d91a66c57aa8cee631e2c967ed6062dba5be9f0 GIT binary patch literal 621 zcmV-z0+RiSP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE;UJt{NMlp0mey0 zK~!i%?U~UH!Y~X(8G#WPfe{#i5jp}RbnSjYETt%_lGf)qX zIk@QJ#4FLjt4eU|_XA5mmbT|!(oyZYc;udG7dh^kcCpksORgSo_`z0ix2H)LgL@MS zXzF)S0ype*6Wn@+_e<(pt{9Xn=4?OCQ8$bi%Z^)8w`$_3fkjQSqZb`#Y6P4SOFN0( zXN>}4+gbCT>ftEcy>wv@VH(#E!L30W0$S#%f?I<}-L5Kdqe7~}jRZ-%sR`T&kj>!| z$Y;yOQ5fIeO`Y2&r^%rgBs8UHRslJ+ON((DT(Vu84&j=Hh;m7t;l_zXX$EnHO4n&> zg>&^db)0$+ZvQcoy0jP9?YA#yZwsJYPIzl+1vp^*N4K^RT82P*qzy)L^r8n$kT{LS zXoI1tCm9azh^wbG8m_<;EHlrtK{ZT)avTBffk{9iaT<$DfCv}@s-YRmkpjji&HsB0 zN|ad~pQcagHEMIh@iap97^8Y!2QGjIcm=!yUIDMb6)Nxp(>HXPYj|0e00000NkvXX Hu0mjfm+1Ks literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_tab_icon_history.png b/res/screen-density-xhigh/I01_tab_icon_history.png new file mode 100644 index 0000000000000000000000000000000000000000..bcee66e6c772be8d45e1b00a8c49b67b3d08f3df GIT binary patch literal 804 zcmV+<1Ka$GP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE;UJt{NMlp0)0tD zK~!i%?OEGx!!QiY2pz#AbcBqM5i&wY@Y?=r#lkLJhsU=aH&p?nKq8Sm@_3@0%ccMI z4D<~247@@HrfGU>&y}7(kEemSjpO*~d1%k6fm3BXfTXpjs&XZ;E$F8LrJky)m}ZB3 z9ZFwo)u^x9Goaw;J8QolR?X(F_zdaNG&~Cwz$sL}lx+3Lv5?#p(uG$@fZt zh^ignIs<^7gF8#}hUyA7djoT>+G)y3aunR$HxGA3&pF8XW&qmtp|byu0!T5Ni}3FN zdM6j-F=3|^Q<_u}qJuG_h%l_*&9vGqts0 zg>Mo_X=_PrmG?m@SPrCAK~5h+_d!Hc3dkx1)^%ia3B3Kk2?GP$yH-CB>(B%eHkjO4 z{!T`yVrq_z;N+-jQC!s*5&})>RKt!1TX zS8eh6@ef&-d19M!+3jHD#u}MnLQ`otVoLTqvoappIoK91J_ZjVO02+T|g2 i3q1op13d#To`EmdmK`t-$M&880000f literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_title_btn.9.png b/res/screen-density-xhigh/I01_title_btn.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8af29113cc0e11adc1e81e1c17f37f628bd084c1 GIT binary patch literal 348 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_title_btn_icon_down_disabled.png b/res/screen-density-xhigh/I01_title_btn_icon_down_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e091a68e5e37a727e348caad833a30e241ccfd GIT binary patch literal 3304 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 K=d#Wzp$P!WqxkIr literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_title_btn_icon_up.png b/res/screen-density-xhigh/I01_title_btn_icon_up.png new file mode 100644 index 0000000000000000000000000000000000000000..38fed5b3258bf4552173b368e618de28b3f52b09 GIT binary patch literal 3184 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 Ic=yY;+$h;B{Ry1W6MF-G0Qk~$UKQ` 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 Z{_ZR5`G7ZeIDZeo7-p_tbKCX#{{T7oB(wkk literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_title_btn_icon_up_pressed.png b/res/screen-density-xhigh/I01_title_btn_icon_up_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..23228bf8d1bdc37aec54718d2a553ebaeb2e17e3 GIT binary patch literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^9zg8J!3HFow**81DVAa<&kznEsNqQIU|?X}@9E+g zQZeW4&HY}714P(9Wb4SVxXL?Nl@=8V%@J|@#JA4LZ2mFb{7Yxu3yKQM!bP4i_v-Bp zaJqfu%b(59tZk$K35)#N_HefdBewTbxWmhB5fh}uhKR^07S+KJ6o#xUh zWs9Uw=)JeEpElqA&fDHa+m&`TP6=Wvxb}Q2$Ko4H%c?dRF43@YWXLn$Q~vnoX|09U zED8J9%>M2>e`fg6#*UhbuUEu&IlOjTty^^EkQ>i|D~~qcI#jkSziQJ8kyaIs14kR) z&x!tWNi`+>->i8$O0MrXZ<6$)p8}$E#eZyQvcPCfZrz*N?-&{mZ_10)U2nL)OIfgT z^Q!z^4q=P0rdejCDL<s5mmL(|uJI^ZC@Gb-z|I-_U*i%zJm9 z{O46OI!g`L5J8WFd9bJ&Xm-s(S3}-i|nVhL&0Y)u@r>mdKI;Vst E0C(H%GXMYp literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_title_btn_press.9.png b/res/screen-density-xhigh/I01_title_btn_press.9.png new file mode 100644 index 0000000000000000000000000000000000000000..753b7b249fa91907b59292bbd1c3a757715c0b73 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0zmAFVdQ&MBb@01-oc Axc~qF literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_title_font_bg.png b/res/screen-density-xhigh/I01_title_font_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..2dcabf2bbf364c7969dfa9e88bcce4a19b5204c5 GIT binary patch literal 1899 zcmeAS@N?(olHy`uVBq!ia0y~yV7dTg7jQ5GNd~U%nLv`UILO_JVcj{Imp~3nx}&cn z1H;CC?mvmFK)ynLqiJ#!!Mvv!wUw6QUeBtR|yOZRx=nF#0%!^3bbKh zU}gyL32_A}XlMYEqhK@yMqmiEv&aeq^Atl#kYDiskqsDvzq6|XlYmr-YeY$Kep*R+ zVo@qXKw@TIiJqTph(ejMo~fRpfx(xeg}`!YwWo_?NJZS+YmRp&YLUu;%43beSBXE9@clu+10#w z-Z)S0pZ>+m<@|r`E?hp$YFwlMDe4Ng2%kbsL2Z#RfKP3z=er~H5wypnq zf!pCcKmV7S zvAmf2urY4sP42y+pWjA)xph&Pzj9%D7<<+7^#2Q|SJhQ5+O9XR@;LY2t-t^F-rH6F zLUzISHukEenG3?R{@Hxet$KTBVS7WIwA_o{RgL#De*OkZF3esa?zM0JhxX)sISZa! j*TpbYff;3q8yop2|DEk1bS@+VRK9t-`njxgN@xNAWPwd< literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_title_progress_bar.png b/res/screen-density-xhigh/I01_title_progress_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..4250944968bbee250c02cf9963486db7aafd5e6e GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!3HE3cV7<&2^0spJ29*~C-V}>VM%xNb!1@J z*w6hZkrl{SNcITwWnidMV_;}#VPNhJyShX&#pfYfQsBbT^vIs!WnHC4*zE`Uj5}i zgTcyA{~2_az5makzWB|52Bifr{xitTdGen@Y{rBC41!bc{Ab{qc;i0VM%xNb!1@J z*w6hZkrl{SNcITwWnidMV_;}#VPNhJyShX&#pfYfQke>T^vIs!jmI*7Co(J`^3SZ X`A2!DPVB7!pd5pztDnm{r-UW|ArCNc literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_bg_01.png b/res/screen-density-xhigh/I01_toolbar_bg_01.png new file mode 100644 index 0000000000000000000000000000000000000000..dd422294c88b7f0d92815b29c2b8e196e1e42ca6 GIT binary patch literal 2852 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 KMNUMnLSTaTZ?`}I literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_forward_press_web.png b/res/screen-density-xhigh/I01_toolbar_icon_forward_press_web.png new file mode 100644 index 0000000000000000000000000000000000000000..09fd4fe2ff5b563a87f1aa3e86d07408f9d689fb GIT binary patch literal 3900 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 KMNUMnLSTX)NMo@8 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_forward_web.png b/res/screen-density-xhigh/I01_toolbar_icon_forward_web.png new file mode 100644 index 0000000000000000000000000000000000000000..bc944cc3c21cdcfaa9fd3b70dc36a8fa562296d8 GIT binary patch literal 3764 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_01_press.png b/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_01_press.png new file mode 100644 index 0000000000000000000000000000000000000000..a41bc96452131652cf6e3ab76fa674af5fe274f5 GIT binary patch literal 4005 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_02_press.png b/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_02_press.png new file mode 100644 index 0000000000000000000000000000000000000000..f92c5a80aa1c2086562866e0b50edc783f0dd8d7 GIT binary patch literal 4734 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_03_press.png b/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_03_press.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba95d69764aad7f4f23aca4fe701745cae76b55 GIT binary patch literal 4983 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 BO&0(F literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_04.png b/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_04.png new file mode 100644 index 0000000000000000000000000000000000000000..d69f799ecb7abfd1fa1019765c213b7776c85bf9 GIT binary patch literal 4261 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_05.png b/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_05.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd80e6663792ae76a516676538d89c168e5dce8 GIT binary patch literal 4665 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 LNkvXXu0mjfU>yFZ literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_06_press.png b/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_06_press.png new file mode 100644 index 0000000000000000000000000000000000000000..d18ab689f0596c964bde8eb6b8bf16cc0d7f3539 GIT binary patch literal 4953 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 XE<=t<{qxo800000NkvXXu0mjfARto# literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_07.png b/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_07.png new file mode 100644 index 0000000000000000000000000000000000000000..09e822de0d49f8b92d8ddef15e3ff5bff5ddc07a GIT binary patch literal 4203 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 B*g60J literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_07_press.png b/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_07_press.png new file mode 100644 index 0000000000000000000000000000000000000000..504af6b0952a00be940140f2c49906d887d06cb9 GIT binary patch literal 4346 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_08.png b/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_08.png new file mode 100644 index 0000000000000000000000000000000000000000..f7196b7ffeed860b58e7d2465c7ca71c5b4f5669 GIT binary patch literal 4863 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 IM6N<$g1a7Z=>Px# literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_09.png b/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_09.png new file mode 100644 index 0000000000000000000000000000000000000000..8cade2cc8aac5b8a242c13c964bde011545eb314 GIT binary patch literal 4788 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 QZvX%Q07*qoM6N<$f}7PeL;wH) literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_empty.png b/res/screen-density-xhigh/I01_toolbar_icon_windows_manager_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..87a858006deebb12cf90a53e97bbb5a63ccd83ab GIT binary patch literal 3667 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_input_field.#.png b/res/screen-density-xhigh/I01_toolbar_input_field.#.png new file mode 100644 index 0000000000000000000000000000000000000000..fac478dd02e489d6a7c3c78e6934f29c6183277b GIT binary patch literal 1918 zcmV-^2Z8vBP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy8FWQhbW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE;UJt{NMlp2G>bM zK~#8N?VMRlBU=!F@BJ74R0UssQcxd6!3Q^79z?+v6%2x}2O}aDC%uM<$RbSVsQ)m76F|pP%ye^%eE-o4zM4dB{r{KPj^@rk|+r`uf^Hd4GSG=jUhH+uM`5xj7je z9F)4cI;pR(m*V1LDJ(3MqM{=6@Na(O9cf5Q9`aHKWl<(&|AY>{fx5W3kjKYIV<{*y zFfbsMm6cLbQXu-IVn3kJLYSn^vB0X z9FSN*$^K6nltr18O&!!loz#sCnFf|NC>-mhB1BZ$&y(|Cf`#hbt40^AQQ4tN4iem zGpM_}JHdxw@=Z-mMj)EPZvcvgjSR?wOvr|e$coHf{gx+Cm@`ePwzgLK`}<9o?ROJP z)$+7SA{#OyD>5Rx7g#BQIz2r#-SF}8vFWDA$Hz_kx9hP|Rm`vS$cBu_ip5THI-pA`PTn;r3SL-PkjBPFSzli_ zCY%e9tgw(7+0g-A(8;Y;xdKIj+uPgH+}v#brmg#J1%8!}>{eae!b%E?Xcy`Y4Gprj zwUyJ56h5%f1)b1Mb#$^WM^KE^>1rvEU@n&}Db_;KWo>QEG(&VmS5Khm6)2ntm%%C2 z{b~-sRW3TA8#*F`lXFjKQR?^@p%d-qlH+y@9-YvQDI8jiQ;cN`N(Z>Dt*vr!aA4+s z+*Y1z>Cg=w+uGV32hz5n7)*|gjF=%nko;1jkBE-wiq7b6=d0pCVNDDmySuy1cq!K` z#H+mMiq7b6H=h*;3ZkQ?nUC|lc?W`&aluq9=rvuegE6ert=#1`m z)5=kxNWgfA9w1ECq#qca(H#b{5qlIUGW7QLns_4Dt;4JQ=nez&Tb+6Y6i)2?{9LA{ zrb5xvIrV@rfQ5BdGy+Oz2bio6VsPo!!q6QCtRWIMs8vNk5qJ#`4~M$hDNH&wVk($K zfx^sQUS7;BU>E|-WYz@(Sil4}ktKBfpm%SJXpDU&E?9@eQ9r>4i!dz3S0BSX;E?Y#DOnh$5r@_STx zK)^|49>ldfufSlT+Xo^|k0H$d{(e5-wD>3j&cnmQ=phUPKOH4|{Q^PDhZS93UPcd! zb($qVDE>6Adp@>N2Ys`vZWZ^meOi~3^{`+NgHYW*oz{kY z?H-xH(#NlE`M1io>gIH6Au@57ED>EMW1k@TD|A7pj2#+Mh#Ff30Tw#YySatr+M?9C z2f?zemgLL9MquetS%Bs0!A4~F^{A}Xj{%9EBG-<}BJ++OAx=$iiD^DkV(hDNeDcoz`|MyI~z7E7|J*njT1A0YYV#>$i7XSbN07*qoM6N<$ Ef<8lecK`qY literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_input_field_findword.#.png b/res/screen-density-xhigh/I01_toolbar_input_field_findword.#.png new file mode 100644 index 0000000000000000000000000000000000000000..7763c30a2febc49c75b57549518b0f2199b52649 GIT binary patch literal 1921 zcmV-{2Y&d8P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*!E z0uVdc^VK2%00#j{L_t(&-rbsAY#Uh_hTk(Y_RKhmhcIMHHmzD(wQd4Vvr41VRHm!^ z|5R%^2w;2L;{nOlNcTz#?;gl>gwudBaz5gjvYHTG%+zDHZ(M( zw;hNvM#jg-9kE#Kqp`8ELk$fL=;-Kx*XxDL|n3eYYnJde|-PouuR94j(?eW3Ci(Yh+{u*RNkkS69~`y1To-Q3yyV z1QUzJ(AL(rjFmUhG zsZ&C8bMvmiWF?9sjvhUVii!%{xN+lGvMfg#W3lz1xDD0~>+S759}b7ZEiEm(3X>1j z($a!(IE*`Y?tB1%TUb~qF9?(k0#~kFDR;Zwe{64Whr{7OvB=?YpuN2vilTU~UAy+} znwlDoG3F@f5CBY0PX6xX$&85GgUqhkLj^~+I5zq4og+j0_>-gB%*e}-2 zL;d~zyxZ+=l_Y8C$dMyO4U|p14<0;#uIp%RZLO%Stxe?|VvIS?o;}MZCntZ|*w|R~ zFj&8=?sG7g91yvO4~sj0TM7J?w)?%liJ%mGEC(fxuT zG)t0HazK(KK@>$$N`H_8N~hEB34)NT{Yyz4$7M_W1Nm#HT@=Mq2U?q0^S>-Loq?v*%J%CX)fB)adN&d_M=&+uJ)YNm5Ex)sh2J zRTZKr{waF`lq>L($z;#;^mJb!5Ga{^WZO34@i@F*Z$MF$j|m}^%LDqr>2yNZ^^$Q% z*L66Z&Iv_Po@IMVIUv8^|B1`x`g+63Ui^be8I<#(oh%rWHW@aAo zJpYBNs;Z&_dj9-5Y}>B#dcB`)s{4?2%Io#EQcC9%i9}IsT5a1#B9Q=N?7~Jc8v?CD ztr&*!^;L^^9VnGb!LqDAkH>SVPzSHz7CR6K+)AZV-=&n!CX>lsSyPr}A(>3Vw(a-o z>gwKp+4Gy~f-fyCwGl$100fuI_1bzymSsWLbr3=>?cKZg!e+YQn<|2;tE>O1X<8$t z^xw&35{6;y=(@6P8-`&ZnM^WD>9;luvuTI&q8~RqJNreB z0ZJ)M)BHG-$wWLJ&-1NZYWh@{ml$K*)YQ~Z%F4>#v2FV^k|e?DbmmTBK1~U2nkH6O zRv-w%Tq>3NzR%}-KO1qk^1fHPjn&`Z&v$lqe!jfC{A1OcBAn>DA*VhrsKf700000NkvXX Hu0mjf0J@$H literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/I01_toolbar_input_field_findwordbkp.#.png b/res/screen-density-xhigh/I01_toolbar_input_field_findwordbkp.#.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b2e740f4ccc3bf86ae68a40c21bb1849a0c81f GIT binary patch literal 1754 zcmV<01||84P)xNkM%O1s_Zp9z?;23W}(RS5p&LAt$TlcPU+09yR$p)oSm=- zhI`%VuCDK!>guZMo+&8s=Rf&hEw1SPJ3Bj*o0}WCzrUBKrzd%ReKl7s7L(78<%wISvG{av1)pJi`vPv++4WN>g$>gwvGzP?_Hi;JbOuuzJMip<6T z^BebQLtFaL7a7PxCb9!f+Qr3%JU%`eOF20?k%55$sjRG&l9CdsuCA7rmKN#i>XMLDzP-H}z}Ac3bjs0|KJ-NfvXF^v#$YUDF*a>|OPCULdwVM# z9UW3yS}N`B?J_wzDLXqm=4k`^iVF&P^j&;^~)E$7Z3M+yLZOGQP6^z`(|#>R#*eO<|% ztRtKE8I!Tm0bS4u-54WhPXF%iPVga^d{a}CQHZIK3xeXwMhA33Cv-zcbVcWX>bo#! zrc`Zht@QWzn6An_bVOHlM0d~0Iz2r#%kc5>v00|a$H&e5|7pd_6qr}- z(G4BZ6`j!?3}EquFa~3Qm6a8#si~3q`FXRtWMdWciX@ebj_8Wc=ne+3c;e&{ys)q! zjg5`6zP@fuI0z(J$wFsz2Lo8ZlvS%j;P&>mG&eV!|1#ITwgRu@qq`ML*2p5-B_eKU zXppU~tw58crk*)LCi~NH7;zsCgT`O6WrF;RyjC0Ftwj_2M=01 zuz|6ytu6CJnq+chWW=NZVe(7K9wHdQ3TCjU<*TqJ63FiEZj&zs%|hJj3sx|LJ*|2c zjE;_unhe|z39eh)4i@zGUR|<(A(Q<;)$SJhg>(01Bv=)J*YNOgq^F&d$)ZL~1t&J5FteAJ7gGg{LV)RHU2p&wZ~`}9WRW>j zZouP5dD>Zvd~g9LwyFZj;O6G0*@bmtJ1Y0#f&!ndRz)OAuA}?-Q6VE0PPkZFTCzKI z0bNk@6sApUGaNw|)U-7Qjz zF*PhIiuqkKi-QX|`J2iZvdkasbLB&WZ;OHpII$8{z>mwz%Xy+K2idHg*qnJ(ODn0S z9$W7=XU;)}u%+1s4fr7Um${ojIA0rDBEyxJW46K@?sd zKb22oVul0dBB2yassLu6L6NR&x!q7Zc7-rq`8Y-$_QS4v zRNU3^X~@z8`C&gk{i_4{It?jc>E*P%2JOBTn`1bTP6L)qtSe0Z3M^pC+Dk)9q{dcZ zAPWq*ldO}Z&OHp4Wwj*N&f94k>Z`I47StCT(cRNmW#eNkR*Im#DvQppVkIXFN_C%C z*6W!lfPpZE9$q}9$O8LRMth)H( zlOt9Fd1BOY$i5*g7nKJk2p!NR=T?-;!t|v`b@pC=VMD)|p%2IR1jUnQ{m_>BifoZ) zB}aXu;~P<4`JQabwSKyd=>aHKATIsT)=w1*{X83Ov^{;15t>i8B_o=;PyELK0UrM$ wK>eG0Ok*rZKL%)fn;@G{G=Q>v_j$?x05MN1NmxR=_W%F@07*qoM6N<$f?@ke-~a#s literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/ListIcon.png b/res/screen-density-xhigh/ListIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e42b8ae511a14676c3299cb418b789ec1f5100 GIT binary patch literal 3268 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/Notification_download_failed.png b/res/screen-density-xhigh/Notification_download_failed.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2e56fe458495c04f3f73a6ec01ef6b37893a23 GIT binary patch literal 4092 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 literal 0 HcmV?d00001 diff --git a/res/screen-density-xhigh/Thumbs.db b/res/screen-density-xhigh/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..66412b36ae74dfc1d6a53a3e2cef70cfbd4d916f GIT binary patch literal 224366 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
+ + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/screen-size-normal/IDL_ARTICLE_READER.xml b/res/screen-size-normal/IDL_ARTICLE_READER.xml new file mode 100644 index 0000000..bcf4331 --- /dev/null +++ b/res/screen-size-normal/IDL_ARTICLE_READER.xml @@ -0,0 +1,27 @@ + + + + 720 + + + + + + + + + diff --git a/res/screen-size-normal/IDL_ARTICLE_READER_FORM.xml b/res/screen-size-normal/IDL_ARTICLE_READER_FORM.xml new file mode 100644 index 0000000..6c8cb4e --- /dev/null +++ b/res/screen-size-normal/IDL_ARTICLE_READER_FORM.xml @@ -0,0 +1,39 @@ + + + + + + 720 +
+ + + + + + + + + + + + + +
diff --git a/res/screen-size-normal/IDL_BLANK_PANEL.xml b/res/screen-size-normal/IDL_BLANK_PANEL.xml new file mode 100644 index 0000000..39064a7 --- /dev/null +++ b/res/screen-size-normal/IDL_BLANK_PANEL.xml @@ -0,0 +1,12 @@ + + + + 720 + + + + + + diff --git a/res/screen-size-normal/IDL_BOOKMARK_LIST.xml b/res/screen-size-normal/IDL_BOOKMARK_LIST.xml new file mode 100644 index 0000000..2654501 --- /dev/null +++ b/res/screen-size-normal/IDL_BOOKMARK_LIST.xml @@ -0,0 +1,36 @@ + + + + + + 480 +
+ + + + +
+ + + + + + +
+
+ + +
+ + + + + + + + + + +
diff --git a/res/screen-size-normal/IDL_BRIGHTNESS.xml b/res/screen-size-normal/IDL_BRIGHTNESS.xml new file mode 100644 index 0000000..6bbcaa7 --- /dev/null +++ b/res/screen-size-normal/IDL_BRIGHTNESS.xml @@ -0,0 +1,35 @@ + + + + + + 720 +
+ + + + +
+ + + + + +
+
+ + +
+ + + + + + +
diff --git a/res/screen-size-normal/IDL_CONFIRMATION_POPUP.xml b/res/screen-size-normal/IDL_CONFIRMATION_POPUP.xml new file mode 100644 index 0000000..d8f4b59 --- /dev/null +++ b/res/screen-size-normal/IDL_CONFIRMATION_POPUP.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + diff --git a/res/screen-size-normal/IDL_CREATE_BOOKMARK_FOLDER.xml b/res/screen-size-normal/IDL_CREATE_BOOKMARK_FOLDER.xml new file mode 100644 index 0000000..5310600 --- /dev/null +++ b/res/screen-size-normal/IDL_CREATE_BOOKMARK_FOLDER.xml @@ -0,0 +1,36 @@ + + + + + + 720 +
+ + + + +
+ + + + + +
+ + + + + + + +
diff --git a/res/screen-size-normal/IDL_EDIT_BOOKMARK_LIST.xml b/res/screen-size-normal/IDL_EDIT_BOOKMARK_LIST.xml new file mode 100644 index 0000000..87a9a4b --- /dev/null +++ b/res/screen-size-normal/IDL_EDIT_BOOKMARK_LIST.xml @@ -0,0 +1,44 @@ + + + + + + 720 +
+ + + + +
+ + + + +
+
+ + +
+ + + + + + + + + + + + + + + + +
diff --git a/res/screen-size-normal/IDL_EDIT_HISTORY_LIST.xml b/res/screen-size-normal/IDL_EDIT_HISTORY_LIST.xml new file mode 100644 index 0000000..5a3762b --- /dev/null +++ b/res/screen-size-normal/IDL_EDIT_HISTORY_LIST.xml @@ -0,0 +1,40 @@ + + + + + + 720 +
+ + + + +
+ + + + + +
+
+ + +
+ + + + + + + + + + + +
diff --git a/res/screen-size-normal/IDL_EDIT_HOME_PAGE.xml b/res/screen-size-normal/IDL_EDIT_HOME_PAGE.xml new file mode 100644 index 0000000..6fc40d0 --- /dev/null +++ b/res/screen-size-normal/IDL_EDIT_HOME_PAGE.xml @@ -0,0 +1,36 @@ + + + + + + 720 +
+ + + + +
+ + + + + +
+ + + + + + + +
diff --git a/res/screen-size-normal/IDL_FIND_ON_PAGE.xml b/res/screen-size-normal/IDL_FIND_ON_PAGE.xml new file mode 100644 index 0000000..57aa47a --- /dev/null +++ b/res/screen-size-normal/IDL_FIND_ON_PAGE.xml @@ -0,0 +1,84 @@ + + + + + + 720 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/screen-size-normal/IDL_FONT_SIZE.xml b/res/screen-size-normal/IDL_FONT_SIZE.xml new file mode 100644 index 0000000..71f8758 --- /dev/null +++ b/res/screen-size-normal/IDL_FONT_SIZE.xml @@ -0,0 +1,27 @@ + + + + + + 720 +
+ + + + +
+ + +
+
+ + +
+ + + + + +
diff --git a/res/screen-size-normal/IDL_FORM.xml b/res/screen-size-normal/IDL_FORM.xml new file mode 100644 index 0000000..511350a --- /dev/null +++ b/res/screen-size-normal/IDL_FORM.xml @@ -0,0 +1,84 @@ + + + + + + 720 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/res/screen-size-normal/IDL_HISTORY_LIST.xml b/res/screen-size-normal/IDL_HISTORY_LIST.xml new file mode 100644 index 0000000..29ae945 --- /dev/null +++ b/res/screen-size-normal/IDL_HISTORY_LIST.xml @@ -0,0 +1,34 @@ + + + + + + 480 +
+ + + + +
+ + + + +
+
+ + +
+ + + + + + + + + + +
diff --git a/res/screen-size-normal/IDL_MULTIPLE_WINDOW.xml b/res/screen-size-normal/IDL_MULTIPLE_WINDOW.xml new file mode 100644 index 0000000..1c3b694 --- /dev/null +++ b/res/screen-size-normal/IDL_MULTIPLE_WINDOW.xml @@ -0,0 +1,27 @@ + + + + + + 720 +
+ + + + +
+ + +
+
+ + +
+ + + + + +
diff --git a/res/screen-size-normal/IDL_NOTIFICATION_PANEL.xml b/res/screen-size-normal/IDL_NOTIFICATION_PANEL.xml new file mode 100644 index 0000000..3f59b87 --- /dev/null +++ b/res/screen-size-normal/IDL_NOTIFICATION_PANEL.xml @@ -0,0 +1,17 @@ + + + + 720 + + + + + + + diff --git a/res/screen-size-normal/IDL_READER.xml b/res/screen-size-normal/IDL_READER.xml new file mode 100644 index 0000000..9c058da --- /dev/null +++ b/res/screen-size-normal/IDL_READER.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + diff --git a/res/screen-size-normal/IDL_SETTINGS.xml b/res/screen-size-normal/IDL_SETTINGS.xml new file mode 100644 index 0000000..1ff2a36 --- /dev/null +++ b/res/screen-size-normal/IDL_SETTINGS.xml @@ -0,0 +1,21 @@ + + + + + 480 +
+ + + + +
+ + +
+
+ + +
+
diff --git a/res/screen-size-normal/IDL_SETTINGS_CLEAR_PRIVATE_DATA.xml b/res/screen-size-normal/IDL_SETTINGS_CLEAR_PRIVATE_DATA.xml new file mode 100644 index 0000000..24bf0a4 --- /dev/null +++ b/res/screen-size-normal/IDL_SETTINGS_CLEAR_PRIVATE_DATA.xml @@ -0,0 +1,27 @@ + + + + + + 720 +
+ + + + +
+ + +
+
+ + +
+ + + + + +
diff --git a/res/screen-size-normal/IDL_SETTING_FORM.xml b/res/screen-size-normal/IDL_SETTING_FORM.xml new file mode 100644 index 0000000..b4fb55e --- /dev/null +++ b/res/screen-size-normal/IDL_SETTING_FORM.xml @@ -0,0 +1,23 @@ + + + + + + 720 +
+ + + + +
+ + +
+ + + + + +
diff --git a/res/screen-size-normal/IDL_SHARE_POPUP.xml b/res/screen-size-normal/IDL_SHARE_POPUP.xml new file mode 100644 index 0000000..621b795 --- /dev/null +++ b/res/screen-size-normal/IDL_SHARE_POPUP.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/res/slk-SK.xml b/res/slk-SK.xml new file mode 100644 index 0000000..d6d74a4 --- /dev/null +++ b/res/slk-SK.xml @@ -0,0 +1,345 @@ + + + + Webové oznámenie + Presunúť + Nenašli sa žiadne výsledky + Nov. + Vložiť + Nastavenia obsahu stránok + Rozšírené nastavenia pre jednotlivé webové lokality + Používateľská domovská stránka + SPRÁVCA OKIEN + Automaticky + Vymazať históriu + Aktuálna stránka + Zatvorenie všetkých otvorených okien a prechod na domovskú stránku + Prijať súbory cookie + Zdieľať + Čínština (GBK) + Latin-1 (ISO-8859-1) + Vývojársky režim + Jún + Načítať obrázky + Hotovo + Nastavenia + Gigantická + Problém s dátovým spojením + Aug. + Nastaviť aktuálnu stránku ako domovskú stránku + Nastavenia + Odstrániť + Japončina (SHIFT JIS) + Uložené ID a heslo + Otvoriť + Už sa nepýtať + Uložiť na čítanie offline + Pridať Livbox + Júl + Vytvoriť priečinok + Pridať + Vysoká + Uložiť mená používateľov a heslá pre webové lokality + Japončina (EUC-JP) + Správca sťahovaní + Apríl + Čínština (Big5) + Veľké + Nastavenia webovej lokality + Zavrieť všetko + Vybrať položky + Vybrať všetky + Načítať znova + Prejsť dozadu + Vymazať históriu? + Žiadne položky + PRIEČINOK + Prispôsobený používateľský agent + Zobrazenie pracovnej plochy + Sep. + Kop. adr. odk. + Otv. na novej str. + St + Žiadne záložky + Pridať značku + Zobr. obrázok + Odoslať cez e-mail + Nie je povolené!! + Zobraziť prehľad novo otvorených stránok + Veľké + Picasa + Zobrazenie miniatúr + Hľadať na str. + Heslo + Názov + Kódovanie textu + Odstránené + Nastavenia + 1 vybratá položka + Minimalizovať + Značky + Zapnúť výber textu + Nový priečinok + Pridané do záložiek + Povoliť + Čitateľný + Zobraziť obrázky + Automaticky + Okt. + Port proxy servera + Upraviť + Odstrániť históriu prehliadača? + Zadajte názov priečinka + Odoslať cez správu + Zobr. podľa + Ut + Po + Viac okien + Už existuje + Kopírovať adresu URL + Zapamätať predvoľbu + Vymazať prístup k umiestneniu + Odstrániť všetky súbory cookie? + Odstrániť všetky uložené údaje formulárov? + Chyba siete + Zastaviť + Hľadať na str. + Žiadne navštívené lokality + So + Stiahnuť + Pridať záložku + Odstrániť obsah a databázy uložené do lokálnej vyrovnávacej pamäte? + Nepodarilo sa + Zavrieť okno + Stredná + Minulý týždeň + Nemožno zobraziť webovú stránku. Žiadna odpoveď zo servera + Vymazať záložku + Pridať do ozd. albumu + Staršie + Predch. + Ďalšie + Presunúť + Včera + Režim výberu + Bez značky + Vytvorené + Vložte SIM kartu + Záložka bola odstránená + Vymazať nastavenia povolení pre webové oznámenia + Zdieľať prepojenie + Nastaviť text pre automatické vypĺňanie webových formulárov + OK + Malé + Kopírovať obrázok + Zabezpečené pripojenie + Údaje formulára + Najviac navštevov. + Vybrať + Priečinok + Nedá sa otvoriť nové okno. Už je otvorený maximálny počet okien + Povoliť lokalitám spúšťať kód v jazyku JavaScript + Automatické obnovenie + Nové okno + Nie + Umožňuje lokalitám ukladať a čítať údaje súborov „cookie“ + Dvojitým ťuknutím môžete zavrieť panel. + Prehrať + Dosiahol sa maximálny počet značiek (%d) + Načítava sa. Počkajte, prosím... + Zrušiť + Mobilné dátové pripojenie je zakázané. Pripojte sa použitím siete Wi-Fi alebo povoľte mobilné dátové pripojenie + Súbory cookie + Prázdna strana + Hľadať + Feb. + Vypnúť súkromný režim + Vymazať vyrovnávaciu pamäť + Heslo + Užívateľské meno + Môžete si jednoducho prehliadať počítačové webové lokality pomocou mobilného zariadenia. Táto funkcia zväčšuje text, aby sa dal ľahšie čítať. Poznámka: Rozloženie textu sa môže zmeniť + UPRAVIŤ ZÁLOŽKY + Vymazať uložené údaje + Odstrániť všetky údaje o webových lokalitách a lokalizačné povolenia? + Vybrať všetky + Nikdy + Vybrať priečinok + Naposledy zobrazená stránka + Vývojárske možnosti + Zdrojový jazyk + Záložky + Vymazať + Dnes + Áno + Vložiť + Ďalej + Nedá sa pridať na domovskú obrazovku. Táto webová lokalita neumožňuje zobrazenie jej ukážky + Agent používateľa + Neočakávané zlyhanie + Vymazať povolenia pre webové oznámenia? + Ne + Uložené + Dvojitým ťuknutím môžete otvoriť webovú stránku. + Ďalšie inf. o web. stránke + Normál. + Vybraté položky: %d + Pridať do priečinka Záložky + Zobr. obrázok + Spúšťa sa sťahovanie... + Prázdny + Záložky + Veľkosť písma + Prejsť dopredu + Are you sure you want to clear history? + Vymazať údaje všetkých súborov cookie + Internetová história nie je uložená + Vymazať údaje o prehliadaní + Japončina (ISO-2022-JP) + Kopírovať + Názov priečinka + Blokovať kontextové okná + Synchronizo-vané karty + Pridať na domovskú stránku + Uložiť + Neplatný certifikát + Režim utaj. identity + Jan. + Ochrana osobných údajov a zabezpečenie + Tlač + Vyskytli sa problémy s bezpečnostným certifikátom pre túto lokalitu + Jas + Odstrániť? + Veľkosť písma + Zistiť automaticky + Zapamätať údaje formulára + Odstrániť + Zruš. + Bezpečnostné upozornenie + Stiahnuť? + Hľadajte alebo zadajte adresu URL + Vymazať údaje formulára + Zapamätať heslá + Prejsť na históriu + Dnes + Odmietnuť + Súkromie + Obnoviť + Webový klip + Vymazať heslá + Nastaviť ako domovskú stránku + Zrušiť + Veľmi veľké + Odosiela sa notifikácia... + Google + Ostatných 7 dní + (bez značiek) + Vždy zapnuté + HISTÓRIA + Ešte jedným ťuknutím ukončíte aplikáciu Internet + Zadajte názov záložky + Vyžaduje sa overenie + Uložiť prepojenie + Už viac nezobrazovať + Kopírovať do schránky + Premenovať priečinok + Automaticky uložiť meno/heslo + Všetky nastavenia na predvolené. Pokračovať? + Mobilné + Vyberte záložky + Zavrieť + Malé + Obnoviť predvolené + Kórejčina (EUC-KR) + LTE/GSM/WCDMA (automatické pripojenie) + Premenovať značku + VYTVORIŤ PRIEČINOK + Domovská stránka + Neplatná adresa URL + Prispôsobiť na plochu + Menu + Adresa sa nenašla + Mobilné zobrazenie + Otvoriť v novom okne + E-mail + Odkaz bol vytvorený + Dátové pripojenie zlyhalo + Aut. vypĺňanie formulárov + Povoliť lokalitám žiadať o prístup k vášmu umiestneniu + Št + PREMENOVAŤ PRIEČINOK + Odstránené zo záložiek + Záložka + Otvoriť str. v prehľade + Prispôsobiť na šírku + Júl + Dátová sieť + Unicode (UTF-8) + Záložka je pridaná + História + Minulý mesiac + Hotovo + Upraviť záložku + Vymazať všetky uložené heslá? + Zoznam + Pridať medzi záložky + Máj + Politika zabezpečenia obmedzuje použitie internetového prehliadača + Mar. + URL + Záložka sa nedá pridať. Dosiahol sa maximálny počet záložiek + Vždy sa pýtať + Uložiť stránku + Vybrať slovo + Zobraziť bezpečnostné upozornenia + Vytvoriť priečinok + Odstrániť všetko + Odstrániť vybraté záložky? + Vymazať prispôsobené údaje + Vymazať všetky údaje prehliadača a obnoviť všetky nastavenia na predvolené + Zobraziť obrázky na webových stránkach + Slovník + Predvolené zobrazenie + Zoradiť podľa značky + Inštalovať webovú aplikáciu + O prehliadači + Zapnúť súkromný režim + Ozdobný album + Vyhľadávací nástroj + Zapamätať údaje zadané do formulárov na neskoršie použitie + Žiadny názov + Pred %d týždňami + Pridať na úvodnú obrazovku + Povoliť umiestnenie + Zadajte adresu URL + Ručne + Žiadna história + Spustiť JavaScript + %s žiada o vaše umiestnenie + Pi + Verzia + Správa + Vyrovnávacia pamäť + Upraviť + Všeobecné + Uložené stránky + Povoliť zobrazenie oznámení pre %s + Blokovať kontextové okná na webových stránkach + Uložiť obrázok + Najnavštevovanejšie lokality + Včera + Zadať názov + Dec. + všetko odstránené + %d vybratá položka + Obrázok sa nedá uložiť + Správy + Zmeniť poradie + Autom. upraviť veľkosť textu + Odstrániť informácie o prístupe k umiestneniu webovej lokality? + Zobrazenie zoznamu + Premiestniť vybraté záložky? + Nedostatok pamäte + Nedostatok pamäte. Vymažte niektoré položky + diff --git a/res/slv-SI.xml b/res/slv-SI.xml new file mode 100644 index 0000000..db16708 --- /dev/null +++ b/res/slv-SI.xml @@ -0,0 +1,345 @@ + + + + Spletno obvestilo + Povleci + Ni najdenih rezultatov + Nov + Prilepi + Nastavitve vsebine strani + Zahtevnejše nastavitve za posamezna spletna mesta + Uporabnikova domača stran + UPRAVITELJ OKEN + Samodejno + Počisti zgodovino + Trenutna stran + Zaprite vsa odprta okna in pojdite na domačo stran + Sprejmi piškotke + Deli + Kitajščina (GBK) + Latinski-1 (ISO-8859-1) + Način za razvijalce + Junij + Naloži slike + Končano + Nastavitve + Ogromna + Težava s podatkovno povezavo + Avg + Nastavi trenutno stran kot domačo stran + Nastavitve + Izbriši + Japonščina (SHIFT JIS) + ID in geslo sta shranjena + Odpri + Ne vprašaj znova + Shrani za branje brez povezave + Dodaj Livebox + Julij + Ustvari mapo + Dodaj + Visoka + Shrani uporabniška imena in gesla za spletna mesta + Japonščina (EUC-JP) + Upravitelj prenosov + April + Kitajščina (Big5) + Velika + Nastavitve spletnega mesta + Zapri vse + Izberi elemente + Izberi vse + Ponovno naloži + Pojdi nazaj + Počistim zgodovino? + Ni predmetov + MAPA + Agent uporabnika po meri + Pogled namizja + Sep + Kopiraj URL + Odpri na novi str. + Sre + Ni zaznamkov + Dodajanje oznake + Prikaži sliko + Pošlji preko e-pošte + Ni dovoljeno + Prikaži pregled na novo odprtih strani + Velika + Picasa + Prikaz sličice + Najdi na strani + Geslo + Naslov + Kodiranje besedila + Izbrisano + Nastavitve + 1 predmet je izbran + Pomanjšaj + Oznake + Izbira besedila vključena + Nova mapa + Dodano med zaznamke + Dovoli + Čitljivo + Prikaži slike + Samodejno + Okt + Vrata strežnika proxy + Uredi + Želite izbrisati zgodovino iskalnika? + Vnesite ime mape + Pošlji v sporočilu + Prik. po + Tor + Pon + Več oken + Že obstaja + Kopiraj URL + Zapomni si prednostne nastavitve + Počisti dostop do položaja + Izbrišem vse piškotke? + Želite izbrisati vse shranjene podatke obrazcev? + Napaka omrežja + Ustavi + Najdi na strani + Ni obiskanih strani + Sob + Naložim + Dodaj zaznamek + Želite izbrisati vsebino in podatkovne zbirke v lokalnem medpomnilniku? + Ni uspelo + Zapri okno + Srednja + Zadnji teden + Spletne strani ni mogoče prikazati. Strežnik se ne odziva + Izbriši zaznamek + Dodaj v album izrezkov + Staro + Nazaj + Več + Premakni + Včeraj + Način izbiranja + Brez oznake + Ustvarjeno + Vstavite kartico SIM + Zaznamek je odstranjen + Nastavitve za odstranitev dovoljenja za spletna obvestila + Souporaba povezave + Nastavite besedilo za samodejno izpolnjev. spletnih obrazcev + V redu + Majhna + Kopiraj sliko + Varna povezava + Podatki obrazcev + Največkrat obiskano + Izberi + Mapa + Ni mogoče odpreti novega okna. Odprto je že največje mogoče število oken + Dovoli spletnim mestom, da zaženejo JavaScript + Samodejno osveževanje + Novo okno + Ne + Omogoča stranem, da shranijo in berejo podatke piškotkov + Dvakrat pritisnite, da zaprete vrstico. + Predvajaj + Doseženo je največje dovoljeno število oznak (%d) + Nalaganje. Počakajte ... + Prekliči + Mobilni podatki so onemogočeni. Povežite se z omrežjem Wi-Fi ali omogočite mobilne podatke + Piškotki + Prazna stran + Iskanje + Feb + Onemogoči zasebni način + Izprazni medpomnilnik + Geslo + Uporabniško ime + Spletna mesta za računalnike si lahko zdaj preprosto ogledate tudi z mobilnimi napravami. Ta funkcija poveča velikost besedila, da ga je lažje brati. Opomba: postavitev besedila se lahko spremeni + UREJANJE ZAZNAMKOV + Počisti shranjene podatke + Izbrišem vse podatke za spletno mesto in dovoljenja za položaj? + Izberi vse + Nikoli + Izberi mapo + Zadnja obiskana stran + Možnosti za razvijalce + Izvorni jezik + Zaznamki + Počisti + Danes + Da + Prilepi + Naprej + Ni mogoče dodati na domači zaslon. To spletno mesto ne omogoča predogleda + Uporabniški agent + Nepričakovana napaka + Želite odstraniti dovoljenja za spletna obvestila? + Ned + Shranjeno + Dvakrat pritisnite, da odprete spletno stran. + Dodat. podatki o spl. strani + Normalno + %d predmetov izbranih + Dodaj med zaznamke + Prikaži sliko + Začenjam prenos ... + Prazno + Zaznamki + Velikost pisave + Pojdi naprej + Are you sure you want to clear history? + Počisti vse podatke piškotkov + Spletna zgodovina ni shranjena + Izbriši iskane podatke + Japonščina (ISO-2022-JP) + Kopiraj + Ime mape + Blokiraj pojavna okna + Sinhroniz. zavihki + Dodajanje med domače + Shrani + Neveljaven certifikat + Način brez bel. zgod. + Jan + Zasebnost in varnost + Tiskanje + Za to spletno mesto obstajajo težave z varnostnim certifikatom + Svetlost + Izbriši? + Velikost pisave + Samodejno zaznavanje + Zapomni si podatke obrazcev + Izbriši + Prekliči + Varnostno opozorilo + Prenesem? + Poiščite ali vnesite URL + Počisti podatke obrazca + Zapomni si gesla + Pojdi na zgodovino + Danes + Zavrni + Zasebnost + Osveži + Spletni izrezek + Izbriši gesla + Nastavi kot domačo stran + Prekliči + Zelo velika + Obveščam ... + Google + Zadnjih 7 dni + (ni oznak) + Vedno vključeno + ZGODOVINA + Pritisnite še enkrat, da zaprete internet + Vnesite ime zaznamka + Potrebno je overjanje + Shrani povezavo + Nikoli več ne prikaži + Kopiraj v odložišče + Preimenuj mapo + Samodejno shrani ID/geslo + Vse nastavitve so nastavljene na privzeto. Nadaljujem? + Mobilni + Izberi zaznamke + Zapri + Majhna + Ponastavi na privzeto + Korejščina (EUC-KR) + LTE/GSM/WCDMA (samodejna povezava) + Preimenuj oznako + USTVARITE MAPO + Domača stran + Nepravilen URL + Pogled namizja + Meni + Ne najdem naslova URL + Mobilni pogled + Odpri v novem oknu + E-pošta + Bližnjica je ustvarjena + Podatkovna povezava ni uspela + Samodej. izpoln. obrazcev + Dovoli spletnim mestom, da zahtevajo dostop do vaše lokacije + Čet + PREIMENUJTE MAPO + Odstranjeno iz zaznamkov + Zaznamek + Odpri strani v pregledu + Prilagodi širini + Jul + Podatkovno omrežje + Unicode (UTF-8) + Zaznamek dodan + Zgodovina + Zadnji mesec + Končano + Uredi zaznamek + Zbrišem vsa shranjena gesla? + Seznam + Dodaj med Zaznamke + Maj + Varnostni pravilnik omejuje uporabo internetnega brskalnika + Mar + URL + Ni mogoče dodati zaznamka. Doseženo je največje dovoljeno število zaznamkov + Vedno vprašaj + Shrani stran + Izberi besedo + Prikaži varnostna opozorila + Ustvari mapo + Izbriši vse + Želite izbrisati izbrane zaznamke? + Brisanje prilagojenih podatkov + Počisti vse podatke brskalnika in ponastavi vse nastavitve na privzete vrednosti + Prikaži slike na spletnih straneh + Slovar + Privzeti pogled + Razvrsti po oznaki + Namestitev spletne aplikacije + O brskalniku + Omogoči zasebni način + Album izrezkov + Iskalnik + Podatke, ki jih vpišem v obrazce, si zapomni za poznejšo uporabo + Ni naslova + Pred %d tedni + Dodaj na domači zaslon + Omogoči položaj + Vnesite URL + Ročno + Ni zgodovine + Zaženi JavaScript + %s zahteva vašo lokacijo + Pet + Različica + Sporočilo + Začasni pomnilnik + Uredi + Splošno + Shranjene strani + Dovoli, da %s pokaže obvestila + Blokiranje pojavnih oken na spletnih straneh + Shrani sliko + Največkrat obiskane strani + Včeraj + Vnesite naslov + Dec + Vse izbrisano + %d predmet izbran + Slike ni mogoče shraniti + Sporočila + Razvrstitev + Samod. spr. velik. besedila + Želite izbrisati podatke za dostop do lokacije spletnega mesta? + Pogled seznama + Želite premakniti izbrane zaznamke? + Ni dovolj pomnilnika + Ni dovolj pomnilnika. Izbrišite nekaj predmetov + diff --git a/res/spa-ES.xml b/res/spa-ES.xml new file mode 100644 index 0000000..b5e8c91 --- /dev/null +++ b/res/spa-ES.xml @@ -0,0 +1,345 @@ + + + + Notificación web + Arrastrar + No se han encontrado resultados + Nov. + Pegar + Ajuste. del cont. de pág. + Ajustes avanzados para sitios web individuales + Página de inicio del usuario + GESTOR DE VENTANAS + Automático + Borrar historial + Página actual + Cierre todas las ventanas abiertas y vaya a la página de inicio + Aceptar cookies + Compartir + Chino (GBK) + Latino-1 (ISO-8859-1) + Modo de desarrollador + Junio + Cargar imágenes + Guardar + Ajustes + Gigante + Problema de conectividad de datos + Ago. + Definir página actual como página de inicio + Ajustes + Eliminar + Japonés (SHIFT JIS) + Contraseña e ID guardados + Abrir + No preguntar de nuevo + Guardar para lectura fuera de línea + Añadir Livebox + Julio + Crear carpeta + Añadir + Alta + Guardar nombres de usuario y contraseñas de sitios web + Japonés (EUC-JP) + Administrador de descarga + Abril + Chino (Big5) + Grande + Ajustes del sitio web + Cerrar todo + Seleccionar elementos + Seleccionar todo + Recargar + Ir atrás + ¿Borrar historial? + Ningún elemento + CARPETA + Personalizar agente de usuario + Vista de escritorio + Sep. + Copiar URL del vínc + Abrir en pág nueva + Mié. + Ningún favorito + Añadir etiqueta + Ver imagen + Enviar por correo electrónico + No permitido + Mostrar vista general de últimas páginas abiertas + Grande + Picasa + Vista en miniatura + Buscar en página + Contraseña + Título + Codificación del texto + Eliminado + Ajustes + 1 elemento seleccionado + Minimizar + Etiquetas + Selección de texto activada + Nueva carpeta + Añadido a favoritos + Permitir + Legible + Mostrar imágenes + Automático + Oct. + Puerto Proxy + Editar + ¿Eliminar historial del navegador? + Introduzca el nombre de la carpeta + Enviar vía mensaje + Vista por + Mar. + Lunes + Ventana múltiple + Ya existe + Copiar URL + Recordar preferencias + Borrar acceso a ubicación + ¿Eliminar todas las cookies? + ¿Eliminar todos los datos de los formularios guardados? + Error de red + Parar + Buscar en página + Ningún sitio visitado + Sábado + Descargar + Añadir favorito + ¿Eliminar las bases de datos y el contenido guardado en la caché local? + Error + Cerrar ventana + Medio + Última semana + No se puede mostrar la página web. No hay respuesta del servidor + Borrar favorito + Añadir libro recortes + Más antiguo + Anterior + Más + Mover + Ayer + Seleccione el modo + Sin etiquetar + Creado + Inserte la tarjeta SIM + Favorito eliminado + Borrar los ajustes de los permisos de notificación web + Compartir vínculo + Definir texto para autocompletar formularios web + Aceptar + Pequeño + Copiar imagen + Conexión segura + Datos de formulario + Más visitados + Seleccionar + Carpeta + No se puede abrir una nueva ventana. Se ha alcanzado el número máximo de ventanas abiertas + Permitir a los sitios ejecutar JavaScript + Actualizar automáticamente + Nueva ventana + No + Permite que los sitios guarden y lean datos de cookies + Pulse dos veces para cerrar la bandeja. + Reproducir + Número máximo de etiquetas alcanzado (%d) + Cargando. Espere... + Cancelar + Datos móviles desactivados. Conecte mediante red Wi-Fi o active datos móviles + Cookies + Página en blanco + Buscar + Feb. + Desactivar modo privado + Borrar caché + Contraseña + Nombre de usuario + Vea sitios web de PC con facilidad en su dispositivo móvil. Esta función aumenta el tamaño del texto para hacer más fácil su lectura. Nota: puede cambiar el diseño del texto + EDITAR FAVORITOS + Borrar datos almacenados + Eliminar todos los datos de sitio web y permisos de ubicación? + Seleccionar todo + Nunca + Seleccionar una carpeta + Última página visitada + Opciones de desarrollador + Idioma de origen + Favoritos + Borrar + Hoy + Sí + Pegar + Siguiente + No se puede añadir a la página de inicio. Este sitio web no permite su previsualización + Agente de usuario + Error inesperado + ¿Borrar permisos de notificación web? + Dom. + Guardado + Pulse dos veces para abrir la página web. + Info de página web adicional + Normal + %d elementos seleccionados + Añadir a Favoritos + Ver imagen + Iniciando descarga... + Vacío + Favoritos + Tamaño de fuente + Ir adelante + ¿Está seguro de que desea borrar el historial? + Borrar todos los datos de cookies + Historial Internet no almacenado + Eliminar datos de navegación + Japonés (ISO-2022-JP) + Copiar + Nombre de carpeta + Bloquear ventanas emergentes + Pestañas sincronizadas + Añadir a inicio + Guardar + Certificado no válido + Modo de incógnito + Ene. + Privacidad y seguridad + Imprimir + Hay problemas con el certificado de seguridad de este sitio + Brillo + Eliminar? + Tamaño de fuente + Detección automática + Recordar datos de formularios + Eliminar + Cancelar + Advertencia de seguridad + ¿Descargar? + Buscar o introducir URL + Borrar datos del formulario + Recordar contraseñas + Ir al historial + Hoy + Rechazar + Privacidad + Actualizar + Clip web + Borrar contraseñas + Definir como página de inicio + Cancelar + Enorme + Notificando... + Google + Últimos siete días + (ninguna etiqueta) + Siempre activado + HISTORIA + Pulse otra vez para cerrar Internet + Introducir nombre de favorito + Autenticación necesaria + Guardar vínculo + No volver a mostrar + Copiar en portapapeles + Cambiar nombre de carpeta + Guardar automáticamente ID/contraseña + Se restablecerán todos los ajustes predeterminados. ¿Continuar? + Móvil + Seleccionar favoritos + Cerrar + Pequeño + Restablecer valores predeterminados + Coreano (EUR-KR) + LTE/GSM/WCDMA (conectar automáticamente) + Cambiar nombre de etiqueta + CREAR CARPETA + Página de inicio + URL no válida + Vista del fondo de pantalla + Menú + URL no encontrada + Vista de móvil + Abrir en nueva vent. + Mensaje de correo + Acceso directo creado + Error de conexión de datos + Autocompletar formularios + Permitir a los sitios solicitar acceso a su ubicación + Jue. + RENOMBRAR CARPETA + Eliminado de favoritos + Favorito + Abrir páginas en vista general + Ajustar al ancho + Jul. + Red de datos + Unicode (UTF-8) + Favorito añadido + Historial + Último mes + Hecho + Editar elemento favorito + ¿Eliminar todas las contraseñas guardadas? + Lista + Añadir a Favoritos + Mayo + La política de seguridad restringe el uso de navegadores de Internet + Mar. + URL + No se puede añadir favorito. Alcanzado el número máximo de favoritos + Preguntar siempre + Guardar página + Seleccionar palabra + Mostrar advertencias de seguridad + Crear carpeta + Eliminar todo + ¿Eliminar los favoritos seleccionados? + Borrar datos personalizados + Borrar todos los datos del navegador y restablecer todos los ajustes predeterminados + Mostrar imágenes en páginas Web + Diccionario + Vista predeterminada + Ordenar por etiqueta + Instalar aplicación web + Acerca del navegador + Activar modo privado + Libro de recortes + Motor de búsqueda + Recordar datos que escribo en los formularios para usarlos más adelante + Sin título + Hace %d semanas + Añadir a pantalla de inicio + Activar ubicación + Introducir URL + Manual + Sin historial + Ejecutar JavaScript + %s solicita su ubicación + Viernes + Versión + Mensajes + Caché + Editar + General + Páginas guardadas + Permitir que %s muestre notificaciones + Bloquear ventanas emergentes en páginas Web + Guardar imagen + Sitios más visitados + Ayer + Introducir título + Dic. + Todo eliminado + %d elemento seleccionado + No es posible guardar imagen + Mensajes + Reordenar + Cambiar tamaño texto auto + ¿Eliminar la información de acceso a ubicación del sitio web? + Vista de lista + ¿Mover los favoritos seleccionados? + No hay suficiente memoria + No hay memoria suficiente. Elimine algunos elementos + diff --git a/res/spa-MX.xml b/res/spa-MX.xml new file mode 100644 index 0000000..aa54df0 --- /dev/null +++ b/res/spa-MX.xml @@ -0,0 +1,345 @@ + + + + Notificación web + Deslizar + No se han encontrado resultados + Nov. + Pegar + Config. del cont. de pág. + Configuración avanzada para sitios Web individuales + Página de inicio del usuario + ADMIN. DE VENTANAS + Automático + Eliminar historial + Página actual + Cierre todas las ventanas abiertas y vaya a la página de inicio + Aceptar cookies + Compartir + Chino (GBK) + Latino-1 (ISO-8859-1) + Modo de desarrollador + Junio + Cargar imágenes + Listo + Configuración + Gigante + Problema de conectividad de datos + Ago. + Definir página actual como página de inicio + Configuración + Eliminar + Japonés (SHIFT JIS) + ID y contraseña guardados + Abrir + No volver a preguntar + Guardar para leer fuera de línea + Añadir Livebox + Julio + Crear carpeta + Añadir + Alta + Guardar nombres de usuario y contraseñas de sitios web + Japonés (EUC-JP) + Administrador de descarga + Abril + Chino (Big5) + Grande + Configuración del sitio Web + Cerrar todo + Seleccionar archivos + Todo + Recargar + Ir atrás + ¿Eliminar historial? + Ningún elemento + CARPETA + Agente de usuario personalizado + Vista de escritorio + Sep. + Copiar URL + Abrir en pág nueva + Mié + No hay favoritos + Añadir etiqueta + Ver imagen + Enviar vía correo + No permitido + Mostrar vista general de últimas páginas abiertas + Grande + Picasa + Ver por miniatura + Buscar en páginas + Contraseña + Título + Codificación del texto + Eliminado + Configuración + 1 elemento seleccionado + Minimizar + Etiquetas + Activar selección de texto + Nueva carpeta + Añadido a Favoritos + Permitir + Legible + Mostrar imágenes + Automático + Oct. + Puerto proxy + Editar + ¿Eliminar historial del navegador? + Introducir nombre de la carpeta + Enviar vía mensaje + Ver por + Mar + Lun + Ventana múltiple + Ya existe + Copiar URL + Preferencias de recordatorio + Eliminar acceso a ubicación + ¿Eliminar todas las cookies? + ¿Eliminar todos los datos de formulario guardados? + Error de red + Detener + Buscar en páginas + Ningún sitio visitado + Sáb + Descargar + Añadir a Favoritos + ¿Eliminar el contenido en caché local y en bases de datos? + Error + Cerrar ventana + Mediano + Última semana + No se puede mostrar la página Web. No hay respuesta del servidor + Eliminar Favorito + Añadir al álbum + Más antiguo + Anterior + Más + Mover + Ayer + Selección de modo + Sin etiquetar + Creado + Inserte tarjeta SIM + Favorito eliminado + Eliminar todas las configuraciones de las notificaciones Web + Compartir vínculo + Definir texto para autollenar el formulario web + Aceptar + Pequeño + Copiar imagen + Conexión segura + Datos de formulario + Más visitados + Seleccionar + Carpeta + No se puede abrir una nueva ventana. Se ha alcanzado el número máximo de ventanas abiertas. + Permite que los sitios ejecuten JavaScript + Actualizar automáticamente + Nueva ventana + No + Permite que los sitios guarden y lean datos de cookies + Pulse dos veces para cerrar la bandeja. + Reproducir + Se alcanzó la cantidad máxima de etiquetas (%d) + Cargando. Espere... + Cancelar + Datos móviles desactivados. Conectar con red Wi-Fi o habilitar datos móviles + Cookies + Página en blanco + Buscar + Feb. + Desactivar modo privado + Eliminar caché + Contraseña + Nombre de usuario + Vea sitios web de PC fácilmente en su dispositivo móvil. Esta función amplia el tamaño del texto para facilitar la lectura. Nota: el diseño del texto puede cambiar + EDITAR FAVORITOS + Eliminar datos almacenados + ¿Eliminar todos los datos del sitio Web y los permisos de ubicación? + Todo + Nunca + Seleccionar una carpeta + Última página consultada + Opciones de desarrollador + Idioma de origen + Favoritos + Eliminar + Hoy + Sí + Pegar + Siguiente + No es posible añadir a la pantalla de inicio. Este sitio web no permite vista previa + Agente de usuario + Error inesperado + ¿Eliminar todos los permisos de las notificaciones web? + Dom + Guardado + Pulse dos veces para abrir la página web. + Inf. adicional de página web + Normal + %d elementos seleccionados + Añadir a Favoritos + Ver imagen + Iniciando descarga... + Vacío + Favoritos + Tamaño de fuente + Ir adelante + ¿Está seguro de que desea eliminar el historial? + Eliminar cookies + No se almacena el historial de Internet + Eliminar datos de navegación + Japonés (ISO-2022-JP) + Copiar + Nombre de carpeta + Bloquear ventanas emergentes + Pestañas sincronizadas + Añadir a Inicio + Guardar + Certificado no válido + Modo de incógnito + Ene. + Privacidad y seguridad + Imprimir + Hay problemas con el certificado de seguridad de este sitio + Brillo + Eliminar? + Tamaño de fuente + Detección automática + Recordar datos de formularios + Eliminar + Canc. + Advertencia de seguridad + ¿Descargar? + Buscar o introducir URL + Eliminar datos de formularios + Recordar contraseñas + Ir al historial + Hoy + Rechazar + Privacidad + Actualizar + Recorte Web + Eliminar contraseñas + Definir como página de inicio + Cancelar + Enorme + Notificando... + Google + Últimos 7 días + (ninguna marca) + Siempre activado + HISTORIAL + Pulse una vez más para cerrar Internet + Introducir nombre de Favorito + Autenticación necesaria + Guardar vínculo + No volver a mostrar + Copiar a portapapeles + Renombrar + Guardar automáticamente ID/contraseña + Se restablecerán toda la configuración a la predeterminada. ¿Continuar? + Móvil + Seleccionar favoritos + Cerrar + Pequeño + Restablecer valores predeterminados + Coreano (EUR-KR) + LTE/GSM/WCDMA (conexión automática) + Renombrar etiqueta + CREAR CARPETA + Inicio + URL no válida + Ajustar a escritorio + Menú + URL no encontrada + Ver móvil + Abrir en nueva ventana + Correo + Atajo creado + Error de conexión de datos + Formas de autollenado + Permitir a los sitios solicitar acceso a su ubicación + Jue + RENOMBRAR CARPETA + Eliminado de Favoritos + Favoritos + Abrir pág. vista gral. + Ajustar al ancho + Jul. + Red de datos + Unicode (UTF-8) + Favorito añadido + Historial + Último mes + Realizado + Editar Favorito + ¿Eliminar todas las contraseñas guardadas? + Lista + Añadir a Favoritos + Mayo + La política de seguridad restringe el uso de navegadores de Internet + Mar. + URL + No se puede añadir favorito. Número máximo de favoritos alcanzado + Preguntar siempre + Guardar página + Seleccionar palabra + Mostrar advertencias de seguridad + Crear carpeta + Eliminar todo + ¿Eliminar los marcadores seleccionados? + Eliminar datos personalizados + Eliminar todos los datos del navegador y restablecer toda la configuración a los valores predeterminados + Mostrar imágenes en páginas Web + Diccionario + Vista predeterminada + Ordenar por etiqueta + Instalar aplicación Web + Acerca del navegador + Activar modo privado + Álbum + Motor de búsqueda + Recordar datos escritos en los formularios para usarlos más adelante + Sin título + Hace %d semanas + Añadir a pantalla de inicio + Activar ubicación + Introducir URL + Manual + Sin historial + Ejecutar JavaScript + %s solicita su ubicación + Vie + Versión + Mensaje + Caché + Editar + General + Páginas guardadas + Permitir que %s muestre notificaciones + Bloquear las ventanas emergentes en las páginas Web + Guardar imagen + Sitios más visitados + Ayer + Introducir título + Dic. + Eliminado + %d elemento seleccionado + Error al guardar imagen + Mensajes + Reordenar + Ajuste auto. de tam. de texto + ¿Eliminar información de acceso a ubicación del sitio web? + Ver por lista + ¿Mover los Favoritos seleccionados? + Memoria insuficiente + Memoria insuficiente. Elimine algunos elementos + diff --git a/res/srp-RS.xml b/res/srp-RS.xml new file mode 100644 index 0000000..0fb2067 --- /dev/null +++ b/res/srp-RS.xml @@ -0,0 +1,345 @@ + + + + Web obaveštenje + Prevuci + Nema rezultata + Nov. + Zalepi + Podešav. sadržaja strane + Napredna podešavanja za pojedinačne sajtove + Korisnička početna stranica + MENADŽER PROZORA + Automatski + Obriši istoriju + Trenutna strana + Zatvori sve otvorene prozore i idi na početnu stranicu + Prihvataj kolačiće + Podeli + Kineski (GBK) + Latin-1 (ISO-8859-1) + Režim za razvoj + Jun + Učitaj slike + Kraj + Podešavanja + Džinovsko + Problem sa prenosom podataka + Avg. + Postavi trenutnu stranu kao početnu + Podešavanja + Obriši + Japanski (SHIFT JIS) + Korisničko ime i šifra sačuvani + Otvori + Ne pitaj ponovo + Sačuvaj za čitanje offline + Dodaj živo sanduče + Jul + Kreiraj folder + Dodaj + Visok + Sačuvaj korisnička imena i lozinke za web sajtove + Japanski (EUC-JP) + Menadžer preuzimanja + April + Kineski (Big5) + Velika + Podešavanja sajta + Zatvori sve + Izaberi stavke + Izaberi sve + Ponovo učitaj + Vrati se + Obriši istoriju? + Nema stavki + FOLDER + Prilagođeni korisnički agent + Prikaz radne površine + Sep. + Kopir. URL veze + Otvori novu stranu + Sre + Nema obeleživača + Dodaj oznaku + Prikaži sliku + Slanje putem e-poruke + Nije dozvoljeno + Prikaži pregled novootvorenih strana + Velika + Picasa + Indeksni prikaz + Nađi na strani + Šifra + Naslov + Kodiranje teksta + Obrisano + Podešavanja + 1 stavka izabrana + Minimizuj + Oznake + Selektovanje teksta uključeno + Novi folder + Dodato u obeleživače + Dozvoli + Čitljivo + Prikaži slike + Automatski + Okt. + Port proksija + Izmeni + Izbrisati istorije pretraživača? + Unesite ime foldera + Pošalji u poruci + Prik. po + Uto + Pon + Više prozora + Već postoji + Kopiraj URL + Zapamti željenu vrednost + Obriši pristup lokaciji + Izbrisati sve kolačiće? + Obrisati sve sačuvane podatke? + Greška mreže + Prekini + Nađi na strani + Nema posećenih sajtova + Sub + Preuzmi + Dodaj obeleživač + Obrisati lokalno keširan sadržaj i baze podataka? + Neuspešno + Zatvori prozor + Srednja + Zadnja nedelja + Nije moguće prikazati web stranicu. Nema odgovora servera + Obriši obeleživač + Dod. u album za isečke + Starije + Prethodna + Još + Premesti + Juče + Režim izbora + Uklonjena oznaka + Kreirano + Ubaci SIM karticu + Obeleživač je uklonjen + Obriši podešavanja dozvola za web obaveštenja + Podeli vezu + Podesi tekst za automatsko popunjavanje web obrasca + OK + Mala + Kopiraj sliku + Bezbedna veza + Sačuvani podaci + Najposećeniji + Izaberi + Folder + Nemoguće otvoriti novi prozor. Već je otvoren maks. broj prozora + Dozvoli sajtovima da pokrenu JavaScript + Automatsko osvežavanje + Novi prozor + Ne + Omogućava sajtovima da sačuvaju i čitaju podatke iz kolačića + Dvaput kucni za zatvaranje trake. + Reprodukcija + Dostignut je maksimalan broj oznaka (%d) + Učitavanje. Sačekaj... + Poništi + Veza za prenos podataka za mobilne uređaje je onemogućena. Poveži se pomoću Wi-Fi mreže ili omogući prenos podataka za mobilne uređaje + Kolačići + Prazna strana + Pretraži + Feb. + Onemogućiti privatni režim + Obriši keš memoriju + Šifra + Korisničko ime + Jednostavno prikaži web sajtove računara na svom mobilnom uređaju. Ova funkcija povećava veličinu teksta za lakše čitanje. Napomena: Izgled teksta može biti promenjen + IZMENI OBELEŽIVAČE + Obriši sačuvane podatke + Obrisati sve podatke sajtova i dozvole lociranja? + Izaberi sve + Nikad + Izaberi folder + Zadnja prikazana strana + Opcije razvojnog tima + Izvorni jezik + Obeleživači + Obriši + Danas + Da + Zalepi + Naredna + Dodavanje na početni ekran nije moguće. Ovaj veb sajt ti ne dozvoljava da ga pregledaš + Korisnički agent + Neočekivana greška + Obrisati dozvole za web obaveštenja? + Ned + Sačuvano + Dvaput kucni za otvaranje web stranice. + Dodatne info. o web stranici + Normalan + %d stavke/i označene/o + Dodaj u obeleživače + Prikaži sliku + Počinje preuzimanje... + Prazno + Bookmark-ovi + Veličina fonta + Idi dalje + Are you sure you want to clear history? + Obriši sve kolačiće + Internet istorija nije sačuvana + Obriši podatke o pregledanjima + Japanski (ISO-2022-JP) + Kopiraj + Naziv foldera + Blokiraj iskačuće prozore + Sinhronizov. kartice + Dodaj na početnu + Sačuvaj + Neispravan certifikat + Inkognito režim + Jan. + Privatnost i bezbednost + Štampaj + Postoje problemi sa bezbednosnim sertifikatom za ovaj sajt + Osvetljenje + Obriši? + Veličina fonta + Autodetekcija + Zapamti podatke obrazaca + Obriši + Otkaži + Bezbednosno upozorenje + Preuzmi? + Traži ili unesi URL + Obriši podatke iz obrasca + Zapamti šifre + Idi na istoriju + Danas + Odbij + Privatnost + Osveži + Web zapis + Obriši šifre + Postavi kao početnu stranu + Otkaži + Ogroman + Obaveštavanje... + Google + Poslednjih 7 dana + (bez oznaka) + Uvek uključeno + ISTORIJA + Kucni još jednom za zatvaranje Interneta + Unesi naziv obeleživača + Potrebna je autentikacija + Sačuvaj vezu + Nikad više ne prikazuj + Kopiraj u privremenu memoriju + Preimenuj folder + Automatsko memorisanje korisničkog imena/šifre + Sva podešavanja se vraćaju na podrazumevano. Nastavak? + Mobilni + Izaberi obeleživače + Zatvori + Mala + Resetuj na podrazumevano + Korejski (EUC-KR) + LTE/GSM/WCDMA (automatsko povezivanje) + Preimenuj oznaku + KREIRAJ FOLDER + Početna strana + Neispravan URL + Prikaz radne površine + Meni + URL nije nađen + Uspravan prikaz + Otvori u novom proz. + E-mail + Prečica kreirana + Neuspešno uspostavljanje veze s podacima + Autom. popunjav. obrazaca + Dozvoli sajtovima da traže pristup tvojoj lokaciji + Čet + PREIMENUJ FOLDER + Uklonjeno iz obeleživača + Obeleživač + Otvori str. u pregledu + Podesi prema širini + Jul + Mreža podataka + Unicode (UTF-8) + Obeleživač dodat + Istorija + Zadnji mesec + Gotovo + Izmeni obeleživač + Obriši sve sačuvane šifre? + Lista + Dodaj u obeleživače + Maj + Politika bezbednosti ograničava upotrebu Internet pretraživača + Mar. + URL + Nemoguće dodati obeleživač. Dostignut maks. broj obeležavača + Uvek pitaj + Sačuvaj stranu + Izaberi reč + Prikazuj bezbednosna upozorenja + Kreiraj folder + Obriši sve + Izbrisati izabrane obeleživače? + Obriši personalizovane podatke + Obriši sve podatke pretraživača i vrati sva podrazumevana podešavanja + Prikaži slike na web stranama + Rečnik + Podrazumevani prikaz + Sortiraj po oznaci + Instaliraj web aplikaciju + O pretraživaču + Omogućiti privatni režim + Album za isečke + Pretraživač + Zapamti podatke koje unosim u obrasce radi kasnije upotrebe + Nema naslova + Pre %d nedelja + Dodaj na početni ekran + Omogući lociranje + Unesi URL + Ručno + Nema istorije + Pokreni JavaScript + %s traži tvoju lokaciju + Pet + Verzija + Poruka + Keš memorija + Izmeni + Opšte + Sačuvane strane + Dozvoli da %s prikaže obaveštenja + Blokiraj iskačuća obaveštenja na web stranicama + Sačuvaj sliku + Najposećeniji sajtovi + Juče + Unesi naslov + Dec. + Obriši sve + %d stavka izabrana + Nemoguće sačuvati sliku + Poruke + Preuredi + Aut. promeni veličinu teksta + Obrisati informacije za pristup lokaciji sajta? + Prikaz u vidu liste + Premestiti izabrane obeleživače? + Nedovoljna memorija + Nedovoljno memorije. Obriši neke od stavki + diff --git a/res/swe-SE.xml b/res/swe-SE.xml new file mode 100644 index 0000000..ef0376f --- /dev/null +++ b/res/swe-SE.xml @@ -0,0 +1,345 @@ + + + + Webbmeddelande + Dra + Inga resultat hittades + Nov + Klistra in + Sidinnehållsinställningar + Avancerade inställningar för enskilda webbplatser + Användarens startsida + FÖNSTERHANTERARE + Auto + Rensa historik + Denna sida + Stäng alla öppna fönster och gå till startsidan + Acceptera cookies + Dela + Kinesiska (GBK) + Latin-1 (ISO-8859-1) + Utvecklarläge + juni + Läs in bilder + Klar + Inställningar + Gigantisk + Problem med dataanslutningsbarhet + Aug + Ange den här sidan som startsida + Inställningar + Radera + Japanska (SKIFT-JIS) + Sparat ID och lösenord + Öppna + Fråga inte igen + Spara för offlineläsning + Lägg till Livebox + juli + Skapa mapp + Lägg till + Hög + Spara användarnamn och lösenord för webbplatser + Japanska (EUC-JP) + Hämtningshanterare + april + Kinesiska (Big5) + Stor + Webbplatsinställningar + Stäng alla + Välj objekt + Välj alla + Uppdatera + Gå bakåt + Rensa historik? + Inga objekt + MAPP + Anpassa användaragent + Skrivbordsvy + Sept + Kopiera URL-länk + Öppna på ny sida + Ons + Inga bokmärken + Lägg till tagg + Visa bild + Skicka via e-post + Inte tillåtet + Visa översikt över sidor som nyss öppnats + Stor + Picasa + Miniatyrer + Sök på sidan + Lösenord + Rubrik + Textkodning + Raderad + Inställningar + 1 valt objekt + Minimera + Taggar + Textmarkering på + Ny mapp + Tillagt i bokmärken + Tillåt + Läsbart + Visa bilder + Automatisk + Okt + Proxyport + Redigera + Ta bort webbläsarhistorik? + Ange mappnamn + Skicka i meddelande + Visa eft + Tis + Mån + Flera fönster + Finns redan + Kopiera URL + Kom ihåg preferens + Rensa platsåtkomst + Radera alla cookies? + Ta bort alla sparade formulärdata? + Nätverksfel + Stopp + Sök på sidan + Inga besökta webbplatser + Lör + Hämta + Lägg till bokmärke + Ta bort lokalt cachat innehåll och lokala cachade databaser? + Misslyckades + Stäng fönstret + Medel + Förra veckan + Det går inte att visa webbsidan. Inget svar från servern + Radera bokmärke + Lägg till i klippbok + Äldre + Åter + Mer + Flytta + Igår + Urvalsläge + Ej taggad + Skapat + Sätt i SIM kort + Bokmärket har tagits bort + Rensa behörighetsinställningarna för webbmeddelanden + Dela länk + Ställ in text för automatisk infyllning av webbformulär + OK + Liten + Kopiera bild + Säker anslutning + Formulärdata + Mest besökt + Välj + Mapp + Det går inte att öppna nytt fönster. Högsta antalet öppna fönster har uppnåtts + Tillåt att webbplatser kör JavaScript + Uppdatera automatiskt + Nytt fönster + Nej + Tillåter att webbplatser sparar och läser ”cookie”-information + Dubbeltryck för att stänga facket. + Spela + Maximalt antal taggar (%d) har uppnåtts + Läser in. Vänta... + Avbryt + Mobil data har inaktiverats. Anslut med ett Wi-Fi-nätverk eller aktivera mobil data + Cookie + Tom sida + Sök + Feb + Inaktivera sekretessläget + Töm cache + Lösenord + Användarnamn + Visa datorwebbplatser enkelt på din mobila enhet. Den här funktionen ökar textstorleken för att göra det lättare att läsa. Obs! Textlayouten kan ändras + REDIGERA BOKMÄRKEN + Rensa lagrade data + Ta bort alla webbplatsdata och platsbehörigheter? + Välj alla + Aldrig + Välj mapp + Senaste visade sida + Utvecklaralternativ + Källspråk + Bokmärken + Radera + Idag + Ja + Klistra in + Nästa + Det går inte att lägga till på hemskärmen. Den här webbsidan tillåter inte förhandsgranskning + User agent + Oväntat fel + Rensa behörigheter för webbmeddelanden? + Sön + Sparad + Dubbeltryck för att öppna webbplatsen. + Ytterligare info om webbsida + Normal + %d objekt valda + Lägg till i Bokmärken + Visa bild + Startar hämtning... + Tom + Bokmärken + Teckenstorlek + Gå framåt + Are you sure you want to clear history? + Rensa all cookie-data + Internethistoriken sparas inte + Radera granskningsdata + Japanska (ISO-2022-JP) + Kopiera + Mappnamn + Blockera popuper + Synkade flikar + Lägg på hemskärmen + Spara + Ogiltigt certifikat + Privat läge + Jan + Sekretess och säkerhet + Skriv ut + Det är problem med säkerhetscertifikatet för denna plats + Ljusstyrka + Radera? + Teckenstorlek + Identifiera automatiskt + Kom ihåg data + Radera + Avbryt + Säkerhetsvarning + Hämta? + Sök eller ange URL + Ta bort formulärdata + Kom ihåg lösenord + Gå till historik + Idag + Neka + Privat + Uppdatera + Webbklipp + Rensa lösenord + Ange som startsida + Avbryt + Mycket stor + Meddelar... + Google + Senaste 7 dagarna + (inga taggar) + Alltid på + HISTORIK + Tryck en gång till för att stänga internet + Ange bokmärkesnamn + Verifiering krävs + Spara länk + Visa aldrig igen + Kopiera till Urklipp + Byt mappnamn + Spara ID/lösenord automatiskt + Alla inställningar till standardinställningar. Fortsätta? + Mobil + Välj bokmärken + Stäng + Liten + Återställ till standard + Koreanska (EUC-KR) + LTE/GSM/WCDMA (anslut automatiskt) + Byt namn på tagg + SKAPA MAPP + Startsida + Ogiltig URL + Skrivbordsvy + Meny + URL hittades inte + Mobil vy + Öppna i nytt fönster + E-post + Genväg skapades + Dataanslutningen misslyckades + Autofyll formulär + Tillåt att webbplatser begär åtkomst till din plats + Tor + BYT NAMN PÅ MAPP + Borttaget från bokmärken + Bokmärke + Övers. över öppna sidor + Anpassa till bredd + Jul + Datanätverk + Unicode (UTF-8) + Bokmärke har lagts till + Tidigare + Senaste månaden + Klar + Redigera bokmärke + Radera alla sparade lösenord? + Lista + Lägg till bokmärke + maj + Säkerhetspolicy begränsar användningen av Internet-webbläsare + Mar + URL + Kan inte lägga till bokmärke. Maximala antalet bokmärken uppnått + Fråga alltid + Spara sidan + Välj ord + Visa säkerhetsvarningar + Skapa mapp + Radera alla + Ta bort de valda bokmärkena? + Rensa anpassade data + Rensa alla webbläsardata och återställ alla inställningar till standard + Visa bilder på webbplatser + Ordbok + Standardvy + Sortera efter tagg + Installera webbprogram + Om webbläsaren + Aktivera sekretessläget + Klippbok + Sökmotor + Kom ihåg data jag skriver in i formulär för senare användning + Ingen rubrik + %d veckor sedan + Lägg till på hemskärmen + Aktivera plats + Ange URL + Manuellt + Ingen historik + Kör JavaScript + %s begär uppgifter om din plats + Fre + Version + Meddelande + Cache + Redigera + Allmänt + Sparade sidor + Tillåt att %s visar meddelanden + Blockera popup-fönster på webbsidor + Spara bild + Mest besökta webbplatser + Igår + Ange rubrik + Dec + Alla raderade + %d valda objekt + Det gick inte att spara bilden + Meddelanden + Ändra ordning + Ändra textstorlek autom. + Ta bort åtkomstinformation för webbplatsen? + Listvy + Vill du flytta de markerade bokmärkena? + Minnet fullt + Minnet räcker inte. Radera några objekt + diff --git a/res/tur-TR.xml b/res/tur-TR.xml new file mode 100644 index 0000000..96af13e --- /dev/null +++ b/res/tur-TR.xml @@ -0,0 +1,345 @@ + + + + Web bildirimi + Sürükle + Sonuç bulunamadı + Kas. + Yapıştır + Sayfa içeriği ayarları + Ayrı web siteleri için gelişmiş ayarlar + Kullanıcı ana sayfası + PENCERE YÖNETİCİSİ + Otomatik + Geçmişi sil + Geçerli sayfa + Tüm açık pencereleri kapatın ve ana sayfaya gidin + Çerezleri kabul et + Paylaşıma aç + Çince (GBK) + Latin-1 (ISO-8859-1) + Geliştirici modu + Haziran + Resimleri yükle + Tamam + Ayarlar + Kocaman + Veri bağlantısı sorunu + Ağu. + Geçerli sayfayı ana sayfa olarak ayarla + Ayarlar + Sil + Japonca (SHIFT JIS) + Kaydedilen şifre ve kimlik + Aç + Tekrar sorma + Çevrimdışı okuma için kaydet + Livebox Ekle + Temmuz + Klasör oluştur + Ekle + Yüksek + Web sitesi kullanıcı adı ve şifrelerini kaydet + Japonca (EUC-JP) + İndirme Yöneticisi + Nisan + Çince (Big5) + Büyük + Websitesi ayarları + Tümünü kapat + Öğeleri seç + Hepsini seç + Yeniden yükle + Geri git + Geçmiş silinsin mi? + Öğe yok + KLASÖR + Kullanıcı ajanını özelleştirin + Masaüstü görünümü + Eyl. + URL'yi kopyala + Yeni sayfada aç + Çar + Yer imi yok + İm ekle + Resmi görüntüle + E-posta ile gönder + İzin verilmiyor + Yeni açılan sayfaları görünümde göster + Büyük + Picasa + Küçük resim görünümü + Sayfada bul + Şifre + Başlık + Metin kodlaması + Silindi + Ayarlar + 1 öğe seçildi + Küçült + Etiketler + Metin seçimi açık + Yeni klasör + Yer imlerine eklendi + İzin ver + Okunabilir + Resimleri göster + Otomatik + Eki. + Proxy portu + Düzenle + Tarayıcı geçmişi silinsin mi? + Klasör adını girin + Mesaj ile gönder + Görüntüle + Sal + Pts + Çoklu Pencere + Zaten var + URL kopyala + Tercihi hatırla + Konum erişimini sil + Tüm tanımlama bilgileri silinsin mi? + Tüm kaydedilen form verileri silinsin mi? + Şebeke hatası + Durdur + Sayfada bul + Ziyaret edilen site yok + Cts + İndir + Yer imi ekle + Yerel olarak ön belleğe alınmış içerik ve veritabanları silinsin mi? + Başarısız + Pencereyi kapa + Orta + son hafta + Web sayfası görüntülenemiyor. Sunucu yanıt vermiyor + Yer işaretini sil + Karalama defterne ekle + Daha eski + Önceki + Diğer + Taşı + Dün + Seçme modu + Etiketsiz + Oluşturuldu + SIM kartı takın + Yer imi kaldırıldı + Web bildirimi izin ayarlarını sil + Bağlantıyı paylaş + Web formuna metni otomatik doldurmayı ayarlayın + Tamam + Küçük + Resmi kopyala + Güvenli bağlantı + Form verileri + En çok ziyaret edilen + Seç + Klasör + Yeni pencere açılamıyor. Maksimum sayıda pencere zaten açık durumda + Sitelerine JavaScript'i çalıştırma izni ver + Otomatik yenileme + Yeni pencere + Hayır + Sitelere çerez verilerini kaydetme ve okuma izni verir + Tepsiyi kapamak için çift dokunun. + Çal + Maksimum etiket (%d) sayısına ulaşıldı + Yükleniyor. Lütfen bekleyin... + İptal + Mobil veri devre dışı. Wi-Fi ağını kullanarak bağlanın veya mobil veriyi etkinleştirin + Tanımlama bilgileri + Boş sayfa + Arama + Şub. + Özel modu devre dışı bırak + Önbelleği sil + Şifre + Kullanıcı adı + PC web sitelerini mobil cihazınızda kolaylıkla görüntüleyin. Bu özellik, metnin okunmasını daha kolay hale getirecek şekilde metin boyutunu güçlendirir. Not: Metin düzeni değişebilir + YER İMLERİNİ DÜZENLE + Depolanan veriyi sil + Tüm web site veri ve konum izinleri silinsin mi? + Hepsini seç + Hiçbir zaman + Klasör seçin + Görüntülenen son sayfa + Geliştirici seçenekleri + Kaynak dil + Yer imleri + Temizle + Bugün + Evet + Yapıştır + İleri + Ana sayfa ekranına ekleme yapılamıyor. Bu web sitesi onun ön izlenmesine izin vermiyor + User Agent + Beklenmeyen hata + Web bildirimleri izinleri silinsin mi? + Pzr + Kaydedildi + Web sitesini açmak için çift dokunun. + Ek web sayfa bilgisi + Normal + %d öğe seçildi + Yer imlerine ekle + Resmi görüntüle + İndirme başlıyor... + Boş + Yer imleri + Yazı tipi boyutu + İleri git + Are you sure you want to clear history? + Tüm çerez verilerini sil + İnternet geçmişi tutulmadı + Taranan veriyi sil + Japonca (ISO-2022-JP) + Kopyala + Klasör adı + Açılır pencereleri engelle + Senkronize edilen sekmeler + Ana sayfaya ekle + Kaydet + Geçersiz sertifika + Incognito modu + Oca. + Gizlilik ve güvenlik + Yazdır + Bu siteyle ilgili güvenlik sertifikasında sorunlar var + Parlaklık + Sil? + Yazı tipi boyutu + Otomatik algıla + Veriden hatırla + Sil + İptal + Güvenlik uyarısı + Yüklensin mi? + Ara veya URL gir + Veri formunu sil + Şifreleri hatırlayın + Geçmişe git + Bugün + Reddet + Gizlilik + Yenile + Web klibi + Şifreleri sil + Ana sayfa olarak ayarla + İptal + Çok büyük + Bildiriliyor... + Google + Son 7 gün + (etiket yok) + Her zaman açık + GEÇMİŞ + İnterneti kapatmak için bir kez daha dokunun + Yer imi adı girin + Kimlik denetimi gerekli + Bağlantıyı kaydet + Bir daha gösterme + Panoya kopyala + Klasörü yeniden adlandır + ID/parolayı otomatik kaydet + Tüm ayarları varsayılana dönüştür. Devam edilsin mi? + Cep Telefonu + Yer işaretlerini seç + Kapat + Küçük + Varsayılan olarak sıfırla + Korece (EUC-KR) + LTE/GSM/WCDMA (otomatik bağlantı) + Etiketi yeniden adlandır + KLASÖR OLUŞTUR + Ana sayfa + Geçersiz URL + Masaüstü görünümü + Menü + URL bulunamadı + Mobil görünüm + Yeni pencerede aç + E-posta + Kısayol oluşturuldu + Veri bağlantısı başarısız + Formları otomatik doldur + Sitelere konumunuza erişmeleri için izin verin + Per + KLASÖRÜ YENİDEN ADLANDIR + Yer imlerinden kaldırıldı + Yer İmi + Sayflrı genel bakşta aç + Genişliğe sığdır + Tem. + Veri ağı + Unicode (UTF-8) + Yer imi eklendi + Geçmiş + Geçen ay + Kaydet + Yer imini düzelt + Tüm kayıtlı şifreler silinsin mi? + Listele + Sık kullan. ekle + Mayıs + Güvenlik ilkesi Internet tarayıcısı kullanımını kısıtlıyor + Mar. + URL + Yer imi eklenemedi. Maksimum URL sayısına erişildi + Her zaman sor + Sayfayı kaydet + Kelime seç + Güvenlik uyarılarını göster + Klasör oluştur + Tümünü sil + Seçili yer imleri silinsin mi? + Kişiselleştirilmiş verileri temizle + Tüm tarayıcı verisini sil ve tüm ayarları varsayılan olarak sıfırla + Web sayfalarındaki resimleri göster + Sözlük + Varsayılan görünüm + Etikete göre sırala + Web uyg yükle + Tarayıcı hakkında + Özel modu etkinleştir + Karalama defteri + Arama motoru + Daha sonra kullanmak için girdiğim verileri hatırla + Başlık yok + %d hafta önce + Ana ekrana ekle + Konumu etkinleştir + URL gir + Manuel + Geçmiş yok + JavaScript'i çalıştır + %s konumunuzu istiyor + Cum + Sürüm + Mesaj + Önbellek + Düzenle + Genel + Kayıtlı sayfalar + %s öğesinin bildirimleri göstermesine izin ver + Web sayfalarında açılır pencereleri engelle + Resmi kaydet + En çok ziyaret edilen siteler + Dün + Başlık gir + Ara. + Tümünü sil + %d öğe seçildi + Resim kaydedilemedi + Mesajlar + Yeniden düzenle + Metni oto. tekrar boyutlandr + Web sitesi yeri erişim bilgileri silinsin mi? + Liste görünümü + Seçili yer imlerine gidilsin mi? + Yeterli hafıza yok + Yeterli hafıza yok. Bazı öğeleri silin. + diff --git a/res/ukr-UA.xml b/res/ukr-UA.xml new file mode 100644 index 0000000..6d7b8fc --- /dev/null +++ b/res/ukr-UA.xml @@ -0,0 +1,345 @@ + + + + Веб-сповіщення + Перетягнути + Результатів не знайдено + Лис + Вставити + Установки вмісту сторінки + Додаткові установки для окремих веб-сайтів + Домашня сторінка користувача + ДИСПЕТЧЕР ВІКОН + Авто + Очистити журнал + Поточна сторінка + Закрити усі відкриті вікна та перейти на домашню сторінку + Приймати файли cookies + Надіслати + Китайська (GBK) + Латиниця-1 (ISO-8859-1) + Режим розробки + Червня + Завантажити зображення + Готово + Установки + Надвеликий + Проблема зі зв’язком даних + Сер + Встановити поточну сторінку як домашню + Установки + Вида-\nлити + Японська (SHIFT JIS) + Збережені ім’я та пароль + Відкрити + Надалі не запитувати + Зберегти для перегляду в режимі без зв’язку + Додати Лайвбокс + Липня + Створити папку + Додати + Високий + Збереження імен користувачів та паролів для веб-сайтів + Японська (EUC-JP) + Диспетчер завантажень + Квітня + Китайська (Big5) + Великий + Установки веб-сайта + Закрити всі + Виберіть об’єкти + Вибрати всі + Перезавантажити + Перейти назад + Очистити історію? + Немає об’єктів + ПАПКА + Настроюваний агент користувача + Версія для ПК + Вер + Скопіювати URL + Відкр.на нов.стор. + Ср + Немає закладок + Додати тег + Переглянути зображення + Надіслати в Email + Заборонено + Показати огляд нових відкритих сторінок + Великий + Picasa + Ескіз + Знайти на стор. + Пароль + Назва + Кодування тексту + Видалено + Установки + Вибрано 1 об’єкт + Згорнути + Теги + Увімкнути вибір тексту + Ручний + Додано до закладок + Дозволити + Чітко + Показати зображення + Автоматично + Жов + Порт проксі + Редагувати + Видалити історію браузера? + Ввести ім’я папки + Надіслати повідомленням + Перег. за + Вт + Пн + Декілька вікон + Вже існує + Копіювати URL + Запам’ятати параметр + Очистити доступ до розташування + Видалити всі файли cookie? + Видалити всі збережені дані форм? + Помилка мережі + Стоп + Знайти на стор. + Немає відвіданих сайтів + Сб + Завантажити + Додати закладку + Видалити локальний вміст кеша та бази даних? + Збій + Закрити вікно + Cередній + Останній тиждень + Неможливо відобразити веб-сторінку. Немає відповіді від сервера + Видалити закладку + Додати вирізку + Старіша + Назад + Додатково + Перемістити + Вчора + Режим вибору + Без тегу + Створено + Вставте SIM-картку + Закладку видалено + Очистити установки дозволів для веб-сповіщень + Відкрити доступ до посилання + Ввестановлення тексту для автозаповнення веб-форм + ОК + Малий + Копіювати зображення + Безпечне з'єднання + Дані форми + Найбільш відвідувані + Вибрати + Папка + Неможливо відкрити нове вікно. Максимальну кількість вікон уже відкрито + Дозволити сайтам використовувати JavaScript + Автоматичне оновлення + Нове вікно + Ні + Дозволити сайтам зберігати та читати дані файлів cookie + Двічі натисніть, щоб закрити панель + Відтворити + Досягнуто максимальної кількості тегів (%d) + Завантаження. Зачекайте... + Скасувати + Використання мобільних даних вимкнено. Підключіться за допомогою Wi-Fi або ввімкніть використання мобільних даних + Файли cookie + Пуста сторінка + Пошук + Лют + Вимкнути режим конфіденційності + Очистити кеш + Пароль + Ім'я користувача + З легкістю переглядайте версію веб-сайтів для ПК на мобільному пристрої. Ця функція збільшує розмір тексту для полегшення читання. Примітка. Макет тексту можна змінити + РЕДАГУВАТИ ЗАКЛАДКИ + Очисти збережені дані + Видалити всі дані веб-сайтів і дозволи розташувань? + Вибрати всі + Ніколи + Вибрати папку + Остання переглянута сторінка + Опції розробки + Мова оригіналу + Закладки + Очист. + Сьогодні + Так + Вставити + Далі + Не вдалося додати на головний екран. Цей веб-сайт недоступний для перегляду + Агент користувача + Неочікувана помилка + Очистити дозволи для веб-сповіщень? + Нд + Збережено + Двічі натисніть, щоб відкрити веб-сторінку + Дод.відом.щодо веб-стор. + Звичайний + Вибрано %d об’єктів + Додати до закладок + Переглянути зображення + Початок завантаження... + Пусто + Закладки + Розмір шрифту + Перейти вперед + Are you sure you want to clear history? + Очистити всі дані файлів cookie + Історія браузера не зберігається + Видалити дані браузера + Японська (ISO-2022-JP) + Копіювати + Ім'я папки + Блокувати спливаючі вікна + Синхронізовані вкладки + Додати на головний екран + Зберегти + Хибний сертифікат + Анонімний режим + Січ + Конфіденційність і безпека + Друк + Проблеми із сертифікатом безпеки для цього сайту + Яскравість + Видалити? + Розмір шрифту + Автоматичне розпізнавання + Запам’ятати дані форми + Видалити + Скас. + Попередження системи безпеки + Завантажити? + Знайдіть або введіть URL-адресу + Очистити дані форми + Запам’ятати паролі + Перейти до історії + Сьогодні + Відмова + Конфіденційність + Оновити + Веб-вирізка + Очистити паролі + Встановити як домашню сторінку + Скасувати + Величезний + Сповіщення... + Google + Останні 7 днів + (без тегів) + Завжди увімк. + ІСТОРІЯ + Натисніть ще раз, щоб закрити Інтернет + Введіть ім’я закладки + Потрібна аутентифікація + Збер. посилання + Більше ніколи не показувати + Копіювати в буфер обміну + Перейменувати папку + Автозбереження імені користувача/пароля + Буде відновлено стандартні установки. Продовжити? + Мобільний + Вибір закладок + Закрити + Малий + Скинути на стандартні + Корейська (EUC-KR) + LTE/GSM/WCDMA (автопідключення) + Перейменувати тег + СТВОРИТИ ПАПКУ + Домашня сторінка + Невірний URL + За розміром сторінки + Меню + URL не знайдено + Мобільний перегляд + Відк. в новому вікні + Email + Створено клавішу швидкого доступу + Збій передачі даних + Автозаповнення форм + Дозволити сайтам запитувати доступ до вашого розташування + Чт + ПЕРЕЙМЕНУВАТИ ПАПКУ + Видалено із закладок + Закладка + Відкр. огляд сторінки + За шириною + Лип + Мережа даних + Юнікод (UTF-8) + Закладку додано + Історія + Останній місяць + Готово + Редагувати закладку + Видалити всі збережені паролі? + Список + Додати до закладок + Трав. + Використання інтернет-браузера обмежено політикою безпеки + бер + URL + Неможливо додати закладку. Досягнуто максимальної кількості закладок + Завжди запитувати + Зберегти стор. + Виберіть слово + Показувати попередження системи безпеки + Створити папку + Видалити всі + Видалити вибрані закладки? + Очистити персоналізовані дані + Очищення всіх даних браузера та відновлення стандартних установок + Відображати зображень на веб-сторінках + Словник + Стандартний режим перегляду + Сортувати за тегами + Інсталювати веб-програму + Про браузер + Увімкнути режим конфіденційності + Альбом для вирізок + Система веб-пошуку + Запам’ятати дані, введені у формах, для подальшого використання + Немає назви + %d тижнів тому + Додати на головний екран + Увімкнути розташування + Введіть URL + Вручну + Журнал порожній + Запуск JavaScript + %s запитує ваше розташування + Пт + Версія + Повідомлення + Кеш + Редагув. + Загальні + Збережені сторінки + Дозволити користувачу %s відображати сповіщення + Блокувати спливаючі вікна на веб-сторінках + Зберегти зображення + Найбільш відвідувані сайти + Вчора + Введіть заголовок + Гру + Видалити всі + Вибрано %d об’єкт + Неможливо зберегти зображення + Повідомлення + Упорядкувати + Автозмінення розміру тексту + Видалити відомості про доступ до розташування веб-сайту? + Перегляд списку + Перемістити вибрані закладки? + Недостатньо пам'яті + Недостатньо пам’яті. Видаліть деякі об’єкти + diff --git a/res/uzb-UZ.xml b/res/uzb-UZ.xml new file mode 100644 index 0000000..8f94e3e --- /dev/null +++ b/res/uzb-UZ.xml @@ -0,0 +1,345 @@ + + + + Veb-bildirishnoma + Torting + Natijalar topilmadi + Noy. + Qo‘shib qo‘yish + Sahifa tarkibi parametri + Shaxsiy veb-saytlar uchun qo‘shimcha parametrlar + Foydalanuvchi asosiy sahifasi + OYNA MENEJERI + Avtomatik + Jurnalni tozalash + Joriy sahifa + Ochilgan oynalarning barchasini yoping va asosiy ekranga o‘ting + Cookie-fayllarni qabul qilish + Ulashish + Xitoycha (GBK) + Lotincha-1 (ISO-8859-1) + Ishlab chiqaruvchi rejimi + Iyun + Rasmlarni yuklash + Bajarildi + Parametrlar + Ulkan + Ma’lumot ulanishi muammosi + Avg. + Joriy sahifani bosh sahifa sifatida o‘rnatish + Parametrlar + O'chr + Yaponcha (SHIFT JIS) + Saqlangan ID va parol + Ochish + Boshqa so‘ralmasin + Offlayn o‘qish uchun saqlash + Livboks qo‘shish + Iyul + Jild yaratish + Qo‘shish + Yuqori + Veb-saytlar uchun foydalanuvchi nomi va parollarni saqlash + Yaponcha (EUC-JP) + Yuklab olish menejeri + Aprel + Xitoycha (Big5) + Katta + Veb-sayt parametrlari + Barchasini yopish + Elementlarni tanlang + Barchasini tanlash + Qayta yuklash + Orqaga qaytish + Jurnal tozalansinmi? + Elementlar yo‘q + JILD + Ixtiyoriy foydalanuvchi agenti + Ishchi stolni ko‘rib chiqish + Sen. + URL havolasidan nusxa olish + Yangi sahifada ochish + Cho + Veb-hujjatlar yo‘q + Teg qo‘shish + Rasmni ko‘rish + E-pochta orqali yuborish + Ruxsat berilmagan + Yangi ochilgan sahifalarning umumiy ko‘rinishini ko‘rsatish + Katta + Picasa + Eskizli ko'rinish + Sahifada topish + Parol + Sarlavha + Matn shifrlanishi + O'chirildi + Parametrlar + 1 element tanlangan + Kichraytirish + Teglar + Matn tanlash yoq. + Yangi jild + Saqlangan veb-hujjatlarga qo‘shildi + Ruxsat + O‘qish mumkin bo‘lgan + Rasmlarni ko'rsat + Avtomatik + Okt. + Proksi porti + Tahrirlash + Brauzer jurnali o'chirilsinmi? + Jild nomini kiriting + Xabar orqali yuborish + Ko‘r/chiq + Sesh + Du. + Ko‘p oynali + Avvaldan mavjud + URLdan nusxa olish + Eslab qolish afzalligi + Joylashuvga kirishni tozalash + Barcha cookie-fayllar yo‘q qilinsinmi? + Ma'lumotlardan barcha saqlanganlar yo‘q qilinsinmi? + Tarmoq xatosi + To‘xtat + Sahifada topish + Tashrif buyurilgan saytlar yo‘q + Sha + Yuklab olish + Veb-hujjat qo‘shish + Mahalliy keshlangan tarkib va ma'lumot bazalari o'chirilsinmi? + Xato + Oynani yopish + O‘rtacha + Oxirgi hafta + Veb-sahifani aks ettirib bo‘lmaydi. Serverdan javob yo‘q + Veb-hujjatni 'chirib tashlash + Tikish fayliga qo‘sh + Eskiroq + Avvalgi + Yana + Ko‘chirish + Kecha + Tanlash rejimi + Teglanmagan + Yaratilgan + SIM-karta kiriting + Veb-hujjat olib tashlandi + Veb-bildirishnoma ruxsati parametrlarini o‘chirib tashlash + Linkni ulashish + Veb-shaklni avtomatik to‘ldirish uchun matn o‘rnating + OK + Kichik + Suratdan nusxa olish + Xavfsiz ulanish + Shakl ma’lumoti + Eng ko‘p kirilgan + Tanlash + Jild + Yangi oynani ochib bo‘lmaydi. Ochish ruxsat etilgan miqdordagi oynalar ochilgan + Saytlarga JavaScriptni ishga tushirish uchun ruxsat berish + Avtomatik yangilash + Yangi oyna + Yo‘q + Saytlarga cookie-ma’lumotlarni saqlash va o‘qish uchun yordam beradi + Treyni yopish uchun ikki marta cherting + O‘ynatmoq + Teglar soni maksimal miqdorga (%d) yetdi + Yuklanmoqda. iltimos, kuting... + Bekor q. + Mobil ma’lumot o‘chirilgan. Wi-Fi yordamida ulaning, yoki mobil tarmoqni yoqing + Cookie-fayllar + Bo‘sh sahifa + Qidirish + Fev. + Maxfiylik rejimini o‘chirish + Keshni o'chirish + Parol + Foydalanuvchi nomi + Mobil qurilmangizda ShK veb-saytini osongina ko‘rib chiqing. Ushbu funksiya matnni kattalashtiradi va uning o‘qilishini osonlashtiradi. Eslatma: Matn joylashuvi o‘zgarishi mumkin + VEB-HUJJATLARNI TAHRIRLA + Saqlangan ma’lumotlarni tozalash + Barcha veb-sayt ma’lumotlari va joylashuv ruxsatnomalari o'chirilsinmi? + Barchasini tanlash + Hech qachon + Jild tanlash + So‘nggi ko‘rib chiqilgan sahifa + Ishlab chiqaruvchi opsiyalari + Manba tili + Saqlangan veb-hujjatlar + O'chirish + Bugun + Ha + Qo‘shib qo‘yish + Keyingi + Asosiy ekranga qo‘shib bo‘lmaydi. Ushbu veb-saytni dastlabki ko‘rib chiqish ruxsat etilmagan + Foydalanuvchi agenti + Kutilmagan muammo + Veb-bildirishnoma ruxsatlari tozalansinmi? + Yak + Saqlandi + Veb-sahifani ochish uchun ikki marta cherting + Qo‘sh. veb-sahifa ma’lumoti + Normal + %d element tanlangan + Saqlangan veb-hujjatlarga qo‘shish + Rasmni ko‘rish + Yuklab olish boshlanmoqda... + Bo‘sh + Veb-hujjatlar + Shrift o‘lchami + Oldinga o‘tish + Are you sure you want to clear history? + Barcha cookie ma’lumotlarini o'chirish + Internet jurnali saqlanmagan + Qidirilayotgan ma’lumotni o'chirish + Yaponcha (ISO-2022-JP) + Nusxa olish + Jild nomi + Qalqib chiquvchi oyna bloki + Sinxronlangan ilovalar + Uyga qo‘shish + Saqlash + Nomaqbul sertifikat + Inkognito rejimi + Yan. + Maxfiylik va xavfsizlik + Chop etish + Ushbu sayt sertifikati bilan bog‘liq muammolar mavjud + Ravshanlik + O'chirish? + Shrift o‘lchami + Avto-aniqlash + Ma’lumotdan eslab qolish + O'chirish + Bek/q. + Xavfsizlik ogohlantirishi + Yuklab olinsinmi? + URL-manzilni qidirish yoki kiritish + Ma’lumotdan o'chirib tashlash + Parollarni eslab qolish + Jurnalga o‘tish + Bugun + Rad etish + Maxfiylik + Yangilash + Veb-klip + Parollarni tozalash + Asosiy sahifa sifatida o‘rnatish + Bek/qil. + Ulkan + Xabar berilmoqda... + Google + Oxirgi 7 kun + (teg yo‘q) + Har doim yoqilgan holda + JURNAL + Internetni yopish uchun yana bir bor cherting + Veb-hujjat nomini kiriting + Haqiqiylik tekshiruvi talab qilinadi + Linkni saqlash + Boshqa ko‘rsatilmasin + Buferga nusxa olish + Jild nomini o‘zgartirish + Identifikator/parolni avtomatik saqlash + Barcha parametrlarni birlamchi o‘rnatilganga. Davom ettirilsinmi? + Mobil + Saqlangan veb-hujjatlarni tanlash + Yopish + Kichik + Birlamchi o'rnatilgan holatiga tiklash + Koreyscha (EUC-KR) + LTE/GSM/WCDMA (avtomatik ulanish) + Teg nomini o‘zgartirish + JILD YARATISH + Asosiy sahifa + Noto‘g‘ri URL + Ishchi stol ko‘rinishi + Menyu + URL topilmadi + Mobil ko‘rinish + Yangi oynada ochish + E-pochta + Yorliq yaratildi + Ma’lumotlar ulanishi bajarilmadi + Shakllarni avto-to‘ldir + Saytlarning joylashishingizga kirishni talab qilishiga ruxsat berish + Pay + JILD NOMINI O‘ZGARTIRISH + Veb-hujjatlardan olib tashlandi + Saqlangan veb-hujjat + Sah. ko‘r/ch. orq. och. + Kenglikka moslash + Iyl. + Ma’lumotlar tarmog‘i + Yunikod (UTF-8) + Saqlangan veb-hujjat qo‘shildi + Jurnal + Oxirgi oy + Bajarildi + Veb-hujjatni tahrirlash + Barcha saqlangan parollar yo‘q qilinsinmi? + Ro‘yxat + Veb-huj.ga qo‘sh + May + Xavfsizlik siyosati Internet brauzeridan foydalanishni cheklaydi + Mar. + URL-manzil + Veb-hujjatni qo‘shib bo‘lmaydi. Veb-hujjatlar soni ruxsat etilgan maksimal miqdorga yetdi + Har doim so‘ralsin + Sahifani saqlash + So‘z tanlang + Xavfsizlik ogohlantirishlarini ko‘rsatish + Jild yaratish + Barchasi o'chirish + Tanlangan xatcho‘plar yo‘q qilinsinmi? + Shaxsiy ma‘lumotlarni o‘chiring + Brauzerning barcha ma’lumotini tozalash va barcha parametrlarni birlamchiga qayta o'rnatish + Veb-sahifadagi tasvirlarni aks ettirish + Lug‘at + Ilk ko‘rinish + Teg bo‘yicha saralash + Veb-ilovani o‘rnatish + Brauzer haqida + Maxfiylik rejimini yoqish + Tikish fayli + Qidirish mexanizmi + Shakllarda kiritilgan ma’lumotlarni keyinchalik ishlatish uchun eslab qolish + Sarlavha yo‘q + %d hafta avval + Asosiy ekranga qo‘shish + Joylashuvni yoqish + URL kiritish + Qo‘lda + Jurnal yo‘q + JavaScriptni ishga tushirish + %s Sizning joylashuvingizni talab qiladi + Jum. + Versiya + Xabar + Kesh + Tahrirl. + Asosiy + Saqlangan sahifalar + %sga bildirishnomalarni ko‘rsatish uchun ruxsat berish + Veb-sahifalarda qalqib chiquvchi xabarlarni bloklaydi + Tasvirni saqlash + Eng ko‘p kirilgan saytlar + Kecha + Sarlavha kiriting + Dek. + Barchasini o'chirish + %d element tanlandi + Tasvirni saqlab bo‘lmaydi + Xabarlar + Qayta saralash + Matn o‘lch-ni avto. o‘zgart + Veb-saytga kirish joylashuvi haqidagi ma'lumot o'chirilsinmi? + Ro‘yxat ko‘rinishi + Tanlangan veb-hujjatlar ko‘chirilsinmi? + Xotira yetarli emas + Xotira yetarli emas. Ba’zi elementlarni o'chiring + diff --git a/res/zho-CN.xml b/res/zho-CN.xml new file mode 100644 index 0000000..8236eba --- /dev/null +++ b/res/zho-CN.xml @@ -0,0 +1,345 @@ + + + + 网络通知 + 拖动 + 未找到结果 + 11月 + 粘贴 + 页面内容设置 + 个别网站的高级设置 + 用户主页 + 窗口管理器 + 自动 + 清除历史记录 + 当前页面 + 关闭所有打开的窗口并进入主页 + 接受 Cookies + 共享 + 中文(GBK) + 拉丁语-1 (ISO-8859-1) + 开发模式 + 6月 + 载入图像 + 完成 + 设定 + 巨大 + 数据连接性问题 + 8月 + 将当前页面设置为主页 + 设定 + 删除 + 日语 (SHIFT JIS) + 储存的ID和密码 + 打开 + 不再询问 + 保存以备离线阅读 + 添加 Livebox + 7月 + 新文件夹 + 添加 + 高 + 保存网页用户名和密码 + 日语 (EUC-JP) + 下载管理器 + 4月 + 中文(大5) + 大 + 网站设置 + 关闭全部 + 选择项目 + 全选 + 刷新 + 后退 + 清除历史记录? + 无项目 + 文件夹 + 定制用户代理 + 桌面视图 + 9月 + 复制链接网址 + 在新页面打开 + 星期三 + 无书签 + 添加标签 + 查看图像 + 通过电子邮件发送 + 不允许 + 显示新开页面的缩略图 + 大 + Picasa + 缩略图查看 + 在页面上查找 + 密码 + 标题 + 文本编码 + 已删除 + 设定 + 已选择1个项目 + 最小化 + 标签 + 文本选择开启 + 新文件夹 + 已添加到书签 + 允许 + 方便阅读 + 显示图像 + 自动 + 10月 + 代理服务器端口 + 编辑 + 是否删除浏览器历史记录? + 输入文件夹名称 + 通过信息发送 + 查看方式 + 星期二 + 星期一 + 多窗口 + 已经存在 + 复制网址 + 记住首选项 + 取消定位权限 + 删除所有 Cookies 吗? + 是否删除全部已保存的表单数据? + 网络故障 + 停止 + 在页面上查找 + 无已访问的站点 + 星期六 + 下载 + 添加书签 + 是否删除本地缓存的内容和数据库? + 失败 + 关闭窗口 + 中 + 最后一周 + 无法显示网页。服务器无响应 + 删除书签 + 添加至剪贴簿 + 更早 + 上一步 + 更多 + 移动 + 昨天 + 选择模式 + 未标签 + 创建 + 插入 SIM 卡 + 书签已移除 + 清除网络通知许可设置 + 共享链接 + 设置网页表格自动填充的文本 + 确定 + 小 + 复制图像 + 安全连接 + 格式数据 + 访问最多 + 选择 + 文件夹 + 无法打开新跳出窗口。已达到可打开窗口的最大数量上限 + 允许站点运行 JavaScript + 自动刷新 + 新窗口 + 否 + 允许保存站点并读取cookie数据 + 双击以关闭托盘 + 播放 + 已达到最大标签数 (%d) + 加载中,请稍等… + 取消 + 移动数据已禁用。使用 Wi-Fi 网络连接,或启用移动数据 + Cookies + 空白页面 + 搜索 + 2月 + 禁用个人模式 + 清除缓存 + 密码 + 用户名 + 在您的移动设备上轻松查看 PC 网站。该功能放大文本大小以使其更易于阅读。注意:文本布局可能变化 + 编辑书签 + 清除已存数据 + 是否删除所有网站数据和位置许可? + 全选 + 从不 + 选择文件夹 + 最新浏览的网页 + 开发者选项 + 源语言 + 书签 + 清除 + 今天 + 是 + 粘贴 + 下一步 + 无法添加至主屏。该网站不允许预览 + WAP UA + 无法预知的失败 + 是否清除网页通知许可? + 星期日 + 已保存 + 双击以打开网页 + 额外网页信息 + 正常 + 已选择%d个项目 + 添加到书签 + 查看图像 + 正在开始下载... + 空白 + 书签 + 字体大小 + 前进 + 确认要清除历史记录? + 清除所有 Cookie 数据 + 互联网记录未储存 + 删除浏览数据 + 日语 (ISO-2022-JP) + 复制 + 文件夹名称 + 阻止弹出窗口 + 已同步分页 + 添加至主页 + 保存 + 无效证书 + 匿名模式 + 1月 + 隐私和安全 + 打印 + 此站点的安全证书存在问题 + 亮度 + 删除? + 字体大小 + 自动检测 + 记住表单数据 + 删除 + 取消 + 安全警告 + 下载? + 搜索或输入网址 + 清除表单数据 + 记住密码 + 进入记录 + 今天 + 拒绝 + 隐私权 + 刷新 + 网络剪辑 + 清除密码 + 设置为首页 + 取消 + 超大 + 通知中... + Google + 最后 7 天 + (无标签) + 总是打开 + 历史记录 + 再轻敲一次以关闭互联网 + 输入书签名称 + 需要认证 + 保存链接 + 永远不再显示 + 复制到剪贴板 + 重命名文件夹 + 自动储存ID和密码 + 所有默认设定。 继续? + 手机 + 选择书签 + 关闭 + 小 + 重置为默认值 + 韩文(EUC-KR) + LTE/GSM/WCDMA(自动连接) + 重命名标签 + 创建文件夹 + 主页 + 网址无效 + 桌面查看 + 功能表 + 找不到网址 + 垂直浏览 + 在新窗口中打开 + 电子邮件 + 已创建快捷键 + 数据连接失败 + 自动填写表格 + 允许网站请求访问您的位置 + 星期四 + 重命名文件夹 + 已从书签移除 + 书签 + 以缩略图方式打开页面 + 适合宽度 + 7月 + 数据网络 + 统一码(UTF-8) + 已添加书签 + 历史记录 + 上个月 + 完成 + 编辑书签 + 删除全部已存密码? + 列表 + 添加到书签 + 5月 + 安全政策限制使用互联网浏览器 + 3月 + 网址 + 无法添加书签。已达最大书签数量 + 总是询问 + 存储页面 + 选择单词 + 显示安全警告 + 新建文件夹 + 全部删除 + 是否删除选中书签? + 清除个性化数据 + 清除所有浏览器数据并将所有设定重置为默认值 + 显示网页上的图像 + 字典 + 默认视图 + 按标签排序 + 安装网络应用程序 + 关于浏览器 + 启用个人模式 + 剪贴簿 + 搜索引擎 + 记住我键入表单的数据以备后用 + 无标题 + %d 周前 + 添加到主屏幕 + 启用定位功能 + 输入网址 + 手动 + 无历史记录 + 运行 Java 脚本 + %s请求您的位置 + 星期五 + 版本 + 信息 + 缓存 + 编辑 + 一般 + 已保存的页面 + 允许 %s 显示通知 + 阻止网页上的弹出窗口 + 保存图像 + 访问最多的站点 + 昨天 + 输入标题 + 12月 + 已全部删除 + 已选择%d项目 + 无法保存图片 + 信息 + 重新排序 + 自动调节大小文本 + 删除网站定位信息? + 列表视图 + 是否移动选中书签? + 没有足够内存 + 存储空间不足。请删除部分项目 + diff --git a/res/zho-HK.xml b/res/zho-HK.xml new file mode 100644 index 0000000..fbd011a --- /dev/null +++ b/res/zho-HK.xml @@ -0,0 +1,345 @@ + + + + 網絡通知 + 拖曳 + 找不到結果 + 11月 + 貼上 + 頁面內容設定 + 個別網站的進階設定 + 用戶首頁 + 視窗管理員 + 自動 + 清除歷程記錄 + 目前頁面 + 關閉所有開啟的視窗然後前往首頁 + 接受 Cookies + 分享 + 中文 (GBK) + 拉丁-1 (ISO-8859-1) + 開發人員模式 + 6月 + 載入圖像 + 完成 + 設定 + 巨大 + 數據連接問題 + 8月 + 將目前頁面設定為首頁 + 設定 + 刪除 + 日文 (SHIFT JIS) + 已儲存的用戶名及密碼 + 開啟 + 不再詢問 + 儲存以供離線閱讀 + 加入 Livebox + 7月 + 建立資料夾 + 加入 + 高 + 儲存網站的用戶名稱和密碼 + 日文 (EUC-JP) + 下載管理員 + 4月 + 中文 (Big5) + 大 + 網址設定 + 關閉全部 + 選擇項目 + 選擇全部 + 重新載入 + 轉至上一頁 + 清除歷程記錄? + 無項目 + 資料夾 + 自訂用戶代理程式 + 桌面檢視 + 9月 + 複製連結網址 + 在新頁面開啟 + 週三 + 無書籤 + 加入標籤 + 檢視圖像 + 透過電子郵件發送 + 不允許 + 顯示新開啟頁面的概覽 + 大 + Picasa + 縮圖檢視 + 在頁面上尋找 + 密碼 + 標題 + 文字編碼 + 已刪除 + 設定 + 已選擇 1 個項目 + 最小化 + 標籤 + 文字選擇開 + 新資料夾 + 已加到書籤 + 允許 + 可讀取 + 顯示圖像 + 自動 + 10月 + 代理伺服器端口 + 編輯 + 刪除瀏覽器紀錄嗎? + 輸入資料夾名稱 + 透過訊息發送 + 查看方式 + 週二 + 週一 + 多重視窗 + 已存在 + 複製網址 + 記住偏好 + 清除位置資訊存取權 + 要刪除全部 Cookie 嗎? + 刪除所有已儲存的表格數據嗎? + 網絡故障 + 停止 + 在頁面上尋找 + 無瀏覽網站 + 週六 + 下載 + 加入書籤 + 刪除本機緩存的內容和數據庫嗎? + 失敗 + 關閉視窗 + 中 + 最後一週 + 無法顯示網頁。伺服器沒有回應 + 刪除書籤 + 加入至剪貼簿 + 較舊的 + 上一步 + 更多 + 移動 + 昨天 + 選擇模式 + 未標籤 + 已建立 + 請插入 SIM 卡 + 已移除書籤 + 清除網頁通知權限設定 + 分享連結 + 設定網頁表格自動填寫的文字 + 確定 + 小 + 複製圖像 + 安全連接 + 表格數據 + 最常瀏覽 + 選擇 + 資料夾 + 無法開啟新視窗。開啟的視窗數目已達上限 + 允許網站執行 JavaScript + 自動重新整理 + 新視窗 + 否 + 允許網站儲存和讀取 cookie 數據 + 輕觸兩下以關閉工具列 + 播放 + 已達標籤數目上限(%d) + 正在載入。請稍候... + 取消 + 流動數據已停用。使用 Wi-Fi 網絡連接,或啟用流動網絡 + Cookies + 空白頁面 + 搜尋 + 2月 + 停用私人模式 + 清除緩存 + 密碼 + 用戶名稱 + 在您的流動裝置上輕鬆檢視電腦網站。此功能可放大文字大小使其更易於閱讀。請注意:文字版面配置可能會變更 + 編輯書籤 + 清除已儲存的數據 + 刪除所有網站數據位置權限嗎? + 選擇全部 + 永不 + 選擇資料夾 + 上次檢視的頁面 + 開發人員選項 + 來源語言 + 書籤 + 清除 + 今天 + 是 + 貼上 + 下一步 + 無法加入至主螢幕。此網站不允許預覽 + 用戶代理 + 意外故障 + 清除網頁通知權限嗎? + 週日 + 已儲存 + 輕觸兩下以開啟網頁 + 其他網頁資訊 + 正常 + 已選擇 %d 個項目 + 加到書籤 + 檢視圖像 + 正在開始下載... + 空白 + 書籤 + 字體大小 + 轉至下一頁 + Are you sure you want to clear history? + 清除全部 Cookie 數據 + 互聯網歷程記錄未儲存 + 刪除瀏覽數據 + 日文 (ISO-2022-JP) + 複製 + 資料夾名稱 + 封鎖彈出視窗 + 已同步的標籤 + 加入至首頁 + 儲存 + 證書無效 + 匿名模式 + 1月 + 私隱和安全 + 列印 + 此網站的安全性證書存在問題 + 亮度 + 刪除? + 字體大小 + 自動偵測 + 記住表格數據 + 刪除 + 取消 + 安全警告 + 要下載嗎? + 搜尋或輸入網址 + 清除表格數據 + 記住密碼 + 前往歷程記錄 + 今天 + 拒絕 + 私隱 + 重新整理 + 網絡剪輯 + 清除密碼 + 設定為首頁 + 取消 + 巨大 + 正在通知... + Google + 過去 7 天 + (無標籤) + 總是開啟 + 歷程記錄 + 請再輕觸一次以關閉互聯網 + 輸入書籤名稱 + 需要認證 + 儲存連結 + 永不再顯示 + 複製到剪貼板 + 重新命名資料夾 + 自動儲存ID /密碼 + 將全部設定重設為預設。繼續嗎? + 手機 + 選擇書籤 + 關閉 + 小 + 重設為預設 + 韓文 (EUC-KR) + LTE/GSM/WCDMA (自動連接) + 重新命名標籤 + 建立資料夾 + 首頁 + 網址無效 + 桌面檢視 + 功能表 + 找不到網址 + 垂直瀏覽 + 在新視窗開啟 + 電子郵件 + 捷徑已建立 + 數據連線失敗 + 自動完成表單 + 允許網站請求存取您的位置 + 週四 + 重新命名資料夾 + 已從書籤中移除 + 書籤 + 在概覽中開啟頁面 + 符合寬度 + 7月 + 數據網絡 + Unicode (UTF-8) + 已加入書籤 + 歷程記錄 + 上個月 + 完成 + 編輯書籤 + 刪除所有儲存的密碼嗎? + 清單 + 加到書籤 + 5月 + 安全政策限制使用互聯網瀏覽器 + 3月 + 網址 + 無法加入書籤。書籤數目已達上限 + 總是詢問 + 儲存頁面 + 擇擇字詞 + 顯示安全性警告 + 建立資料夾 + 全部刪除 + 刪除選擇的書籤嗎? + 清除個人化數據 + 清除全部瀏覽器數據,並將全部設定重設為預設 + 顯示網頁上的圖像 + 字典 + 預設檢視 + 按標籤排序 + 安裝網頁應用程式 + 關於瀏覽器 + 啟用私人模式 + 剪貼簿 + 搜尋引擎 + 記住我在表格中輸入的數據供日後使用 + 無標題 + %d 個星期前 + 加入至主螢幕 + 啟用定位功能 + 輸入網址 + 手動 + 無歷程記錄 + 執行 JavaScript + %s請求你的位置 + 週五 + 版本 + 訊息 + 緩存 + 編輯 + 一般 + 已儲存頁面 + 允許 %s 以顯示通知 + 封鎖網頁上的彈出視窗 + 儲存圖像 + 最常瀏覽網站 + 昨天 + 輸入標題 + 12月 + 已全部刪除 + %d 個項目已選擇 + 無法儲存圖像 + 訊息 + 重新排序 + 自動調整文字大小 + 刪除網站位置存取資訊嗎? + 清單檢視 + 移動選擇的書籤嗎? + 記憶體不足 + 記憶體不足。請刪除一些項目 + diff --git a/res/zho-SG.xml b/res/zho-SG.xml new file mode 100644 index 0000000..1d98f36 --- /dev/null +++ b/res/zho-SG.xml @@ -0,0 +1,345 @@ + + + + 网络通知 + 拖动 + 未找到结果 + 11月 + 粘贴 + 页面内容设置 + 个人网站高级设置 + 用户主页 + 窗口管理器 + 自动 + 清除历史记录 + 当前页面 + Close all opened windows and go to the homepage + 接受 Cookies + 共享 + 中文(GBK) + Latin-1 (ISO-8859-1) + 开发模式 + 6月 + 载入图像 + 完成 + 设定 + 巨大 + 数据连接性问题 + 8月 + 将当前页面设置为主页 + 设定 + 删除 + 日语 (SHIFT JIS) + 储存的ID和密码 + 开启文件 + 不再询问 + 保存用于离线阅读 + Add Livebox + 7月 + 创建文件夹 + 添加 + 高 + 保存网页用户名和密码 + 日语 (EUC-JP) + 下载管理器 + 4月 + 中文(大5) + 大 + 网络设置 + 关闭全部 + 选择项目 + 全选 + 重新载入 + 后退 + 清除历史记录? + 无项目 + 文件夹 + 定制用户代理 + 桌面视图 + 9月 + 复制链接 URL + 在新页面打开 + 周三 + 无书签 + 添加标签 + 查看图像 + 通过电子邮件发送 + 不允许 + 显示新打开页面的概况 + 大 + Picasa + 缩略图查看 + 在页面上查找 + 密码 + 标题 + 文本编码 + 已删除 + 设定 + 已选择1个项目 + 最小化 + 标签 + 文本选择开启 + 新文件夹 + 已添加到书签 + 允许 + 方便阅读 + 显示图像 + 自动 + 10月 + 代理服务器端口 + 编辑 + 是否删除浏览器历史? + 输入文件夹名称 + 通过讯息发送 + 查看方式 + 周二 + 周一 + 多窗口 + 已经存在 + 复制网址 + 记住首选项 + 清除位置接入? + 删除所有 Cookie 吗? + 是否删除全部已保存的表格数据? + 网络故障 + 停止 + 在页面上查找 + 无已访问的站点 + 周六 + 下载 + 添加书签 + 是否删除本地缓存的内容和数据库? + 失败 + 关闭窗口 + 中 + 最后一周 + 无法显示网页。服务器无响应 + 删除书签 + 添加至剪贴簿 + 更早 + 上一页 + 更多 + 移动 + 昨天 + 选择模式 + 未标签 + 已创建 + 请插入 SIM 卡 + 书签已移除 + 清除网络通知许可设置 + 共享链接 + 设置网页表格自动填充的文本 + 确认 + 小 + 复制图像 + 安全连接 + 格式数据 + 访问最多 + 选择 + 文件夹 + 无法打开新跳出窗口。已达到可打开窗口的最大数量上限 + 允许站点运行 JavaScript + 自动刷新 + 新窗口 + 否 + 允许保存站点并读取cookie数据 + 双击以关闭托盘 + 播放 + 已达到最大标签数 (%d) + 加载中,请稍等… + 取消 + 移动数据已禁用。使用 Wi-Fi 网络连接,或启用移动数据 + Cookies + 空白页面 + 搜寻 + 2月 + 禁用个人模式 + 清除缓存 + 密码 + 用户名称 + 在您的移动设备上轻松查看 PC 网站。该功能放大文本大小以使其更易于阅读。注意:文本布局可能变化 + 编辑书签 + 清除已存数据 + 是否删除所有网站数据和位置许可? + 全选 + 从不 + 选择文件夹 + 最新浏览的网页 + 开发者选项 + 源语言 + 书签 + 清除 + 今天 + 是 + 粘贴 + 下一页 + 无法添加至主屏。该网站不允许预览 + WAP UA + 无法预知的失败 + 是否清除网页通知许可? + 周日 + 已储存 + 双击以打开网页 + 额外网页信息 + 正常 + 已选择%d个项目 + 添加到书签 + 查看图像 + 正在开始下载... + 空白 + 书签 + 字体大小 + 前进 + 确认要清除历史记录? + 清除所有 Cookie 数据 + 互联网记录未储存 + 删除浏览数据 + 日语 (ISO-2022-JP) + 复制 + 文件夹名称 + 阻止弹出窗口 + 已同步分页 + 添加至主页 + 储存 + 无效证书 + 匿名模式 + 1月 + 隐私和安全 + 打印 + 此站点的安全证书存在问题 + 亮度 + 删除? + 字体大小 + 自动侦测 + 记住表单数据 + 删除 + 取消 + 安全警告 + 下载? + 搜索或输入URL + 清除表单数据 + 记住密码 + 进入记录 + 今天 + 拒绝 + 隐私 + 更新 + 网络剪辑 + 清除密码 + 设置为首页 + 取消 + 超大 + 通知中... + 谷歌 + 最后 7 天 + (无标签) + 总是打开 + 历史记录 + 再轻敲一次以关闭互联网 + 输入书签名称 + 需要认证 + 保存链接 + 永远不再显示 + 复制至剪贴板 + 重命名文件夹 + 自动储存ID和密码 + 所有默认设定。 继续? + 手机 + 选择书签 + 关闭 + 小 + Reset to default + 韩文(EUC-KR) + LTE/GSM/WCDMA(自动连接) + 重命名标签 + 创建文件夹 + 主页 + 网址无效 + 桌面查看 + 功能表 + 找不到网址 + 垂直浏览 + 在新窗口中打开 + 电邮 + 已创建快捷键 + 数据连接失败 + 自动填写表格 + 允许网站请求访问您的位置 + 周四 + 重命名文件夹 + 已从书签移除 + 已添加书签 + 在综述中打开页面 + 适合宽度 + 7月 + 数据网络 + 单一码(UTF-8) + 已添加书签 + 历史记录 + 上个月 + 已完成 + 编辑书签 + 删除全部已存密码? + 列表 + 添加到书签 + 5月 + 安全政策限制使用互联网浏览器 + 3月 + 网址 + 无法添加书签。已达最大书签数量 + 始终询问 + 储存页面 + 选择字词 + 显示安全警告 + 创建文件夹 + 全部删除 + 是否删除选中书签? + Clear personalised data + 清除所有浏览器数据并将所有设定重置为默认值 + 显示网页上的图像 + 字典 + 预置视图 + 按标签排序 + 安装网络应用程序 + 关于浏览器 + 启用个人模式 + 剪贴簿 + 搜索引擎 + 记住我键入表单的数据以备后用 + 无标题 + %d 周前 + 添加到主屏幕 + 启动位置 + 输入URL + 手动 + 无历史记录 + 运行Java脚本 + %s请求您的位置 + 周五 + 版本 + 讯息 + 缓存 + 编辑 + 一般 + 已保存的页面 + 允许 %s 显示通知 + 阻止网页上的弹出窗口 + 保存图像 + 访问最多的站点 + 昨天 + 输入标题 + 12月 + 已全部删除 + 已选择%d项目 + 无法保存图片 + 讯息 + 重新排序 + 自动调节大小文本 + 是否删除网站位置访问信息? + 列表视图 + 是否移动选中书签? + 内存不足 + 内存已满\n请删除项目 + diff --git a/res/zho-TW.xml b/res/zho-TW.xml new file mode 100644 index 0000000..e2a0c59 --- /dev/null +++ b/res/zho-TW.xml @@ -0,0 +1,345 @@ + + + + 網路通知 + 拖曳 + 找不到結果 + 11月 + 貼上 + 頁面內容設置 + 個別網站的進階設定 + 使用者首頁 + 視窗管理員 + 自動 + 清除記錄 + 目前頁面 + 關閉所有開啟的視窗後前往首頁 + 接受 Cookie + 分享 + 中文(GBK) + Latin-1 (ISO-8859-1) + 程式開發人員模式 + 6月 + 載入圖片 + 完成 + 設定 + 大 + 資料連線性問題 + 8月 + 將目前頁面設定為首頁 + 設定 + 刪除 + 日文 (SHIFT JIS) + 儲存帳號和密碼 + 開啟 + 不再詢問 + 儲存以供離線閱讀 + 新增 Livebox + 7月 + 建立資料夾 + 新增 + 高 + 儲存您的使用者名稱與密碼 + 日文 (EUC-JP) + 下載管理員 + 4月 + 中文(Big5) + 大 + 網站設定 + 關閉全部 + 選擇項目 + 全選 + 重新載入 + 往後 + 清除歷史記錄? + 無項目 + 資料夾 + 自訂使用者代理程式 + 電腦版檢視 + 9月 + 複製連結網址 + 以新頁開啟 + 週三 + 無書籤 + 新增標籤 + 檢視圖像 + 透過電子郵件傳送 + 不允許 + 顯示新開啟網頁的總覽畫面 + 大 + Picasa + 縮圖檢視 + 在頁面中尋找 + 密碼 + 標題 + 文字編碼 + 已刪除 + 設定 + 已選擇 1 項目 + 最小化 + 標籤 + 開啟文字選擇 + 新資料夾 + 已新增至書籤 + 允許 + 可讀取 + 顯示圖片 + 自動 + 10月 + 代理伺服器連接埠 + 編輯 + 刪除瀏覽器紀錄嗎? + 輸入資料夾名稱 + 透過訊息傳送 + 檢視方式 + 週二 + 週一 + 多重視窗 + 已存在 + 複製 URL + 記住偏好 + 清除位置存取 + 刪除所有 Cookie? + 刪除所有已儲存的表格資料嗎? + 網路錯誤 + 停止 + 在頁面中尋找 + 無造訪的網站 + 週六 + 下載 + 新增書籤 + 刪除本機快取的內容與資料庫嗎? + 失敗 + 關閉視窗 + 適中 + 上一週 + 無法顯示網頁。伺服器沒有回應 + 刪除書籤 + 新增至剪貼簿 + 較舊 + 上一步 + 更多 + 移動 + 昨天 + 選項模式 + 未標記 + 已建立 + 請插入 SIM 卡 + 已移除書籤 + 清除網頁通知權限設定 + 分享連結 + 設定網頁表單自動輸入 + 確定 + 小 + 複製圖像 + 安全連接 + 表單資料 + 常用網頁 + 選擇 + 資料夾 + 無法開啟新的視窗。已達視窗數量上限 + 允許網站執行 JavaScript + 自動重新整理 + 新視窗 + 否 + 允許網站儲存和讀取 cookie 資訊 + 輕觸兩下來關閉工具列 + 播放 + 已達標籤數目上限(%d) + 正在載入中。請稍候… + 取消 + 行動數據已停用。使用 Wi-Fi 連接,或啟用行動網路 + Cookies + 空白頁面 + 搜尋 + 2月 + 停用私密模式 + 清除快取 + 密碼 + 使用者名稱 + 在您的行動裝置上輕鬆檢視電腦網站。此功能可放大文字大小使其更易於閱讀。請注意:文字版面配置可能會變更 + 編輯書籤 + 清除儲存的資料 + 刪除所有網站資料與位置權限嗎? + 全選 + 永不 + 選擇資料夾 + 上次檢視的頁面 + 開發人員選項 + 來源語言 + 書籤 + 清除 + 今天 + 是 + 貼上 + 下一步 + 無法新增至主螢幕。此網站不允許預覽 + 使用者代理 + 非預期失敗 + 清除網頁通知權限嗎? + 週日 + 已儲存 + 輕觸兩下來開啟網頁 + 其他網頁資訊 + 正常 + 已選擇 %d 項目 + 加至書籤 + 檢視圖像 + 正在開始下載... + 空白 + 書籤 + 字型大小 + 往前 + Are you sure you want to clear history? + 清除所有 Cookie 資料 + 網際網路歷程記錄未儲存 + 刪除瀏覽數據 + 日文 (ISO-2022-JP) + 複製 + 資料夾名稱 + 封鎖彈出視窗 + 已同步的標籤 + 新增至首頁 + 儲存 + 憑證無效 + 無痕模式 + 1月 + 隱私權與安全性 + 列印 + 此網站的安全憑證有問題 + 亮度 + 刪除? + 字型大小 + 自動偵測 + 記住表單資料 + 刪除 + 取消 + 安全性警告 + 要下載嗎? + 搜尋或輸入網址 + 清除表單資料 + 記住密碼 + 前往歷程記錄 + 今天 + 拒絕 + 隱私設定 + 重新整理 + 網路片段 + 清除密碼 + 設為首頁 + 取消 + 超大 + 正在通知... + Google + 過去一週 + (無標籤) + 永遠開啟 + 歷程記錄 + 請再輕觸一次以關閉網際網路 + 輸入書籤名稱 + 需要驗證 + 儲存連結 + 不再顯示 + 複製到剪貼簿 + 重新命名資料夾 + 自動儲存ID /密碼 + 將所有設定值設為預設值。繼續? + 行動裝置 + 選擇書籤 + 關閉 + 小 + 重設為預設值 + 韓文(EUC - KR) + LTE/GSM/WCDMA (自動連線) + 重新命名標籤 + 建立資料夾 + 首頁 + URL 無效 + 桌面檢視 + 選單 + 找不到 URL + 手機檢視 + 在新視窗開啟 + 電子郵件 + 捷徑已建立 + 數據連接失敗 + 自動完成表單 + 允許網站請求存取您的位置 + 週四 + 重新命名資料夾 + 已自書籤中移除 + 書籤 + 以總覽模式開啟頁面 + 符合寬度 + 7月 + 數據網路 + Unicode (UTF-8) + 增加書籤 + 歷程記錄 + 最近1個月 + 完成 + 編輯書籤 + 刪除所有儲存的密碼? + 清單 + 加至書籤 + 5月 + 由於安全政策,使用瀏覽網路連接被限制 + 3月 + URL + 無法新增書籤。書籤數目已達上限 + 每次詢問 + 儲存頁面 + 選擇字詞 + 顯示安全性警告 + 建立資料夾 + 全部刪除 + 刪除選擇的書籤嗎? + 清除個人化資料 + 清除所有瀏覽器資料,並將所有設定重設為預設值 + 顯示網頁上的圖像 + 字典 + 預設檢視 + 根據標籤排序 + 安裝網頁應用程式 + 關於瀏覽器 + 啟用私密模式 + 剪貼簿 + 搜尋引擎 + 記住我在表單中輸入的資料以供之後使用 + 無標題 + %d 週前 + 新增至主畫面 + 啟用定位功能 + 輸入 URL + 手動模式 + 無記錄 + 執行 JavaScript + %s請求您的位置 + 週五 + 版本 + 訊息 + 快取 + 編輯 + 一般 + 已儲存的網頁 + 允許 %s 顯示通知 + 封鎖網頁的彈出視窗 + 儲存圖像 + 訪客最多的網站 + 昨天 + 輸入標題 + 12月 + 已全部刪除 + 已選擇 %d 個項目 + 無法儲存影像 + 訊息 + 重新訂購 + 自動重新調整文字大小 + 刪除網站位置存取資訊嗎? + 清單檢視 + 移動選擇的書籤嗎? + 記憶體不足 + 記憶體不足。請刪除部分項目 + diff --git a/shared/data/nofile.dummy b/shared/data/nofile.dummy new file mode 100644 index 0000000..e69de29 diff --git a/shared/res/screen-density-xhigh/mainmenu.png b/shared/res/screen-density-xhigh/mainmenu.png new file mode 100755 index 0000000000000000000000000000000000000000..8c332d1b5e039e762d15620c0e3b9d931a516acf GIT binary patch literal 57662 zcmd^|2Vhjy^2X05o8BwEcck~;dyy_xssf6L?TO{-0}I#{ks=5JiXaHm1Zh&FBOoBX z_nJU@&;GyP4bdow37~-g^WM54xqJ8CGiPSL`DW(ax7$A0)WCH*eT5|5MKl z>HpXhj~esB!ATtkbnI{;w07Ll=mss{8um%cA?-ul^S5vC?y%rdMN1a&@Ne-}fvE>V z+N}v_+}NIL)0DTIKlotSdm-&gdB5Yi-|cjPX&=1)#ar)eNjmZJ7lZb$h&#J2^}Bs_ z&V3U#Y2gmH)$ZP7n^kOAd6@Ut4e|yYe|_V+4JS^QsW;rS@KeU$ec>Yoo=quaGx4w1 zs`Ws@)owo++Y7tB+|BCN6IYkZJ<{QKvB9T3Y{TBLt$uD)wU+L~f=#`bK4|cjsn^6d zY|{9m9n2KF>AkgI-&3Y-Y16yd|IY3qkGc#|AS-sugYk_h1Hs#vA^=1iUf7$fjRH)Dk=8aEH zaFfW+wIUvv>wm7KX6n-gwU!pH-gtO-_tHC zrOGbMIjpAZu)(R*iiFz-_Vk+apSXAXFYv4PotbjsVCSf(n488^KU#X=z?svh_qSNr zpnIP!onJ{Eu(sFg&M8kMyjm+cF6Q_TCkqd+@bK`a_W0v#e~NB3J@<}}J>KYh`0R&G zlb3iolJo2?xUPBMrCmw}pK2HQ^aqV5ycbnrdcn6Fd|YCEkzI~QP97_j9}QK-HqCCD*-)J(;>*q(FD?j1G&?yster8e5+V54F zdhX}h1N{zuSf}B}a;wj0cdNMWiE?E&{McZAwNf6V`)!?H@Eh;h8*chmX!PcTj|^JiR{fJw`5)Ny=IKeNe>`3Bbgt6{BD;G|>Ra#WFXKC$EZ%<0<1KQW z@jp}PjO(N0E7b4w#f0`pW=`!GQ2E1d4dzT;-2U5kBWDIx`p<;w+g=ZC-g5e!X=8Th z9GGoj++*LKe{Na8kuiB69QSkQU0W|SJwNWebM#PepAjLiZ+vS&@f;JgyJa7cV`%no z$G7?_$L@D?Z0uOBYWYj!&wc9m>5xucN-i$>-;hyTJjb*cQ*=zOl4U!7J?pDkM`w9; zit4nrsFIQ6y1FJotSnl-8Ir4G3|4EVa{%#pJO%pB6O?w7B2O?lh3 z>yNE|Y}4?|c2nl}I<;a$ey@Hx7QRrbz#yO5BmOhI^17n)w;lNJ^Cg#$Psy|V-P*Ih zo?5+O#TFGiFKi$6N&mWTr^Y`W|Jid7dYmghV_ej$?;H)jQsQKZTwhgcwY2=BJqFDh zJ8o>3+0ACRo89!%$|`fiW=#5OW#i>tlZN}&-`Jv9k77*+e7N0Z(zy-?IvkndIU}@n z?HVz2%gh=yJ=fIbjfSpzaz^<0$v^ZQHo4W18Ao4Sc`h;cD`itUrVLJ;5!2MWi|az~ z!mfwBw`Z@lzVg#UYUL@r@lZs&h7bQ(ui^AQWBQCc@y4j7J8ONhr^)+G{N8(PLyuF1 zPYvEMc*7S(U5ged+OqY<*5MP{w_f^HiLYw5s@ZDewx705+qU=9$`fms-&f(>#B&q( zO+2=wcefY1m0CP=@%N85UvRqHS6#ywuXys!Zq>U^@6xH;!wZ|tnKY-!-sN+a&j^^Y z^uf^&&Yrw?z>o7H7H?ks^^zR(&g^$RGPgPeh*|cP9n;(Zv?)B!ehW{(%c*OCN zW2c!htcY!Z^V`Gg5AW`j6#vqH3#|H}ZjD2a#x6JzR{y;zOY4W!|M0arubo*lr@+8X zmp__QAnx4w?W49o=KE&bSI_VL*{#pnKJWhcs&}zBN50v4MBNXbdaFy$o#n?>9=h{z z!)K2*N^CT?(b0(m%D1WhZRr-3OV*iH=J8qwt1hdwtnP*~{k#6Or^}=+&7WwQyLy?D zbE`c0#1F@k!=gr>oOIIb)XUk%m)-R6Q!h^4zBc;J8KGa72`p7(Y`s=*Jy`9NtM&a$ z&J2C8NMz8^A|H6ZxHiw)0R_wMtg`d1{SAAR%==(uvy!b}`uOsw6_sBsyuRY}QfHRF zQS9rFR}9J zpL};o*}P-iHV<0((Kjw#OM5PE@YVT_-HPuk>9%0Nqn-P&+V=LA>SJe5eqdYJPYbsk z`l#w>S3Y-y1+EP|@$us6BU*MYou|v$mESyGeL=0KUp(Y_D#Yc15f8b3Q|tS87MC2n zr_JoJ&g163y0Yj?tp^S7xn|32YreA$y5!Z#^URyCTspij?BO2lWXLVEvr5~{K=xPXRllO$d3NI`d>JEwDjcezGG*NJ3G$z zNuL7;7x^4}Xi->9Y~w>^$89TqX!+}l8!r7~Rjuz=JUV0Z_H8xmcKotqbjQSwRl;{2 z`L55t_$POU=X!ZXY^BS44s~Ay&65_!)t&qHtPAmDlLkLL z=fS~Ghi!D;<(%SH$anF+rN8XSv#WN;_8;zj;8IiHjro2^opfbrX`d=So!@Xpzd*ANM+Wb^!=iZA) zUrKIzD4*YFm1=c;u|-tJ&5s?t@Y?Rt10r|4H)+hIS6(fXaJcuOX^USz*Khl=$Nh#} zS?2%TiCv8y@1Co5WTx!};5pw8cSp73prUV|?_cd=IL=-q8LF8^%#gt<$5 z3|bog(#r2%?jLs{*W{|(k3_G0F(TBlchBVNwU4ZfdTB`9`nZ^5p+{bQrdZ1Mt;-J# zEfzj!MVl49qU(j#KhW^V$USwtrykya-g^J~SMn9Akwr1$zp?R)+am=sH>Hp^cUvbC4g!wTY zex8vuI>+eI4!iUCsN{YXOCJ*6%-^qB`_{(1RK%EJuN#x#(E9~p(sIUJ>}^bq@y28u z@^P>AO^n(5So22pJHB8uUH5)f!sc-3(EE7UY&IudzD=(`zVkaq`g_{H(*B!%)4cOa z&G@c4;otYg(EVR`o%ZW~a}WPQH;^to1nA7mz5R&%&H=f~*z9gaY<8Et#>t+~I5`Ix zn=L@{_Ls!$dM5(oUXvxSSe=CTtHzOf#ia5|KIuqKI^jr8IFxeb%r1S+aUGkY7s9pP zCFt~ppkLkF1O;rT}|E~ zcT*$3pULItZcarenF}!~rgAPXQ!LcOoVc23ww{hLXCe};lch>TQSpf;Iw9G_#3$*M zY$D?lO+;*hiA_k1G%3lu9Z3mWQxju0ChlFaI(g$4k-829%nKRc6GBc~=enW{q(sc1^&kcSC#cNugd7Cg#<}t;e|P zcK;lMT--fd6wB`CUOcCt46lm>lw?lIe4dF+G)XDfO9oF{LB!?56@ty>m?X3QM6~Ht zI?z9DByr1;py$yd*f zN%-=yjXGJ9UTE+27n!MV%KAa~lu$DY)3fi?Ha72oA->+;)!LTJVHy+7uz3mpS2-&MtrJX*YW>#FTU`Jxfu_;&72C0F?&vjned3H?T+ZMk+G9|FS;h&ztt??NT~m4NTUm|gz4V> zlM2p(c}8Xn^sn2$c3u;aFJRx>j&#rrPC z8_lF%nfXN4k3n0T6!kTIDh8Wf=i|(HEjYVObk$|6Lh21B;XWItPUy~Ak>V^2} zPwdcrC&?oJV}R-(5$ZMVbhg!cG|;nb^EchSeEKwbAcymST6xUk1CeHlK+Nj`HAREn z&D*QbnYG8F%){k_O^agwX8)yl^ZmhyOq)==nS#))ODYSW$nEE9+CLCrS(1$>qs@7N zwuEGdIU1f|3I@8FnkDm?%U7f7?mXeS&Uw(>&trEkd0BH1uCMq<{O#W!(xhvrcfYA^ z9A3fi7tIxvyLXMeiYI-|oL{b(uYL|UJu3v6|24{~kR!@Gx!|P9;p<|?wasUOWI|v6 z;jEb_a}27DO-!{WFy-%3!AuA?hmVWtB@KPBq`%pw&}quH%O*TF#Uu*AT@*+I$f3z) zb9kDHIX%ozM=zQKXTna~qAx!iJt@uK-bt<1{9bp}n8Uwipq(0aTjg&4UW4Y2^U0QH zX447n~W7@=UF425p$Q<&s&vKf-h<6=2?L zk=ryZ>|@21f6E1D;-opX*q*2nYKGLzW=;u>f4J^~@%ONs5zTU$uH^!)SeMhdD*inc zk!WV@x@tm#0?cC#i{}o=k#{EZzQ&(em@Ah#;k7`{vlrNOC zPn(MQZEmh^mSCb4|Bc>wQB0mOPiulelb`=|+3Y+QYx+vSEsFb_HAkbYP^4IhyETzD z^Gl$1Ckx%)(w*Mshd|eDN(PumDu-BSn!D$U!D954-)GSw@KpWVS!!A-x2Gwu5KG3z zTBHN2=Q2y5tYRyXFMA)4YTY(6FU-%idAiLjyZ+;MT&TKG>s&=$Ad+a}--Kpk9$; z)r!ir9*Z^|N(UIs*GF36+t0+9-ZEni3j3Oc`>vX~GR1WZ`j|(ngqY)363iEhEwk&` z7wY9Od8D=T_g=9Cjqkb}Bb&F2sVreZNPN2aqQb2hS)3p(KtHqNY^>!XV)VBrB0-uK z^)p_s&K5ErST#hkt*hB^Jk}J?o87dplE0|tWhL{&JYAcwJ9Lb;qsh|Rg91ox z1xE4*xLN{!Z|!+=C@lVt-h5V0hR<9npa0)wXXF+xn*f>JTCyI;1dc|mI%hTsFm)~y zs1Pihg}V7Y!o})rJ{4_+WT&nsm{*z=Hq-l7@bc08Fi%GFb*BY;$I!1X%-L4Dm5*ng zexK#f8Qfu3-wI~^saV1NOQxl63^R3DLgC+-s=+m~S>T6ofDojcd=jxG0{v2i0jBwo z1kQx5JRE7|$LdLw33(2OCES#V$cnHsd+bFaTrfa_Xi0EdamA=GSKDN9*2xOBmkA!$ zIH!dTmK?ZhSs4Ho#K*_$FIpJlncBHbp+Hx&{K# zfXZAT{udX0M}%q#v`UWv&#Dj2E}1u^-t2zm(}0i6Y*8^U&(_XvO~kv>HUPxyO>!wF z^|FA_H`lbbzs&Al2^WEKjJy0N=$J_BQKe&B1xXFn?qQ^#cV{e6A4rSi1$u@z&S7!2bHpNT zJQ-uE=J7Ul3VK_y-*+MNM+ z!Gha!A>PcCFqa;RFrgCMQwq@nJeNDFw0z)hnJi)H07w zx?_B#t9VdQAgQX)WQNf$w6=w`c7wnLnG^Dy1qB)wC{!6KYH*9R)GnVyitX!NSIi1& zdSpVH55wGD)g;_afkNQp+k*w>5G-sLlpxd~B*fW>B$?e1OH&EY@V8`g5F&nb`i^jG z5kRT{^hi(u`ks(kCM;U5g`F!j&=k!TT#tFZ9aNlUO|=B742yTqac^V~320LwM~Eq+ zn}gZ|xgs=HB4`kkG)*)bps2s%HH0*6`(?`n;U}j{qxZ>&a+6SNyF@m_ zcT*!Xem6o4^|o6A0;ItrJyb@7gO973wDpqNt~eEq>{2$!3cJuqgdMC@AUNTq{4X>o z3!U67KxwNiTH_*q<`DtJvnsv$Sk~*b7WDgVOPZJFrM5ZPbNq;yu^oqMzO$SR$dab& z3v_$N?(@jBo_+yAPgNxGf!C(s=mP4tJ|mw&VHdE)GVIU=C76b-v&7?;4)ce)>}T26&s=(_~aUrB~+UYgw2P zvP`%l!ZXMeShDZ6ka0_$r0M+a^_Az$Y`Lsv#nQ+a*r{=<)@V{XkBxcu>NXlmk;;%v zk4y^{vumr+$uBji;M6+Bb9qN4+AK;BvqES>Yzf(2M-cy8`4otF7!|0rvr&m=s?6>l zfg^61La_AOqD)`uT|5wA1gBdikC&C9@fQ#xR6#)8V~u>?7M8#=QF4<$h+9Ln@Bx0f znRnNmx3W@2#b@_Y=?&J27}nyqt7kJw`UU=Z*SR=TqoBVT+N`K|YEb?uwkkbH0%TfN znL6;A*>&-(-u3-5`9q6FrMg%Z3ME23EQV;lKmmbuSJ8ar7pV&>ptudQ%Vc1ZV1?2( z6I6S*W6ku5&+K~qc>5@|p@`hXaq`MP;l_1{%ia zWZf{?SU>2;2~v(yd4o-Wzkg5fK9e8RDKlk;{}TOLW>*yp4)2insua#k-5c>f^P5UfwiIdjjF^$0yIC$WMYcJ2TN6zfgdfS zq&W9Xm_p(olgqr66w1eEG8Zfa=8d{!!aS4!G;C#{bWTVXK-rEnu@(|0TA+yT$p(dN z!{^7oV=LQcrQ~t-uj1F63iVgBTc+8YS~0n=COexK>t(YD`L~EIWjvEP??aPl;Q`nnMs1M=LfNJK!?2Nopc&0w!4-8 zyz%Yc+HV0g06a9Oid@fY%EpizMlj56KcV5q3PsR903upU{0U(KBHk{|V@{9)?H|k+ z=lrvgE-o@c#O%5A^l9hy*qpKncOPS&!>*RkC&DIoDe(}Q}#b+yQA%?B3u#U9hbZHo%64OjhnamU91M^1YfMA(Z z7RFo6a$Cn>a-krh7df7RIp=qY&K}0!&$pqcy z5-de+&(_IiP~t*40*%c(_$AHnpK9w3g{luYd-R>sF3{hnT;5<`Q(dtcs}sM8vuEXO zJP~6-`)COe^MeUFq8r8W|Jz1onOnGPw3QU%a)H7wGN}j|u=t5W95nDhO0l7Rqa<{y z4Ii%_qPiw8i_D)S#tk-#%oKBlzXf1DE^`jUG){|v$bq?}Dunzjqmd{`IAf9_P_90n z9wuk7Z+VZtQ`zn4hT3|aP=D1@ufQksg$9`YGATG}Qb|9bjk9b#G1bdUPb(i7p?s;o zb;HDQ|Hgr^(4=b0^TJhsF3W`PBSwV}Ci#zLf=zosX~k*V!mKtC;&?(kl;IPR^_1#B znPRF(>oe3aQItmF1JVJPh0pCNrU}I%k|5rN+#s`q1q5I<(|ixETfjJZ1q{}FyXZv} z^t*ALQ1w?Qw{ByqdwY3Sy%6tY6-~V_|3NAVMg*1wx{u5RN#X{o#m%pj6b_x3_1`q` zZ|#)KX5!&}iNm?Y^h$@%WVtpdD}^f}=}pfMps|R0ToE!cDcKi@7x-bi@Ni*Y?+RBj zKpN$UAO1l8nBLfDrRlu$8O{qo3~L2$`Ao%b2)B;fP)g+vFuvZNRo%Let&Y6@IOo^> zLI>EL{c}E^Kbya`nm~A56z_kO8D=<4e}li|rvLc&KYrQ$_V4QI?LlB@*W{m+VpC{B z2Fj}DP=W%jh0+_KN(bta-j{HAN1(+8gdi(ubOs1vu746sL=6*l&Xl)69|9~P9mvH( zL6VCl6s&)(+L9O+|BSHFbgDnzTy@qIm2Y+S%kc#A`s2L*PN*`yPR@;<4t8<(Xc_Bp zy=g4PiAZR}^Ah46at@( zWb5Y|KOBy-w7jFb;L%$Ab3T7J z3zT81IqwyPRQw%mBa12k-U{yV^wQB!TMZQm@&9t)S_f0GV3nNe6EvI1IN)aww3 z)sZ8APB9cYkR*v*(#gb?*{ti4ry9mYR z)Lc=g#R7mT1myyJ7*8rx$txid8g7)PB6Q|$l}t6Jm;!Oa8RAvUJEq#wS}g`*;n}L) zVllm;x@k=GzOWP{d6jo*H=>YE|Eth43f0*;v`~k}7y98LTkdIlWFc7ARCMp&J?T>&Z+BBb(*`>{dm=?d;P68)c zvPoKx(Ag>hA|kim;hm9F$(;T+duYLqn(JR<*53)$$<@74_5iP60aChH@G-1H{0Fqw zF`+dO8}+-?9MM)la+mmx3!}~k^9(ye(HVY&g>kQsBBEBg$Fx?73!3m`D+VWhhIxb) zVv^Y;gt8L^h}$8T?5ZsS$k6POV4(_0e1K#rAFZuz4$xXmH3Fp75ns#vVBVR-ZbI2m ziDZ57&*`x+CYsM+b{|)4jH%|l5EWWy#^1-&IJvktxK60}Q|D?u{G46fs>V57EbZi^ ztQwpCN3IkTgg{vx?7hI3v3h~n#I3ASRxx$3pyFZ*r2nIOr8ia2N;8z3Zu(vyv`SLF z0BWV7xQ$ROV2Pd?Cc3016i@>IB2kWzX#67QNluj{H;aN29+K%03Rt*jl(|AN09?!! zzL+_IP{6FR@DUim6A*@lgq=d@04$37SV(P@uLYEnECI_9DkUhQL2k%T^J`6Vx~4k0 z7H?2DcaXO$&>Oq{a{U~ZIYrf*3OKMLiPO$zsKLo7Bup^zDuvoV$aGN0L*kg5Nfc?J z|KHPtiKIjm1WM8ZYLv_hi`Fua0yh-Z6&JNfddB%N&_S!h7;1KP%7rLh>&0fdUCV3N@;a-IksqW=jg z0|Y&qPTx=~HBO}gEJ|Q5ScTvyOgg|~jt~|;e6|FRsfO@C`*Cqt1ItwFGw{P`?H08~ zwpCoqf&#Zh3RHQxyBXxC`L*Pk4p*IRF0NHv-CQlo4~^u)$PEJR$(f>kaGjVJRu=+B zfPXf)U~;T1g8N~xC}R>G7TZJEQA>Uh--TJFqJhcBy?n6lyfrUqF<1eC{wVXv#v^dO z_&S7+e`dQNEB@3mn05BG03ZRBzEehvE%(Ukq}M%R-Jl?Gb0bz=vWngTT+BIz30w2 zkjldq60=$*s;U?6QXy12>QYMgk!F4YN%r<{<#%<#S4V!3n-+0L!l>fQez(ljU zLCELy`FlOj>MnE+$|n>f{v<0!HyUOY^GN8yZljo8-bb!VE4oHQ>nr|*X(E=i2!3(9 z6tH8O$zDNJV5;$v=>$JMajncY=fz)QQgL@6WGYMkr#dL8LQFM&o-mOZn*QB%t);*Z ztp!B~`?#4n$x-{e?MJ9iHfNV&ZY&A;l=MMdgs)&wRuLhGyhi4R-N@D*kG!dn@Cndk zm~T)XF&<$M+r5F3@5N#?wDaI)<&I@em#Of)hz&ft{9Yp3)2Kpnrn00~4O31{^lRGx2~b113$tacX`9VU3HwB1AULyi)c(>0+w z=XbV4AKrLC*3S_n-*8RHm9&D+MJ8*bTJnRMfY%+3wsr~~s&JvIC_^Z{#e36AcwlpWkx3r6 zN&6>hp<{Mojow*v&Kyvj{&~{5mk9$8=%a#G zWq%2(?!Vk|*<=@-LcNU=r#Us3R@04wPN!h)I&L|AE7MK3`vxy=3bO&3fLZdEZz&P#rkKfJ z@tKEZURkNFwUUlV8>ti^>|s@b1h>i@kwku|w7=!_S$(uM-srpT=I_p^fq2Hxm#wZg zSfBK<`}_v(nMz?6Rc8; zewBl){t)P{pCm-`i}0WpJ0eq7L>EfKZkT)t?FQaj9OMcQDTLU4A=Z-Rbzl4s|6>28 zSaWiHyw#FP4KJHZZlG^SabaNro*}X@%mv&p_wk}O@WRxhUF22~I$;lm*sw(Y0Ib@f zazoDM4Ye-rIvZmFqlOm1x?=h93b{OF&O_za60Of9h!c3Cda%V(0k{BI-PF|F9#efR z(rS4rq-%j^mcg|8VKq(udRgWd3HvMA@|POpkl@Jarm%Gy#(8HD`||cqIrtg_vQN8EYRU5q(N4sntWMyg$Opn zr5jj`zx#JgC_ph*3)WwjP>XoxE&!IdHUbMYM-@SgmcR(79#hDJ*{Abi`x(-50Txxrd2s;`s5z^* zv_C@E1z19BAC&@?79YJ*Vd&2DibiZs@V{1l3nZ|e8_^8%yG#ufJ4R-KfSY7Fs}9ni z)j4s?MJvvFMyr#X`(W)wvs?ZN8jT59C?N5rRy7294_!QT7Z+PXh!c8_Qp~Z^isgrX z>-EgkMcv_pqBU_dB|NGR=ptwLGECwukprLU9$AFMr}X1eOtwdshQA+`pM$JfE%ON8 zKtOwBs-X(eT4Gk**XuuAP-TCtLZ0kaER5y)T8jr${fHIX2_u25;ZOpum{wb((VLigj5cpVCNarOxu3pvUoo|3Tt32kAlq zRzP{G0R}5@wkib_I8z`^?`Nkn{%Ro7&B-4pi70RPfSA}IvJ(8h|~S3F}tk#Zq9>bFK8nWwL5BFuvD0Cy6ULJ z$3LUBxG=z0&kBL+f=jC^gervD%O=K&s=^IQ#bMsrnRUY+3nQh)F*Zl4WU4FU2D0#y zWi`!<`ly1=UwazFS(O4*)(zAu!ejvD$vJ`^iES}ctj@+o#MH>A;H#j-6viq=rF|0w zB*qC?;FBS-pVIGW8PrbGS-P&Q+(TxL#kXUMFG%AoH>K<0cl>;_dBZ1DY{q>TlWQ3u z6Uw~62r(~!FlvEk$K)2r;ov{ z{PCPO`rVC=0VU&S5k>)#4s0U;zur;^nJxX`dI^hi!L4f%6W`*mk7&UY0;SDMgqf#> z0d4qTNndHSETDu8wMpqHi3m(Qa@2)d=2usonrzpEDFn^*pdSP_1b+&Yr@w^Ed>iEu z*9rbZw-uI2epEuHmWg!KWyNT0>GptPR&I`cmKtKJb#tI;vLKeJmU#hSjoWnD91s8? z4MsKtu!YaMp9W+N3!P*EWufrtP=(A3@h4`Nh=QU7kSrAzYysFrE)Av$@C9N`C8(v@k$aL)#`ji=ct}1Ei57^r>bw5 zS^)tQdBr~Amof49t9yOmD?zetWga0N$k12>f(Ql34DJsC0ospwq3eEvv^0-E4>2kx z9y5GN0F4qD3jW?%eb%yQBM;D;XolWdjWmM@54PM8_#XX+JKC%t9TcRA_Hh{smx zg2v0FA{15)*#^+rR&kO9$xUVZH|RnUI`JpuccQd*j6TCn;^0Xik;CQYDB)$Zld< zJJ+e2f(#7z(MRzoZU!?9AVYu<3&g^h>KdXWJ1V+}lcKQaL>1AC#QUU2aaWrq&=mP< zPpX_;gMNSsCX0@mpT?bnN7$<~t? z=pdG+g9Oj6)l(!u=(2%Y!Bh(H8K|}w#1B`I)`F^m?i6S}rOXM1Z3N}zbGloFVT2FV z=(113y);M?Y!EuVAWe(VH8v2@@<^2+i`W<|^b73@Rfqs#o)9#}Zmpz+8|A{-d<(9Z z2NN=AreXp25*lWU9!g-qA%s6RL8LR1qYksoul#HBIcF3$lbQQq8mKS^|3K0hZnz=2SosuICngyXfQg6by8c^$N1Imin$MV(gep5bkXG)h)7mEsOhF33$Rq(tjjdN~#&lI0Psq z$8@2p)-&mZ%|gT1qdXnWao4?2{YDaKZ)IcvHJA>}3q&`dfIQzfyH&I-zl#7b#i*Hz z)hV-$-z*T2c5|%G)&f@#>P1!Fm&#tSa_I@>g2_Q%6gc8$D~TWFMhF4QDf7eU*n5Gh zc>FVuK7qYKus6EqyYV|vG6bzEw@7KN(Ki3c9NeZ zFAdjAVL1c?85xuTe@s@Vr2rM@j*gX;N=`bi8&73Tr#g}o_ot*}4OIfY3yNj&akE)L z`668?wjPb6$p>Me1(al9GFXXQYa{V+MlT!w7 z>=eOIFKQEE3Tk}G5RslFIl@DGA!DNSjvvL!&Cpz~IuarB##=)6S9z(E;^+h^YvKXq zX)WoLi1Rz+{gkzF!LMd+Bq>V+@A$!w$yVMpr{XLCjI5(p(M8c-aS{$YnRv)trV;$* zl`v9%w3>j!EAl=Ra-RMJ1H=#3tQLa&n5L=@0;9MapJ( zx6J!8S%g~30=1S|!X=Q+fX)-V&)kjt14m)!4l5q#MZXcv#ntnA%EE-3Zv=*T(p2vX znipv;ixzOj!p^4l4f=2pI+YO3MD(mVN{5|%t+W>K$A{;m~dDZfDZ91W|pvs)k#|i=LHl1zyL>>BYZ7B2@{k}W|vTk49eFs%K!)Bzs%mp zKXDu;7Qu+c*7cVf0 zMWjk1jj#zf$PYPMLe+m5DxpvM#oZ}u6@m%Uo_M{e)oCQtL8buT>ZeeIfSXmsh2m>F zi}QpXS#kKPsKTq(Ry3eE>S2k^Ql(k_RZ(VWtZ;)e#@F!K5hI!53xWl_*VJD?9(5 zimxyo*m<%mTTexq&$rSQrb;*o5W$m~fHmqStz|{dmro&t;pgu9-3d`&gg6B411+E8 zY*orpV1?E;R?yCO&5%&jgLb|j!ehOFmxD}G7OwrDJeJm7RpDADb*eB&8U_iH2vRLh z{FoLb8d^#Ib%BIFPqBG5`Q6S^2ErmME$5UrFF~sFB76jQG!$66cvYKOB0o-+QK-p> z*R6?*0~hoA%&RNR5-W`_AkM^8ki7tcvyB}n6|G&Qv=!_~U0noz1+AsDk)$!K5&2a# zkjxG79O)-Ok45lHYk~5XPZ4>cNXM$UgRmexU~#~95dDq9{hWyH@}rKl-Ilz)tsNd8kLxQZ1WmT zz;8kYETwFp6Oo#fu-R2XY!+l{9gA{cGAMn7m{_FB2G}NSKlM5Qs%b)ORQdOm>A=TO zOG}p-yPrT*FVyNJ{lpF>)G!f$ekM)FWc8^OXo58<+#K~i+&pj|ze`$+?<5gGh?CW8 z|0j;e96~-EmJcO#Ypn_j(vMgmLcP3xX_+gI!G%$$L~LJPu`KS3m><6jKMWbeJow0U zQO>ga^i{djgv}{iXTtlUjlY^-eok>D#;@?oB3MeFMKty&T_mJ6+r$E%sIa3Gf**sPo@~6_EH=Re6vZU1g?Ds)~T@ z5GWiPjqT*pd`af5O!~F|-S1ox9pmIsX^>*kMhn@4WWfw`_7dSdLrEmUhBJRjjm4m`&|&m}-gN4fy8q^XM!Na#8*`wh2}dB^HPN~B6_vvSS<OJd93i0! z1>I;DzBY~EzpN^KyHzq7BNBtq1ZD_R4e3Da27%A^ZEY07>{ZquYK_8a$}9m`1nJkR z>2Bky|K5-05i^DrqHzjW!?p|X+xcX%C=zEseX1cSxk|7v=^cIK_plmo;d*(X4nC3U_r?ms$sfXl(t!;kCap(C|EkE0 zr__-R@egH2c_vke_!NXoPLVugnxWyA?!lo&PNEz_KSe9AQQ@>w6&}}#YjIY{Llr}y zd@bb6UYXjC>YoAel8>bym3aXip|up2??0nwq9?>HN!>7s9O^X{O1t;p3H91^B&S4O z{KVD6vz@m6xUCsV5pbb0j!7p~$IjMpnm)1qmtbkyYaF(;CL%exB70h zPXzI2S?y;C(?r+9XR>CnX_Sf5<4Oobs?nAlZ&IQzkI|{G^Oe8))C_ZynzUfp#>Dv8 z&Gyu+1E!4NgA$7~T8$@#UI|4SE9J(|Q{*3n&MlJ~D4v*9({5=k%|SI(>5!(ilzQm# zSqga~1-vjxPO8ozHiO6}7G5NOi&@L~o%iz33N0ltH+IHEm_#xYRO%C(aZ_v%!p5yJQkw-v+qUL>S zV<4{0A!3^<0KgIj&bNAPcjI$Vr6jf&?N{50umat3aJ%$-Qzb%Y1F1(k2Yb-6j0>^2UJA^3 zT&MbObR58ld4bfS(gCY?B~qoJl8X-HxvH4Z>&6X*dhMu`gn6$lN{o+QYfrs3GY63k zKq7`DlR{b!C=WYAAvb`DCmK?!LQ4VWh4d4vlT}J$oW9lO@+lDf5aDbFC5hgbuQVCR z9jR55m>Uv?Fpha)p;N-c{z{MzY;{E3O0op-#1;#_PDv&qHhLv;(FEL3OOf4;&@aE& zf_5lO)l+sO&JA^Oaa)&Sw>xJwZe=eBkS*yoMK+chZmQtg(prHdSQcV4Qf)I;P=?=N zXH9k?h3lou3$7F{l-|~J(p0Nq>BbAxy6*eoKe!u8dgvY}tYc0H>(~Nd?k{NwA7X`E zDTK`xnd*{?WA`18h&LCH{73irr&`MW-%L~adurn1kvo#(qo=s0(x#C$4S|b=z9U8> zEr-8gYXN`|X*9r7n%1%_W~9~O1=1tU^rdcwv>bqn%`))CyHt3V7QSTdI^$vi#H-B7MP8oR;#*!d?|&_fTB4f84fB9m)Y;U=Z}+MnHLHM2w&j9 zLHKAb){FVzu_a)VAf+RJIbiw=9a|fs_#L2R5p+VxbMyGALb0# z!qx)B<%D_``c+zy6yo{-609t3q-_sP zgt&&J;OR?2s->h7f?_pmBL3psfA!t>!{4d1qOgE)kNIR?Q{tn?GSAHSwRzW%nHyOW zDyPH@>n$l^$=ffa#z)O}NfL0n$!evD3}KS3Ctf8sgUh51kxD^QaBRbafI)&ZETgp+ zb99sQ-t0T?o4=(m*bMi{d@`>Ii{E~pdA>H^Ons(DmW9fhtuKnZ8lUv@qTVJUdW}5^ zjr|jC)deFUiliW=qx3UeFYtY_gvZmBY6>K@Q22tm1uOxo{`7o*_C5FG@6&~O?b@w* z)O=d=s`I0vzfP`2>nzZTswLY!Gah37Os0RoxLHPZgh765R+ph3z~Xm_Oe?*H4cC&wCFV$7z*gKIlEj;xEiRe>^Zw=7gXtS?TH zV8avbZf#u(RGn{kII1SwtxdQ1bJ~ysUx`h%8kZocn~CRybb!-DYpG%&le0t>g4E%p zKob8y8}?*bro`AyiN`j#b?p8woO!*SDYz}6^2OH#dpRj7zO`%7+OzB?wO*QFSFIS0hqhDm$^(k1LML1C|7$3VC4t%!V^=30{P7`$F1IaE=I^$J z%1M6J*tm#xE~T4Ka&=8@pCnV9F{=Z*B~-zOt`MO>y$#*pw9XT76T9j}obLa{pheL| zCO0)PW^Ur{CH)*n)?;#SOGDEqPUpUJ6Dd>dWIX)b-I_f8rp?V~hy-hM*hF$_kZxiV z|2V~G>?YD%4}qHo{HNp=#b!;ug*Dq-1&FPpfCTLwj%^XsPVjtZ5t zTY}X_1MV$ec-VLbe3WeW@=A63ttyenU(q_jb6x20qO{|n_6FkG084jpja_%M_rfon zv?-ZAIVRS`UKtX<_^mH=O}7-bq~FUwB2>QYnqcj2^#@gO_~)8tTs(>-+1=G!<75?T z^Eec?wj-y=Mg~oe>KV1E;K1&)tH}>_AIMzi;tY@mKf#mcTLq}t-LK$OtBU1j_ggy&Sx-8l(1N; zin{)bUQXKihWpn%OcOa@T>{;zIlL_my_pQ|xcU9#m!+Fy*QWnz=kV}Gqf=6DGFDT;!oS+uKp)+>ATT<;}wlh=m-xF&${LE1{yVasl+4EYK2!7<$XPz z91^B{rz0tTjfuMWQqroi_|7}3of#+St_zim(M6!OX~J#tY%80G-%Cy|uI2NG`Wa`t z9-gj}&^x=9Gfu(Z_p_5D$r7eXPTb*$ix`=-?EQuMHrNz};(y;A-4jAhpVn)_C5Ux# zY4Thfo4d~tC%bDkI{lmPYiwGF)3+#{ih#(PrMUrf@t-M zPfbZ!?1;HCCi#ca8+CDL=076L^oh79g__~w(#^8nseJoj=j=uM*j(J(+w3moL|)iZ zCEQf2e1^mR>7hORwacoLcCL{?weMfj&+?gbQqCWolDcCq{h`odf2*1Ovpc@0g_`lA zb)ooNOtalyvri$LU-k}qjATQ-syLio+z_xshwyGuQ5ipcCw`U-M1XpFMB2Odv~i>) zZP9CGYQ%-PDeEU6*4H3NwDPXTVE2ts)8(QIMlE?EU}szLhQ9VZW$GEbM|GRCy|P}V zQ=Oc(lZP5N#4#gigiHga^*igGvt`t7hz)+jd+N1!eS)9i(-CB9N~8+EcI&m(B*$$` zKDBGLWB*DuhFY~k;B&CgJ>l-}JE06b#yGnc)}to#>9L`? zB~U$8z~-;x^*}otJwV<%567n}FpoxZl1ZdQ6Rsb%g<8sKM{3FmlahE?#a_FTH%vXM zV-X%&XuaPnLe%yAZro6)MT!*p-9h)$KMox_l&;CVBeaa~>FSyOp7GYwwTyRO2ruKi rL-Ue;OvcaMb3bbiuDd4Pu)|TrqpDxb;{BjE)4cJ6jpjD!{o4Nlj^bp7 literal 0 HcmV?d00001 diff --git a/shared/trusted/nofile.dummy b/shared/trusted/nofile.dummy new file mode 100644 index 0000000..e69de29 diff --git a/src/IntAddBookmarkForm.cpp b/src/IntAddBookmarkForm.cpp new file mode 100644 index 0000000..bb5f785 --- /dev/null +++ b/src/IntAddBookmarkForm.cpp @@ -0,0 +1,1251 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// !Internet +/*@file: AddBookmarkForm.cpp + *@brief: This header file contains the definitions of the AddBookmarkForm class. + * + */ + +#include +#include + +#include "IntAddBookmarkForm.h" +#include "IntBookmarkData.h" +#include "IntBookmarkPresentationModel.h" +#include "IntCommonLib.h" +#include "IntDropDownCustomItem.h" +#include "IntMultipleWindowPresentationModel.h" +#include "IntRadioCustomItem.h" +#include "IntSceneRegister.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Utility; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + +static const int LIST_ITEM_HEIGHT = 112; +static const int H_ITEM_HEIGHT = 112; +static const int H_TITLE_ITEM_HEIGHT = 144; +static const wchar_t* IDB_LIST_LEFT_SIDE = L"ListLeftSide.png"; + +const int AddBookmarkForm::IDA_CREATE_BOOKMARK_FOLDER = 101; +const int AddBookmarkForm::IDA_BUTTON_DONE = 102; +const int AddBookmarkForm::IDA_BUTTON_CANCEL = 103; +const int AddBookmarkForm::IDA_LIST_LEFT_SIDE_MARGIN = 104; +const int AddBookmarkForm::IDA_LIST_LEFT_SIDE_MARGIN_DROPDOWN = 105; + +AddBookmarkForm::AddBookmarkForm(void) +:__fontSize(36) +,__folderCount(0) +,__folderName(CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS")) +,__listHeight(H_TITLE_ITEM_HEIGHT) +, __oldFolderCount(0) +, __pBookmark(null) +, __pEditFieldTitle(null) +, __pEditFieldUrl(null) +,__pList(null) +, __pListPanel(null) +, __previousScene(null) +, __pScrollPanel(null) +, __pWindowInfo(null) +, __selectedIndex(0) +, __showFolderList(false) +,__titleOnViewDeactivated(L"") +, __view(L"") +,__urlOnViewDeactivated(L"") +, __itemHeight(0) +, __dropdownItemHeight(0) +{ + +} + +AddBookmarkForm::~AddBookmarkForm(void) +{ + // RemoveAllControls(); +} + +bool +AddBookmarkForm::Initialize(void) +{ + Construct(L"IDL_ADD_BOOKMARK"); + + return true; +} + +result +AddBookmarkForm::OnInitializing(void) +{ + result r = E_SUCCESS; + Header* pHeader = null; + + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return E_FAILURE; + } + pSceneManager->AddSceneEventListener(IDSCN_ADD_BOOKMARK, *this); + + pHeader = GetHeader(); + + SetFormBackEventListener(this); + if (pHeader != null) + { + pHeader->AddActionEventListener(*this); + } + + // Main Panel which is a Scroll Panel + __pScrollPanel = static_cast< ScrollPanel* >(GetControl(L"IDC_SCROLLPANEL2")); + + if (__pScrollPanel == null) + { + return E_FAILURE; + } + //__pScrollPanel->SetPageScrollEnabled(true); + // Title EditField added on the Scroll Panel + __pEditFieldTitle = static_cast< EditField* >(__pScrollPanel->GetControl(L"IDC_EDITFIELD1")); + + if (__pEditFieldTitle == null) + { + return E_FAILURE; + } + + __pEditFieldTitle->SetGuideText(CommonUtil::GetString(L"IDS_BR_POP_ENTER_BOOKMARK_NAME")); + __pEditFieldTitle->AddTextEventListener(*this); + __pEditFieldTitle->AddKeypadEventListener(*this); + __pEditFieldTitle->SetOverlayKeypadCommandButtonVisible(false); + + // Url Editfield added on the Scroll Panel + __pEditFieldUrl = static_cast< EditField* >(__pScrollPanel->GetControl(L"IDC_EDITFIELD2")); + + if (__pEditFieldUrl == null) + { + return E_FAILURE; + } + + __pEditFieldUrl->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL")); + __pEditFieldUrl->AddTextEventListener(*this); + __pEditFieldUrl->AddKeypadEventListener(*this); + __pEditFieldUrl->AddFocusEventListener(*this); + __pEditFieldUrl->SetOverlayKeypadCommandButtonVisible(false); + + __pList = static_cast< ListView* >(__pScrollPanel->GetControl(L"IDC_LISTVIEW1")); + + if (__pList == null) + { + return E_FAILURE; + } + __pList->SetItemProvider(*this); + __pList->AddListViewItemEventListener(*this); + AddOrientationEventListener(*this); + + __pScrollPanel->SetSize(GetClientAreaBounds().width, GetClientAreaBounds().height); + r = __pScrollPanel->SetClientAreaHeight(__pList->GetY() + __listHeight); + ScrollPanelScrollDirection direction = __pScrollPanel->GetScrollDirection(); + AppLogDebug("ScrollDirection = %d SetClientAreaHeight ret = %s value = %d autoresize = %d",direction,GetErrorMessage(r),__pScrollPanel->GetClientAreaBounds().height,__pScrollPanel->IsScrollAreaAutoResizingEnabled()); + __fontSize = CommonUtil::GetFontSize(); + __itemHeight = 112 + (__fontSize-44); + r = E_SUCCESS; + + return r; +} + +result +AddBookmarkForm::OnTerminating(void) +{ + result r = E_SUCCESS; + return r; +} + +void +AddBookmarkForm::OnActionPerformed(const Control& source, int actionId) +{ + AppLog("AddBookmarkForm::OnActionPerformed entered actionId %d",actionId); + + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager == null) + { + return ; + } + + switch (actionId) + { + case IDA_CREATE_BOOKMARK_FOLDER: + { + pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CREATE_BOOKMARK_FOLDER, SCENE_TRANSITION_ANIMATION_TYPE_LEFT)); + } + break; + + case IDA_BUTTON_DONE: + { + // Code to save the Bookmark + String title = L""; + String Url = L""; + String bookMarkID = L""; + String folderTitle = L""; + ArrayList folderList; + result r= E_SUCCESS; + int count = 0; + bool exist = false; + bool ret = false; + bool flag = false; + bool valid = false; + + + String firstPattern(L"((ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)"); + String secondPattern(L"^[A-Za-z0-9\.\+-:#@%/;$~?]+\\.[A-Za-z0-9\+-=:#@%/;$~()_?\\\.&]{2,}$"); // Url of type abc.com (i.e without protocol in front of it) + + RegularExpression firstRegex; + RegularExpression secondRegex; + + firstRegex.Construct(firstPattern, REGEX_CASELESS); + secondRegex.Construct(secondPattern, REGEX_CASELESS); + + title = __pEditFieldTitle->GetText(); + Url = __pEditFieldUrl->GetText(); + + // Match + ret = firstRegex.Match(Url, false); // This returns true value + flag = secondRegex.Match(Url, false); // Checks whether Url typed is of type abc.com (i.e without protocol in front of it) + + if (ret == true) + { + valid = true ; + } + else + { + String tempUrl; + if((Url.Contains("http://") == true) || (Url.Contains("https://") == true)) + { + tempUrl.Append(Url); + } + else + { + tempUrl = L"http://"; + tempUrl.Append(Url); + } + + if(flag == true) + { + valid = true; + Url = tempUrl; + } + } + + if (valid == false) + { + String msg = CommonUtil::GetString(L"IDS_COM_POP_INVALID_URL"); + CreateMessage(msg); + } + else + { + if (__view == CommonUtil::GetString(L"IDS_BR_SK_EDIT")) + { + String tempUrl ; + String tempTitle; + String tempParentId; + + tempUrl = __pBookmark->GetUrl(); + tempTitle = __pBookmark->GetBookmarkTitle(); + tempParentId = __pBookmark->GetParentId(); + + + + r = BookmarkPresentationModel::GetInstance()->GetFolder("0", 0, __folderCount, folderList); + TryCatch(r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r)); + + for (count = 0; count < __folderCount; count++) + { + BookmarkData* pBookmark = null; + pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count)); + if (pBookmark == NULL) + { + return; + } + folderTitle = pBookmark->GetBookmarkTitle(); + + if (folderTitle == __folderName) + { + bookMarkID = pBookmark->GetBookmarkId(); + break; + } + } + + if(bookMarkID.GetLength() == 0) + { + bookMarkID = L"0"; + } + + AppLog("IDA_BUTTON_DONE tempParentId ID is %S",tempParentId.GetPointer()); + AppLog("IDA_BUTTON_DONE bookMarkID ID is %S",bookMarkID.GetPointer()); + String urlText = __pEditFieldUrl->GetText(); + String urlWithSlash = L""; + String urlWithoutSlash = L""; + if(urlText.EndsWith(L"/")) + { + urlWithSlash = urlText; + urlText.SubString(0,urlText.GetLength()-1,urlWithoutSlash); + } + else + { + urlWithoutSlash = urlText; + urlWithSlash = urlWithoutSlash; + urlWithSlash.Append(L"/"); + } + + if(urlWithSlash.Contains("http://") == true) + { + urlWithSlash.SubString(7,urlWithSlash.GetLength()-7,urlWithSlash); + } + else if(urlWithSlash.Contains("https://") == true) + { + urlWithSlash.SubString(8,urlWithSlash.GetLength()-8,urlWithSlash); + } + + if(urlWithoutSlash.Contains("http://") == true) + { + urlWithoutSlash.SubString(7,urlWithoutSlash.GetLength()-7,urlWithoutSlash); + } + else if(urlWithoutSlash.Contains("https://") == true) + { + urlWithoutSlash.SubString(8,urlWithoutSlash.GetLength()-8,urlWithoutSlash); + } + + + if((tempUrl.Contains("http://") == true) ) + { + tempUrl.SubString(7,tempUrl.GetLength()-7,tempUrl); + } + else if (tempUrl.Contains("https://") == true) + { + tempUrl.SubString(8,tempUrl.GetLength()-8,tempUrl); + } + if (bookMarkID.CompareTo(tempParentId) == 0 && (urlWithSlash.CompareTo(tempUrl) == 0 || urlWithoutSlash.CompareTo(tempUrl) == 0 )&& __pEditFieldTitle->GetText().CompareTo(tempTitle) == 0) + { + pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT)); + return; + } + + if(tempUrl != __pEditFieldUrl->GetText() || tempParentId != bookMarkID) + { + r = BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(Url,exist, bookMarkID, true); + TryCatch( r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r)); + } + + + if ( exist == true && !(urlWithSlash.CompareTo(tempUrl) == 0 || urlWithoutSlash.CompareTo(tempUrl) == 0 )) + { + String msg = CommonUtil::GetString(L"IDS_BR_POP_ALREADY_EXISTS"); + CreateMessage(msg); + + AppLogDebug("Bookmark already exists"); + } + else + { + __pBookmark->SetUrl(Url); + __pBookmark->SetBookmarkTitle(title); + + if (bookMarkID == L"") + { + __pBookmark->SetParentId(L"0"); + } + else + { + __pBookmark->SetParentId(bookMarkID); + } + + r = BookmarkPresentationModel::GetInstance()->SaveTempBookmark(*__pBookmark); + AppLogDebug("ID_BUTTON_DONE SaveBookmark = %s", GetErrorMessage(r)); + AppLogDebug("parent id = %ls",__pBookmark->GetParentId().GetPointer()); + pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT)); + } + } + else + { + AppLog("AddBookmarkForm::OnActionPerformed does url exist 1"); + + r = BookmarkPresentationModel::GetInstance()->GetFolder(L"0", 0, __folderCount, folderList); + TryCatch(r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r)); + + for (count = 0; count < __folderCount; count++) + { + BookmarkData* pBookmark = null; + pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count)); + if (pBookmark == NULL) + { + return; + } + folderTitle = pBookmark->GetBookmarkTitle(); + + if (folderTitle == __folderName) + { + bookMarkID = pBookmark->GetBookmarkId(); + break; + } + } + if(bookMarkID.GetLength() == 0) + { + bookMarkID = L"0"; + } + r = BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(Url,exist, bookMarkID, true); + + TryCatch( r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r)); + AppLog("AddBookmarkForm::OnActionPerformed does url exist 2"); + if ( exist == true) + { + String msg = CommonUtil::GetString(L"IDS_BR_POP_ALREADY_EXISTS"); + CreateMessage(msg); + + AppLogDebug("Bookmark already exists"); + } + else + { + r = BookmarkPresentationModel::GetInstance()->GetFolder("0", 0, __folderCount, folderList); + TryCatch( r == E_SUCCESS,,"Failed to intitialize GetFolder %s",GetErrorMessage(r)); + + for (count = 0; count < __folderCount; count++) + { + BookmarkData* pBookmark = null; + pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count)); + if ( pBookmark == NULL ) + { + return; + } + folderTitle = pBookmark->GetBookmarkTitle(); + + if (folderTitle == __folderName) + { + bookMarkID = pBookmark->GetBookmarkId(); + break; + } + } + BookmarkData bookmark; + + if (__folderName != CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS")) + { + bookmark.SetParentId(bookMarkID); + } + + bookmark.SetBookmarkTitle(title); + bookmark.SetUrl(Url); + if (__pBookmark != null) + { + bookmark.SetFaviconId(__pBookmark->GetFaviconId()); + } + BookmarkPresentationModel::GetInstance()->SaveTempBookmark(bookmark); + pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT)); + } + } + } + + folderList.RemoveAll(true); + } + break; + + case IDA_BUTTON_CANCEL: + { + if (__pEditFieldTitle != NULL) + { + __pEditFieldTitle->Clear(); + } + + if (__pEditFieldUrl != NULL) + { + __pEditFieldUrl->Clear(); + } + + pSceneManager->GoBackward(BackwardSceneTransition()); + + } + break; + + default: + break; + } + + CATCH: return; +} + +void +AddBookmarkForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source) +{ + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager == null) + { + return ; + } + + if (__pEditFieldTitle != NULL) + { + __pEditFieldTitle->Clear(); + } + + if (__pEditFieldUrl != NULL) + { + __pEditFieldUrl->Clear(); + } + + pSceneManager->GoBackward(BackwardSceneTransition()); + + +} +void +AddBookmarkForm::OnListViewItemLongPressed(ListView& listView, int index, int elementId, bool& invokeListViewItemCallback) +{ + return; +} + +void +AddBookmarkForm::OnListViewItemStateChanged(ListView& listView, int index, int elementId, ListItemStatus status) +{ + AppLog("AddBookmarkForm::OnListViewItemStateChanged listitemstatus %d for index",status,index); + if (__pEditFieldTitle != NULL) + { + __pEditFieldTitle->HideKeypad(); + } + + if (__pEditFieldUrl != NULL) + { + __pEditFieldUrl->HideKeypad(); + } + if (index == 0) + { + if (__showFolderList == false) + { + AppLog("AddBookmarkForm::OnListViewItemStateChanged false"); + __showFolderList = true; + __pList->UpdateList(); + __listHeight = __dropdownItemHeight + (__pList->GetItemCount() -1) * __itemHeight; + + } + else + { + AppLog("AddBookmarkForm::OnListViewItemStateChanged true"); + __showFolderList = false; + __pList->UpdateList(); + __listHeight = __dropdownItemHeight + (__pList->GetItemCount() - 1) * __itemHeight; + + } + + } + else + { + __pList->SetItemChecked(__selectedIndex,false); + __pList->SetItemChecked(index,true); + __selectedIndex = index; + + if (index > 1 && __pList->GetItemCount() != index +1) + { + String parentID = "0"; + ArrayList folderList; + BookmarkData* pBookmark = null; + BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList); + + pBookmark = static_cast(folderList.GetAt(index-2)); + __folderName = pBookmark->GetBookmarkTitle(); + } + else if(index == 1) + { + __folderName = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ; + } + __listHeight = __dropdownItemHeight + (__pList->GetItemCount()-1) * __itemHeight; + if (__pList->GetItemCount() == index +1) + { + SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_CREATE_BOOKMARK_FOLDER, SCENE_TRANSITION_ANIMATION_TYPE_LEFT)); + return; + } + +// __pList->UpdateList();//removed for issue 53372 + __pList->RefreshList(0, LIST_REFRESH_TYPE_ITEM_MODIFY); + + } + + result r = __pList->SetBounds(Rectangle(__pList->GetX(), __pList->GetY(), __pList->GetWidth(), __listHeight)); + //__pList->Invalidate(true); + Invalidate(true); + AppLog("the result is %s", GetErrorMessage(r)); + AppLog("the list height is %d", __pList->GetHeight()); + return; +} + +void +AddBookmarkForm::OnListViewItemSwept(ListView& listView, int index, SweepDirection direction) +{ + __pList->RefreshList(0, LIST_REFRESH_TYPE_ITEM_MODIFY); + return; +} + +void +AddBookmarkForm::OnListViewContextItemStateChanged(ListView& listView, int index, int elementId, ListContextItemStatus state) +{ + return; +} + +int +AddBookmarkForm::GetItemCount(void) +{ + AppLogDebug("AddBookmarkForm::GetItemCount"); + int count = 0; + ArrayList folderList; + String parentID = "0"; + BookmarkData* pBookmark = null; + BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList); + + if (__selectedIndex == 0 && __view == CommonUtil::GetString(L"IDS_BR_SK_EDIT")) + { + for(int count = 0; count < __folderCount; count++) + { + pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count)); + + if (__pBookmark != null && pBookmark != NULL && __pBookmark->GetParentId() == pBookmark->GetBookmarkId()) + { + __selectedIndex = count + 2; + __folderName = pBookmark->GetBookmarkTitle(); + break; + } + else + { + __selectedIndex = 1; + } + } + } + + folderList.RemoveAll(true); + + if (__showFolderList == false) + { + return 1; + } + else + { + result r = BookmarkPresentationModel::GetInstance()->GetFolderCount(L"0",count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetBookmarkCount query failed %s",GetErrorMessage(r)); + AppLog("count = %d", count); + return count + 3; + CATCH: + return E_FAILURE; + } + +} + +ListItemBase* +AddBookmarkForm::CreateItem(int index, int itemWidth) +{ + AppLog("AddBookmarkForm::CreateItem index = %d itemWidth %d list width = %d",index,itemWidth,__pList->GetWidth()); + result r = E_FAILURE; + String folderTitle = L""; + RadioCustomItem* radioItem = null; + DropDownCustomItem* pItem = null; + Bitmap* pBitmap = null; + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_LIST_LEFT_SIDE); + const Color ITEM_RADIO_ITEM_BACKGROUND_COLOR = CUSTOM_COLOR_SETTINGS_LISTITEM_RADIO_BACKGROUND; + const Color ITEM_BACKGROUND_COLOR_HIGHLIGHTED = CUSTOM_BACKGROUND_COLOR_LISTVIEW_PRESSED_HIGHLIGHTED; + if(itemWidth == 0) + { + itemWidth = __pList->GetWidth(); + } + if (index == 0) + { + pItem = new(std::nothrow) DropDownCustomItem(); + r = pItem->Construct(itemWidth); + + if (IsFailed(r)) + { + AppLog("Create Item Failed with error %s", GetErrorMessage(r)); + delete pItem; + delete pBitmap; + return null; + } + + __dropdownItemHeight = 140 + (__fontSize - 44); + if ( __showFolderList == true ) + { + pItem->SetCurState(DROP_DOWN_ITEM_STATE_OPENED); + } + else + { + pItem->SetCurState(DROP_DOWN__ITEM_STATE_CLOSED); + } + + + pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND); + pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, ITEM_BACKGROUND_COLOR_HIGHLIGHTED); + pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, ITEM_BACKGROUND_COLOR_HIGHLIGHTED); + pItem->SetMainText(CommonUtil::GetString(L"IDS_BR_HEADER_FOLDER")); + pItem->SetSubText(__folderName); + pItem->Make(); + if (pBitmap != null) + { + //pItem->AddElement(Rectangle(0, 0, 10, H_ITEM_HEIGHT), IDA_LIST_LEFT_SIDE_MARGIN_DROPDOWN, *pBitmap, null); + delete pBitmap; + } + return pItem; + } + else + { + String parentID = "0"; + ArrayList folderList; + + BookmarkData* pBookmark = null; + r = BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList); + + if (index == 1) + { + radioItem = new(std::nothrow) RadioCustomItem(); + // r = radioItem->Construct(GetClientAreaBounds().width, __itemHeight); + r = radioItem->Construct(itemWidth, __itemHeight); + if (IsFailed(r)) + { + AppLog("Create Item Failed with error %s", GetErrorMessage(r)); + delete radioItem; + delete pBitmap; + return null; + } + + radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL,ITEM_RADIO_ITEM_BACKGROUND_COLOR); + radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED,ITEM_BACKGROUND_COLOR_HIGHLIGHTED); + +// radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND); +// radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND); +// radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND); + folderTitle = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ; + radioItem->SetText(folderTitle); + } + else if (index <= __folderCount + 1) + { + pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(index - 2)); + if (pBookmark != null) + { + folderTitle = pBookmark->GetBookmarkTitle(); + } + radioItem = new(std::nothrow) RadioCustomItem(); + // r = radioItem->Construct(GetClientAreaBounds().width, __itemHeight); + r = radioItem->Construct(itemWidth, __itemHeight); + if (IsFailed(r)) + { + AppLog("Create Item Failed with error %s", GetErrorMessage(r)); + delete radioItem; + delete pBitmap; + return null; + } + + radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL,ITEM_RADIO_ITEM_BACKGROUND_COLOR); + radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED,ITEM_BACKGROUND_COLOR_HIGHLIGHTED); +// radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND); +// radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND); +// radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND); + radioItem->SetText(folderTitle); + } + else + { + radioItem = new(std::nothrow) RadioCustomItem(); + // r = radioItem->Construct(GetClientAreaBounds().width, __itemHeight); + r = radioItem->Construct(itemWidth, __itemHeight); + if (IsFailed(r)) + { + AppLog("Create Item Failed with error %s", GetErrorMessage(r)); + delete radioItem; + delete pBitmap; + return null; + } + //radioItem->AddElement(Rectangle(MARGIN_X, 0, __pList->GetBounds().width, itemHeight), IDA_FORMAT_STRING1, CommonUtil::GetString(L"IDS_CREATE_NEW_FOLDER"), textsize, Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), true); + folderTitle = CommonUtil::GetString(L"IDS_BR_OPT_NEW_FOLDER"); + radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL,ITEM_RADIO_ITEM_BACKGROUND_COLOR); + radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED,ITEM_BACKGROUND_COLOR_HIGHLIGHTED); +// radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND); +// radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND); +// radioItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND); + radioItem->SetText(folderTitle); + + } + + if (__selectedIndex == index) + { +// radioItem->SetSelected(true); + __pList->SetItemChecked(index,true); + } + else + { +// radioItem->SetSelected(false); + __pList->SetItemChecked(index,false); + } + + if(__selectedIndex == 0 && index == 1) + { +// radioItem->SetSelected(true); + __pList->SetItemChecked(index,true); + } + if (__pList->IsItemChecked(index) == true) + { + __folderName = radioItem->GetText(); + } + + if (pBitmap != null) + { + //radioItem->AddElement(Rectangle(0, 0, 10, itemHeight), IDA_LIST_LEFT_SIDE_MARGIN, *pBitmap, null); + delete pBitmap; + } + + folderList.RemoveAll(true); + radioItem->Make(); + return radioItem; + } +} + +bool +AddBookmarkForm::DeleteItem(int index, ListItemBase* pItem, int itemWidth) +{ + if (pItem != null) + { + delete pItem; + pItem = null; + } + + return true; +} + +void +AddBookmarkForm::OnKeypadActionPerformed(Control& source, KeypadAction keypadAction) +{ + return; +} + +void +AddBookmarkForm::OnKeypadClosed(Control& source) +{ + + AppLog("the client area height is %d",GetClientAreaBounds().height); + + __pScrollPanel->SetBounds(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height)); + __pScrollPanel->Invalidate(true); + + Invalidate(true); + return; +} + +void +AddBookmarkForm::OnKeypadOpened(Control& source) +{ + return; +} + +void +AddBookmarkForm::OnKeypadWillOpen(Control& source) +{ + AppLog("the client area height is %d",GetClientAreaBounds().height); + + // __pScrollPanel->SetBounds(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height)); + + // __pScrollPanel->Invalidate(true); + // __pScrollPanel->SetScrollPosition(source.GetY()-48,false); + __pScrollPanel->SetSize(GetClientAreaBounds().width,GetClientAreaBounds().height); + __pScrollPanel->SetClientAreaWidth(__pScrollPanel->GetWidth()); + __pScrollPanel->SetClientAreaHeight(__pList->GetY()+__listHeight); + Invalidate(true); + AppLog("the scroll panel height is Rect(%d,%d,%d,%d) ClientHeight = %d",__pScrollPanel->GetX(),__pScrollPanel->GetY(),__pScrollPanel->GetWidth(),__pScrollPanel->GetHeight(),__pScrollPanel->GetClientAreaBounds().height); + return; +} + +void +AddBookmarkForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs) +{ + // Code to handle events when the AddBookmarkForm is activated. + String str = "0"; + String pageTitle = L""; + String pageUrl = L""; + String title = L""; + String url = L""; + result r = E_FAILURE; + Header* pHeader = GetHeader(); + + r = BookmarkPresentationModel::GetInstance()->GetFolderCount(str, __folderCount); + TryCatch( r == E_SUCCESS, ,"Failed to intitialize GETFOLDERCOUNT %s",GetErrorMessage(r)); + + if ( pHeader == NULL ) + { + return ; + } + if ( previousSceneId != IDSCN_CREATE_BOOKMARK_FOLDER ) + { + // check first argument of pargs 0 for Add, 1 - for Edit + String* firstValue = NULL; + if(pArgs) + { + firstValue = dynamic_cast(pArgs->GetAt(0)); + } + + if( firstValue == NULL || pArgs == NULL) + { + return ; + } + if (firstValue->CompareTo(L"1") == 0) + { + __view = CommonUtil::GetString(L"IDS_BR_SK_EDIT"); + + pHeader->SetTitleText(CommonUtil::GetString(L"IDS_BR_HEADER_EDIT_BOOKMARK")); + + if (__pBookmark != NULL && pArgs != NULL) + { + delete __pBookmark; + __pBookmark = null; + } + + if (__pBookmark == NULL && pArgs != NULL) + { + __pBookmark = dynamic_cast(pArgs->GetAt(1)); + } + + if (__pBookmark) + { + pageTitle = __pBookmark->GetBookmarkTitle(); + pageUrl = __pBookmark->GetUrl(); + } + } + else if (firstValue->CompareTo(L"0") == 0) + { + __view = CommonUtil::GetString(L"IDS_COM_SK_ADD"); + pHeader->SetTitleText(CommonUtil::GetString(L"IDS_BR_HEADER_EDIT_BOOKMARK")); + + WindowInfo* pWindowInfo = MultipleWindowPresentationModel::GetInstance()->GetActiveWindowInfo(); + + if( pWindowInfo == NULL ) + { + return; + } + + if(pWindowInfo->pageTitle.CompareTo(CommonUtil::GetString(L"IDS_BR_BODY_BLANK_PAGE")) != 0) + pageTitle = pWindowInfo->pageTitle; + + if(pWindowInfo->pageUrl.IsEmpty() == false) + { + pageUrl = pWindowInfo->pageUrl; + } + String* parentID = dynamic_cast(pArgs->GetAt(1)); + + ArrayList folderList; + + BookmarkData* pBookmark = null; + BookmarkPresentationModel::GetInstance()->GetFolder(L"0", 0, __folderCount, folderList); + for(int count = 0; count < folderList.GetCount(); count++) + { + pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count)); + + if ( pBookmark == null ) + { + return ; + } + + if (parentID != NULL && pBookmark->GetBookmarkId().CompareTo(parentID->GetPointer()) == 0) + { + __selectedIndex = count + 2; + __folderName = pBookmark->GetBookmarkTitle(); + break; + } + else + { + __selectedIndex = 1 ; + __folderName = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ; + } + + } + + if (__folderCount == 0) + { + __selectedIndex = 1 ; + __folderName = CommonUtil::GetString(L"IDS_BR_TAB_BOOKMARKS") ; + } + + folderList.RemoveAll(true); + } + } + + if ( previousSceneId == IDSCN_CREATE_BOOKMARK_FOLDER ) + { + pageTitle = __titleOnViewDeactivated; + pageUrl = __urlOnViewDeactivated; + if(__pList && __pScrollPanel) + { + AppLog("__pList->GetItemCount() %d",__pList->GetItemCount()); + __pList->ScrollToItem(__pList->GetItemCount()); +// __pList->Invalidate(true); + __pScrollPanel->ScrollToBottom(); + } + } + +// if(__pEditFieldTitle != NULL) +// { +// __pEditFieldTitle->ShowKeypad(); +// } + if ( previousSceneId != IDSCN_CREATE_BOOKMARK_FOLDER ) + { + if (__pEditFieldTitle != NULL) + { + __pEditFieldTitle->SetText(pageTitle); + __pEditFieldTitle->ShowKeypad(); + } + if (__pEditFieldUrl != NULL) + { + __pEditFieldUrl->SetText(pageUrl); + __pEditFieldUrl->HideKeypad(); + } + + } + else + { + if (__pEditFieldTitle != NULL) + { + __pEditFieldTitle->SetText(pageTitle); + __pEditFieldTitle->HideKeypad(); + } + if (__pEditFieldUrl != NULL) + { + __pEditFieldUrl->SetText(pageUrl); + __pEditFieldUrl->HideKeypad(); + } + } + if (__view == CommonUtil::GetString(L"IDS_BR_SK_EDIT") && previousSceneId == IDSCN_CREATE_BOOKMARK_FOLDER ) + { + if (__oldFolderCount == 0) + { + if (__folderCount == 1) + { + __selectedIndex = 2; + } + } + else if (__oldFolderCount != __folderCount) + { + __selectedIndex = __folderCount + 1; + } + if(__selectedIndex > 1) + { + String parentID = L"0"; + ArrayList folderList; + BookmarkData* pBookmark = null; + BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList); + pBookmark = static_cast(folderList.GetAt(__selectedIndex-2)); + if(pBookmark != null) + { + __folderName = pBookmark->GetBookmarkTitle(); + } + } + } + + if (__view == CommonUtil::GetString(L"IDS_COM_SK_ADD") && previousSceneId == IDSCN_CREATE_BOOKMARK_FOLDER) + { + + if (__oldFolderCount == 0) + { + if (__folderCount == 1) + { + __selectedIndex = 2; + } + } + else if (__oldFolderCount != __folderCount) + { + __selectedIndex = __folderCount + 1; + + } + else if (__oldFolderCount == __folderCount ) + { + __selectedIndex = __folderCount + 1; + } + if(__selectedIndex > 1) + { + String parentID = L"0"; + ArrayList folderList; + BookmarkData* pBookmark = null; + BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, __folderCount, folderList); + pBookmark = static_cast(folderList.GetAt(__selectedIndex-2)); + if(pBookmark != null) + { + __folderName = pBookmark->GetBookmarkTitle(); + } + } + } + if (__pEditFieldTitle != NULL) + { + title = __pEditFieldTitle->GetText(); + title.Trim(); + } + + if (__pEditFieldUrl != NULL) + { + url = __pEditFieldUrl->GetText(); + url.Trim(); + } + + // To disable done button if either of the Title or Url field is empty + if (title.GetLength() == 0 || url.GetLength() == 0) + { + pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, false); + pHeader->Invalidate(true); + } + else + { + pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, true); + pHeader->Invalidate(true); + } + + if(__pList != null) + { + + __pList->UpdateList(); + __listHeight = __dropdownItemHeight + (__pList->GetItemCount() - 1) * __itemHeight; + __pList->SetBounds(__pList->GetX(),__pList->GetY(),__pList->GetWidth(),__listHeight); + AppLog("ListWidth %d",__pList->GetWidth()); + } + + Invalidate(true); + // __pList->RefreshList(0, LIST_REFRESH_TYPE_ITEM_MODIFY); + CATCH : return; +} + +void +AddBookmarkForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + // Add code to handle events when the AddBookmarkForm is Deactivated. + if ( __pEditFieldTitle != NULL) + { + __titleOnViewDeactivated = __pEditFieldTitle->GetText(); + } + + if ( __pEditFieldUrl != NULL) + { + __urlOnViewDeactivated = __pEditFieldUrl->GetText(); + } + + __oldFolderCount = __folderCount; + + if (__view == CommonUtil::GetString(L"IDS_BR_SK_EDIT") ) + { + __selectedIndex = 0; + } + return; +} + +void +AddBookmarkForm::OnFocusGained (const Tizen::Ui::Control &source) +{ + __pScrollPanel->SetSize(GetClientAreaBounds().width,GetClientAreaBounds().height); + __pScrollPanel->SetClientAreaWidth(__pScrollPanel->GetWidth()); + __pScrollPanel->SetClientAreaHeight(GetClientAreaBounds().height); + Invalidate(true); + return; + +} +void +AddBookmarkForm::OnFocusLost (const Tizen::Ui::Control &source) +{ + +} + +void +AddBookmarkForm::OnTextValueChanged(const Control& source) +{ + String title = L""; + String url = L""; + Header* pHeader = GetHeader(); + if (pHeader == NULL) + { + return; + } + + if (__pEditFieldTitle == NULL || __pEditFieldUrl == NULL) + { + return; + } + + title = __pEditFieldTitle->GetText(); + url = __pEditFieldUrl->GetText(); + title.Trim(); + url.Trim(); + + // To disable done button if either of the Title or Url field is empty + if (title.GetLength() == 0 || url.GetLength() == 0) + { + pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, false); + pHeader->Invalidate(true); + } + else + { + pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, true); + pHeader->Invalidate(true); + } + + return; +} + +void +AddBookmarkForm::OnTextValueChangeCanceled(const Control& source) +{ + return; +} + +void +AddBookmarkForm::CreateMessage(String& str) +{ + Tizen::Ui::Controls::MessageBox* pMsgBox = null; // Message Box to display alert if folder with same name already exists + int __modalMsgBoxResult; + + pMsgBox = new(std::nothrow) MessageBox; + if (pMsgBox != null) + { + pMsgBox->Construct(L"", str, MSGBOX_STYLE_OK, 3000); + pMsgBox->ShowAndWait(__modalMsgBoxResult); + delete pMsgBox; + pMsgBox = null; + __modalMsgBoxResult = 0; + } + + return; +} + +void +AddBookmarkForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus) +{ + // if (__pEditFieldTitle != NULL) + // { + // __pEditFieldTitle->HideKeypad(); + // } + // if (__pEditFieldUrl != NULL) + // { + // __pEditFieldUrl->HideKeypad(); + // } + + AppLog("AddBookmarkForm::OnOrientationChanged ClientAreaBound %d, %d",GetClientAreaBounds().width,GetClientAreaBounds().height); + if (orientationStatus == ORIENTATION_STATUS_LANDSCAPE) + { + if (__pScrollPanel != null) + { + __pScrollPanel->ScrollToTop(); + __pScrollPanel->SetClientAreaHeight(__pList->GetY()+__listHeight); + } + } + + if (__pList != null) + { + __pList->SetBounds(__pList->GetX(),__pList->GetY(),GetClientAreaBounds().width,__listHeight); +// __pList->UpdateList(); + } + Invalidate(true); +} diff --git a/src/IntAddressbar.cpp b/src/IntAddressbar.cpp new file mode 100644 index 0000000..a9f26c9 --- /dev/null +++ b/src/IntAddressbar.cpp @@ -0,0 +1,739 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntAddressbar + *@brief: This class defines common behaviour of Addressbar control. + * + */ +#include "IntAddressbar.h" +#include "IntCommonLib.h" +#include "IntTypes.h" +#include "IntMultipleWindowPresentationModel.h" +#include "IntSettingPresentationModel.h" +#include "IntMultipleWindowPresentationModel.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Graphics; +using namespace Tizen::System; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; + +static const wchar_t* IDB_SEARCH_INPUT_FIELD_BG = L"I01_toolbar_input_field.#.png"; +static const wchar_t* IDB_TITLE_PROGRESS_BAR_BG = L"I01_title_progress_bar_bg.png"; +static const wchar_t* IDB_TITLE_PROGRESS_BAR = L"I01_title_progress_bar.png"; +static const wchar_t* IDB_ICON_PRIVATE = L"I01_icon_private.png"; + +//Action IDs + +const int Addressbar::IDA_STOP_BTN_CLICKED = 103; +const int Addressbar::IDA_GO_BACK = 104; +const int Addressbar::IDA_GO_FORWARD = 105; +const int Addressbar::IDA_CANCEL = 106; +const int Addressbar::IDA_CLEAR_URL = 107; + +Addressbar::Addressbar(void) +{ + //__currentAddMode = ADDRESSBAR_MODE_LOADING_COMPLETE; + __displayUrl = L""; +// __editTextUrl = L""; + __isLoadingData = false; + __isLoadingCompleted = false; + __progressPercentage = 0; + __pAddressbarBg = null; + __pBgPanel = null; + __pFavIcon = FaviconManager::GetInstance()->GetDefaultFaviconN(); + __pFaviconLabel = null; + __pLabelPrivateOn = null; + __pListener = null; + __pPrivateIconLabel = null; + __pProgressbarLabel = null; + __pPrivateIconLabel = null ; + __pClearBtn = null ; + __pSearchLabel = null; + __pAddressbarUrlField = null; + __pToolBarLabel = null; + __pAddressbarURLLabel = null; + __pAddressBackBtn = null; + __isClipboardOpen = false; + __isKeyboardConnected = false; + __isKeyPadOpened = false; + __isAppBackGround = false; +} + +Addressbar::~Addressbar(void) +{ + if (__pFavIcon != null) + { + delete __pFavIcon; + __pFavIcon = null; + } +} + +result +Addressbar::OnTerminating(void) +{ + DeviceManager::RemoveDeviceEventListener(DEVICE_TYPE_USB_CLIENT, *this); + return E_SUCCESS; +} + +result +Addressbar::Initialize(const Rectangle& rect) +{ + result r = E_SUCCESS; + + AppLogDebug("Addressbar::Initialize entered"); + //Construct the base first + r = Construct(L"IDL_ADDRESSBAR"); + + //Add background label + Label* pBgLabel = static_cast (GetControl(L"IDC_BG_LABEL",true)); + if (pBgLabel == NULL) + { + AppLogDebug("Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + + //Add inner panel for border + __pBgPanel = static_cast (GetControl(L"IDC_BG_PANEL",true)); + if (__pBgPanel == NULL) + { + AppLogDebug("Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + + __pAddressbarBg = static_cast (GetControl(L"IDC_ADDRESSBAR_BG_LABEL",true)); + if (__pAddressbarBg == NULL) + { + AppLogDebug("Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + __pBgPanel->SetBackgroundColor(CUSTOM_COLOR_TRANSPARENT); + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_SEARCH_INPUT_FIELD_BG, __pAddressbarBg->GetWidth(), __pAddressbarBg->GetHeight()); + if (pBitmap != null) + { + __pAddressbarBg->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + + __pClearBtn = static_cast (GetControl(L"IDC_CLEAR_BUTTON",true)); + if (__pClearBtn == NULL) + { + AppLogDebug("Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + __pClearBtn->SetActionId(IDA_CLEAR_URL); + __pClearBtn->AddActionEventListener(*this); + __pClearBtn->SetShowState(true); + __pClearBtn->SetFocusable(true); + + //Add the editfield for url + __pAddressbarUrlField = static_cast (GetControl(L"IDC_URL_EDITFIELD",true)); + if (__pAddressbarUrlField == NULL) + { + AppLogDebug("Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + + __pAddressbarUrlField->SetOverlayKeypadCommandButtonVisible(false); + __pAddressbarUrlField->SetKeypadAction(KEYPAD_ACTION_GO); + __pAddressbarUrlField->AddFocusEventListener(*this); + __pAddressbarUrlField->AddTextEventListener(*this); + if(__pAddressbarUrlField->GetTextLength() == 0) + { + __pAddressbarUrlField->SetKeypadActionEnabled(false); + } + else + { + __pAddressbarUrlField->SetKeypadActionEnabled(true); + } + + __pToolBarLabel = static_cast (GetControl(L"IDC_TOOLBAR_LABEL",true)); + if (__pToolBarLabel == NULL) + { + AppLogDebug("Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + __pToolBarLabel->SetShowState(true); + + __pAddressbarURLLabel = static_cast (GetControl(L"IDC_URL_LABEL",true)); + if (__pAddressbarURLLabel == NULL) + { + AppLogDebug("__pURLLabel Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + __pAddressbarURLLabel->SetShowState(true); + + __pAddressBackBtn = static_cast (GetControl(L"IDC_ADDRESS_BACK_BUTTON",true)); + if (__pAddressBackBtn == NULL) + { + AppLogDebug("__pAddressBackBtn Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + __pAddressBackBtn->SetActionId(IDA_CANCEL); + __pAddressBackBtn->AddActionEventListener(*this); + __pAddressBackBtn->SetShowState(true); + __pAddressBackBtn->SetFocusable(true); + //IDC_ADDRESS_BACK_BUTTON + + // Added to get the favorite url if not set then address bar is about blank + + if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_MOST_VISITED_SITES")) == 0) + { + __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL")); + } + else if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_BLANK_PAGE")) == 0) + { + __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_BLANK_PAGE")); + } + else + { + //__pUrlField->SetText(SettingPresentationModel::GetInstance()->GetFavoriteURL()); + __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL")); + } + __pAddressbarUrlField->AddKeypadEventListener(*this); + + r = DeviceManager::AddDeviceEventListener(DEVICE_TYPE_USB_CLIENT,*this); + AppLog("1234:: DeviceManager::AddDeviceEventListener result %s",GetErrorMessage(r)); + AppLogDebug("Addressbar::Initialize exit"); + return r; +} + +void +Addressbar::UpdateProgressBitmap(void) +{ + result r = E_SUCCESS; + if (__pProgressbarLabel == null) + return; + int w = __pProgressbarLabel->GetWidth(); + int h = __pProgressbarLabel->GetHeight(); + Canvas canvas; + int progressWidth = 0; + Bitmap* pRetBitmap = null; + + if (__progressPercentage == 0 || __progressPercentage == 100) + { + __pProgressbarLabel->SetShowState(false); + __pProgressbarLabel->Invalidate(false); + return; + } + else + { + __pProgressbarLabel->SetShowState(true); + __pProgressbarLabel->Invalidate(false); + } + + r = canvas.Construct(Rectangle(0, 0, w, h)); + + if (r != E_SUCCESS) + { + AppLogException("Canvas construction failed with %s", GetErrorMessage(r)); + return; + } + + canvas.Clear(); + Bitmap *pBgBmp = AppResource::GetInstance()->GetBitmapN(IDB_TITLE_PROGRESS_BAR_BG); + + if (pBgBmp != null) + { + pBgBmp->Scale(Dimension(w, h)); + canvas.DrawBitmap(Point(0,0), *pBgBmp); + delete pBgBmp; + } + + progressWidth = (double) (w) * __progressPercentage / 100; + AppLogDebug("progressWidth: %d", progressWidth); + Bitmap *pProgressBmp = AppResource::GetInstance()->GetBitmapN(IDB_TITLE_PROGRESS_BAR); + + if (pProgressBmp != null) + { + pProgressBmp->Scale(Dimension(progressWidth, h)); + canvas.DrawBitmap(Point(0,0), *pProgressBmp); + delete pProgressBmp; + } + + pRetBitmap = new (std::nothrow) Bitmap(); + + if (pRetBitmap == null) + { + AppLogException("Bitmap creation failed with %s", GetErrorMessage(r)); + return; + } + + pRetBitmap->Construct(canvas, canvas.GetBounds()); + + if (__pProgressbarLabel != null && pRetBitmap != null) + { + __pProgressbarLabel->SetBackgroundBitmap(*pRetBitmap); + __pProgressbarLabel->Invalidate(false); + } + + + if (pRetBitmap != null) + { + delete pRetBitmap; + pRetBitmap = null; + } + return; +} + +void +Addressbar::ResetGuideText(void) +{ + AppLog("Addressbar::ResetGuideText called"); + + if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_MOST_VISITED_SITES")) == 0) + { + __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL")); + } + else if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_BLANK_PAGE")) == 0) + { + __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_BLANK_PAGE")); + } + else + { + //__pUrlField->SetText(SettingPresentationModel::GetInstance()->GetFavoriteURL()); + __pAddressbarUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL")); + } + __pAddressbarUrlField->Invalidate(true); +} + +void +Addressbar::SetUrl(const String& url) +{ + __displayUrl = url; + String updatedDisplayUrl; + updatedDisplayUrl.Clear(); + + if (__pAddressbarUrlField != NULL) + { + String removedHttpUrl = RemoveHttpTextFromDisplayURL(); + if (removedHttpUrl.IsEmpty() == false) + { + __pAddressbarUrlField->SetText(removedHttpUrl); + } + else + { + __pAddressbarUrlField->SetText(__displayUrl); + } + + __pAddressbarUrlField->Invalidate(false); + __pAddressbarUrlField->SetCursorPosition(__pAddressbarUrlField->GetTextLength()); + } +} + +String +Addressbar::GetUrl(void) +{ + return __displayUrl; +} + +void +Addressbar::SetFaviconBitmap(const Tizen::Graphics::Bitmap& favicon) +{ + + String url =__pAddressbarUrlField->GetText(); + String secureSiteText = "https://"; + bool flag = false; + flag = url.StartsWith(secureSiteText,0); + + if (__pFavIcon != null) + { + delete __pFavIcon; + } + + __pFavIcon = new(std::nothrow) Bitmap(); + __pFavIcon->Construct(favicon,Rectangle(0,0,favicon.GetWidth(),favicon.GetHeight())); +} + +void Addressbar::SaveAddressbarEditText() +{ +// __editTextUrl = __pAddressbarUrlField->GetText(); +} + +void +Addressbar::UpdateFaviconBitmap(bool isPrivateOn) +{ + + String url =__pAddressbarUrlField->GetText(); + String secureSiteText = "https://"; + bool flag = false; + flag = url.StartsWith(secureSiteText,0); + + __pAddressbarBg->Invalidate(true); +} + +void +Addressbar::SetForwardButtonEnabled(bool isEnabled) +{ +} + +void +Addressbar::SetBackButtonEnabled(bool isEnabled) +{ +} + +void +Addressbar::SetAddressbarEventListener(IAddressbarEventListener* plistener) +{ + __pListener = plistener; +} + +void +Addressbar::UpdateProgress(int percentage) +{ + __progressPercentage = percentage; + if (percentage == 0 || percentage == 100) + { + __isLoadingData = false; + if (percentage == 100) + { + __isLoadingCompleted = true; + __progressPercentage = 0; + } + else + { + __isLoadingCompleted = false; + } + } + else + { + __isLoadingData = true; + } + UpdateProgressBitmap(); +} + +int +Addressbar::GetProgress(void) +{ + return __progressPercentage; +} + +void +Addressbar::OnActionPerformed(const Tizen::Ui::Control& source, int actionId) +{ + AppLogDebug("Addressbar::OnActionPerformed action %d",actionId); + + switch (actionId) + { + case IDA_CANCEL: + { + __isAppBackGround = false; +// __pAddressbarUrlField->HideKeypad(); + __pListener->OnAddressCancelledClicked(*this); + //SetAddressbarMode(ADDRESSBAR_MODE_LOADING_COMPLETE); + } + break; + + case IDA_CLEAR_URL: + { + if (__pAddressbarUrlField->GetText().IsEmpty() == false) + { + //__displayUrl = __pUrlField->GetText(); + __pAddressbarUrlField->Clear(); + __pAddressbarUrlField->SetKeypadActionEnabled(false); + __pAddressbarUrlField->Invalidate(true); + } + } + break; + default: + break; + } +} + +void +Addressbar::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction) +{ + AppLog("XYZ::Addressbar::OnKeypadActionPerformed keypadAction %d",keypadAction); + switch (keypadAction) + { + case KEYPAD_ACTION_GO: + case KEYPAD_ACTION_ENTER: + case KEYPAD_ACTION_SEND: + { + if (__pAddressbarUrlField->GetText().IsEmpty() == false) + { + //SetAddressbarMode(ADDRESSBAR_MODE_LOADING); + __displayUrl = __pAddressbarUrlField->GetText(); + + __isLoadingCompleted = false; + __isLoadingData = true; + __progressPercentage = 0; + __pAddressbarUrlField->HideKeypad(); + + if (__pListener != NULL) + { + __pListener->OnUrlSubmitted(*this); + } + + //UpdateProgressBitmap(); + } + } + break; + + default: + break; + } +} + +void +Addressbar::OnKeypadClosed(Tizen::Ui::Control& source) +{ + AppLog("XYZ::Addressbar::OnKeypadClosed"); + + __isKeyPadOpened = false; + + if (__isKeyboardConnected == true) + { + return; + } + if (__isClipboardOpen == true) + { + __isClipboardOpen = false; + __pListener->OnClipboardClosed(*this); + return; + } + + +// if(__pAddressbarUrlField) +// { +// String removedHttpUrl = RemoveHttpTextFromDisplayURL(); +// if (removedHttpUrl.IsEmpty() == false) +// { +// __pAddressbarUrlField->SetText(removedHttpUrl); +// } +// else +// { +// __pAddressbarUrlField->SetText(__displayUrl); +// } +// } +// __editTextUrl = L""; + if(__pListener != null) + { + __pListener->OnAddressBarKeypadClosed(*this,true); + } +} + +void +Addressbar::OnKeypadOpened(Tizen::Ui::Control& source) +{ + AppLog("XYZ::Addressbar::OnKeypadOpened"); + AppLog("Addressbar::OnKeypadOpened %d",Clipboard::GetInstance()->IsPopupVisible()); + + __isKeyPadOpened = true; + + __isClipboardOpen = Clipboard::GetInstance()->IsPopupVisible(); + + if(__pListener != null) + { + __pListener->OnAddressBarKeypadOpened(*this); + } +} + +void +Addressbar::OnKeypadWillOpen(Tizen::Ui::Control& source) +{ + AppLog("XYZ::Addressbar::OnKeypadWillOpen"); + +} + +void +Addressbar::OnKeypadBoundsChanged(Tizen::Ui::Control &source) +{ + AppLog("XYZ::KeypadBoundsChanged"); + + if(__pListener != null) + { + __pListener->OnAddressBarKeypadBoundsChanged(*this); + } +} + +void +Addressbar::OrientationChanged( int& width) +{ + int gap = 10; + __pBgPanel->SetBounds(__pBgPanel->GetX(),__pBgPanel->GetY(), width - __pAddressBackBtn->GetWidth() - gap -__pBgPanel->GetX() ,__pBgPanel->GetHeight()); + __pAddressBackBtn->SetBounds(width - __pAddressBackBtn->GetWidth() - 6,__pAddressBackBtn->GetY(),__pAddressBackBtn->GetWidth(),__pAddressBackBtn->GetHeight()); + __pClearBtn->SetBounds(__pBgPanel->GetWidth() - __pClearBtn->GetWidth() ,__pClearBtn->GetY(),__pClearBtn->GetWidth(),__pClearBtn->GetHeight()); + + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_SEARCH_INPUT_FIELD_BG, __pAddressbarBg->GetWidth(), __pAddressbarBg->GetHeight()); + if (pBitmap != null) + { + __pAddressbarBg->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + + Invalidate(true); +} + +String +Addressbar::RemoveHttpTextFromDisplayURL(void) +{ + bool isHttpText = __displayUrl.Contains(L"http://"); + String updatedDisplayUrl; + updatedDisplayUrl.Clear(); + + if (isHttpText == true) + { + __displayUrl.SubString(7,updatedDisplayUrl); + } + return updatedDisplayUrl; +} + +Bitmap* +Addressbar::GetLockedImageN(void) +{ + Bitmap* pIconImage = null; + + AppResource* pAppResource = Application::GetInstance()->GetAppResource(); + if (pAppResource) + { + pIconImage = pAppResource->GetBitmapN(IDB_ICON_PRIVATE); + } + + Bitmap* pLockImage = new (std::nothrow) Bitmap(); + + Canvas* pCanvas = new (std::nothrow) Canvas(); + pCanvas->Construct(Rectangle(0,0,__pFaviconLabel->GetWidth(),__pFaviconLabel->GetHeight())); + pCanvas->Clear(); + if(__pFavIcon != null) + { + pCanvas->DrawBitmap(Rectangle(0,0,__pFaviconLabel->GetWidth(),__pFaviconLabel->GetHeight()),*__pFavIcon); + } + if(pIconImage != null) + { + pCanvas->DrawBitmap(Rectangle(__pFaviconLabel->GetWidth()/2,__pFaviconLabel->GetHeight()/2,__pFaviconLabel->GetWidth()/2,__pFaviconLabel->GetHeight()/2),*pIconImage); + } + pLockImage->Construct(*pCanvas,Rectangle(0,0,__pFaviconLabel->GetWidth(),__pFaviconLabel->GetHeight())); + + delete pCanvas; + return pLockImage; +} + +void +Addressbar::OnFocusGained(const Control& source) +{ + AppLog("XYZ::Addressbar::OnFocusGained"); + if(__pAddressbarUrlField && __isAppBackGround == false) + { + String removedHttpUrl = RemoveHttpTextFromDisplayURL(); + if (removedHttpUrl.IsEmpty() == false) + { + __pAddressbarUrlField->SetText(removedHttpUrl); + } + else + { + __pAddressbarUrlField->SetText(__displayUrl); + } + } + + if(__pAddressbarUrlField != null) + { + __pAddressbarUrlField->SetCursorPosition(__pAddressbarUrlField->GetTextLength()); + if(__pAddressbarUrlField->GetTextLength() == 0) + { + __pAddressbarUrlField->SetKeypadActionEnabled(false); + } + else + { + __pAddressbarUrlField->SetKeypadActionEnabled(true); + } + } + if (__pListener != null) + { + __pListener->OnAddressBarFocusGained(*this); + } + __isAppBackGround = false; +} + +void +Addressbar::OnFocusLost(const Tizen::Ui::Control& source) +{ + AppLog("XYZ::Addressbar::OnFocusLost"); + if(GetShowState() == true) + __isAppBackGround = true; + +// __editTextUrl = L""; + if(__pListener != null) + { + __pListener->OnAddressBarFocusLost(*this, __isKeyPadOpened); + } +} + +void +Addressbar::OnTextValueChanged(const Control& source) +{ + if(__pAddressbarUrlField != null) + { + if(__pAddressbarUrlField->GetTextLength() == 0) + { + __pAddressbarUrlField->SetKeypadActionEnabled(false); + } + else + { + __pAddressbarUrlField->SetKeypadActionEnabled(true); + } + } +} + +void +Addressbar::OnDeviceStateChanged(DeviceType deviceType, const String &state) +{ + AppLog("1234:: Addressbar::OnDeviceStateChanged %ls %d",state.GetPointer(),(int)deviceType); + if(deviceType == DEVICE_TYPE_KEYBOARD && state.Equals(L"Closed",true) == 0) + { + __isKeyboardConnected = true; + } +} +void +Addressbar::SetAddressbarURLFocus() +{ + AppLog("Addressbar::SetAddressbarURLFocus"); + result r = __pAddressbarUrlField->SetFocus(); + AppLog("Addressbar::SetAddressbarURLFocus result %s",GetErrorMessage(r)); +} + +String +Addressbar::GetAddressbarURL() +{ + return __pAddressbarUrlField->GetText(); +} + +bool +Addressbar::HasCurrentFocus() +{ + return __pAddressbarUrlField->HasFocus(); +} + +void +Addressbar::HideKeypad() +{ + __pAddressbarUrlField->HideKeypad(); +} + +void +Addressbar::OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs) +{ + if (requestId == BACK_GROUND_APP_EVENT) + { + __isAppBackGround = true; + } + else if(requestId == FORE_GROUND_APP_EVENT) + { + __isAppBackGround = false; + } +} diff --git a/src/IntArticleReaderForm.cpp b/src/IntArticleReaderForm.cpp new file mode 100644 index 0000000..314febd --- /dev/null +++ b/src/IntArticleReaderForm.cpp @@ -0,0 +1,991 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// !Internet +/*@file: ArticleReaderForm.cpp + *@brief: This header file contains the definitions of the ArticleReaderForm class. + * + */ + +#include +#include +#include "IntArticleReaderForm.h" +#include "IntCommonLib.h" +#include "IntSceneRegister.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; +using namespace Tizen::Web::Controls; + +static const wchar_t* IDB_SMALL_FONT = L"I01_font_button_left.png"; +static const wchar_t* IDB_LARGE_FONT = L"I01_font_button_right.png"; +static const wchar_t* IDB_FINDWORD_INPUT_FIELD_BG = L"I01_toolbar_input_field_findword.#.png"; + +const int ArticleReaderForm::IDA_MORE_BUTTON = 101; +const int ArticleReaderForm::IDA_BACK_BUTTON = 102; +const int ArticleReaderForm::IDA_SMALL_FONT_BUTTON = 103; +const int ArticleReaderForm::IDA_LARGE_FONT_BUTTON = 104; +const int ArticleReaderForm::IDA_SAVE_CLICKED = 105; +const int ArticleReaderForm::IDA_SHARE_CLICKED = 106; +const int ArticleReaderForm::IDA_PRINT_CLICKED = 107; +const int ArticleReaderForm::IDA_COPY_TEXT_CLICKED = 108; +const int ArticleReaderForm::IDA_FIND_TEXT_CLICKED = 109; +const int ArticleReaderForm::IDA_SHARE_TEXT_CLICKED = 110; +const int ArticleReaderForm::IDA_FINDWORD_CANCEL_CLICKED = 111; +const int ArticleReaderForm::IDA_FINDWORD_CLEAR_CLICKED = 112; +const int ArticleReaderForm::IDA_FINDWORD_NEXT_CLICKED = 113; +const int ArticleReaderForm::IDA_FINDWORD_PREV_CLICKED =114; + +ArticleReaderForm::ArticleReaderForm(void): + __pWebReader(null) + ,__pFooterPanel(null) + ,__pMoreBtn(null) + ,__pBackBtn(null) + ,__pSmallFontBtn(null) + ,__pLargeFontBtn(null) + ,__pMoreMenu(null) + ,__pHitElementResult(null) + ,__pSelectionMenu(null) + ,__pPopUp(null) + ,__pFindWordBgLabel(null) + ,__pFindWordClear(null) + ,__pFindWordCountLabel(null) + ,__pFindWordControl(null) + ,__pFindWordEditField(null) + ,__pFindWordNext(null) + ,__pFindWordPrev(null) +{ + +} + +ArticleReaderForm::~ArticleReaderForm(void) +{ + // RemoveAllControls(); +} + +bool +ArticleReaderForm::Initialize(void) +{ + AppLog("ArticleReaderForm::Initialize entered"); + Construct(L"IDL_ARTICLE_READER_FORM"); + return true; +} + +result +ArticleReaderForm::OnInitializing(void) +{ + AppLog("ArticleReaderForm::OnInitializing entered"); + result r = E_SUCCESS; + WebSetting settings; + + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return E_FAILURE; + } + pSceneManager->AddSceneEventListener(IDSCN_ARTICLE_READER, *this); + + __pFooterPanel = static_cast(GetControl("IDC_PANEL1",true)); + if(__pFooterPanel == null) + { + AppLog("GetControl failed for FooterPanel button"); + return E_FAILURE; + } + + __pWebReader = new (std::nothrow) Web(); + __pWebReader->Construct(Rectangle(0,0, GetClientAreaBounds().width,GetClientAreaBounds().height - __pFooterPanel->GetHeight())); + + settings.SetInputStyle(INPUT_STYLE_OVERLAY); + settings.SetFontSize(24/*SettingPresentationModel::GetInstance()->GetReaderFontSize()*/); + + r = __pWebReader->SetSetting(settings); + AddControl(__pWebReader); + SetControlAlwaysAtBottom(*__pWebReader,true); + __pWebReader->LoadUrl("http://google.com");//temporary only for testing + if (IsFailed(r)) + AppLogDebug("Web setting add failed with %s", GetErrorMessage(r)); + + __pWebReader->AddTouchEventListener(*this); + __pWebReader->SetWebUiEventListener(this); + __pWebReader->SetTextSearchListener(this); + __pMoreBtn = static_cast(GetControl("IDC_MORE_BUTTON",true)); + if(__pMoreBtn == null) + { + AppLog("GetControl failed for more button"); + return E_FAILURE; + } + __pMoreBtn->AddActionEventListener(*this); + __pMoreBtn->SetActionId(IDA_MORE_BUTTON); + + + __pBackBtn = static_cast(GetControl("IDC_BACK_BUTTON",true)); + if(__pBackBtn == null) + { + AppLog("GetControl failed for back button"); + return E_FAILURE; + } + __pBackBtn->AddActionEventListener(*this); + __pBackBtn->SetActionId(IDA_BACK_BUTTON); + + + __pSmallFontBtn = static_cast(GetControl("IDC_SMALL_FONT_BUTTON",true)); + if(__pSmallFontBtn == null) + { + AppLog("GetControl failed for small font button"); + return E_FAILURE; + } + __pSmallFontBtn->AddActionEventListener(*this); + __pSmallFontBtn->SetActionId(IDA_SMALL_FONT_BUTTON); + __pSmallFontBtn->SetEnabled(false); + + + __pLargeFontBtn = static_cast(GetControl("IDC_LARGE_FONT_BUTTON",true)); + if(__pLargeFontBtn == null) + { + AppLog("GetControl failed for large font button"); + return E_FAILURE; + } + __pLargeFontBtn->AddActionEventListener(*this); + __pLargeFontBtn->SetActionId(IDA_LARGE_FONT_BUTTON); + + AddOrientationEventListener(*this); + + return r; +} + +result +ArticleReaderForm::OnTerminating(void) +{ + AppLog("ArticleReaderForm::OnTerminating entered"); + result r = E_SUCCESS; + return r; +} + +void +ArticleReaderForm::OnActionPerformed(const Control& source, int actionId) +{ + AppLog("ArticleReaderForm::OnActionPerformed entered actionId %d",actionId); + + SceneManager* pSceneManager = SceneManager::GetInstance(); + result r = E_SUCCESS; + + if (pSceneManager == null) + { + return ; + } + + switch (actionId) + { + case IDA_MORE_BUTTON: + { + if(__pMoreMenu != null) + { + delete __pMoreMenu; + __pMoreMenu = null; + } + __pMoreMenu = new(std::nothrow) ContextMenu(); + r = __pMoreMenu->Construct(Point(50,GetClientAreaBounds().height),CONTEXT_MENU_STYLE_LIST,CONTEXT_MENU_ANCHOR_DIRECTION_UPWARD); + + TryCatch(!IsFailed(r),,"Contextmenu creation failed with%s",GetErrorMessage(r)); + + __pMoreMenu->AddItem(CommonUtil::GetString(L"IDS_COM_SK_SAVE"),IDA_SAVE_CLICKED); + __pMoreMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_SHARE"),IDA_SHARE_CLICKED); + __pMoreMenu->AddItem(CommonUtil::GetString(L"IDS_COM_SK_PRINT"),IDA_PRINT_CLICKED); + __pMoreMenu->SetMaxVisibleItemsCount(3); + __pMoreMenu->SetShowState(true); + __pMoreMenu->Show(); + __pMoreMenu->Invalidate(true); + __pMoreMenu->AddActionEventListener(*this); + SetControlAlwaysOnTop(*__pMoreMenu, true); + } + break; + + case IDA_BACK_BUTTON: + { + SceneManager::GetInstance()->GoBackward(BackwardSceneTransition()); + } + break; + case IDA_SMALL_FONT_BUTTON: + { + WebSetting setting = __pWebReader->GetSetting(); + setting.SetFontSize(24); + + __pWebReader->SetSetting(setting); + __pSmallFontBtn->SetEnabled(false); + __pSmallFontBtn->Invalidate(true); + + __pLargeFontBtn->SetEnabled(true); + __pLargeFontBtn->Invalidate(true); + } + break; + case IDA_LARGE_FONT_BUTTON: + { + WebSetting setting = __pWebReader->GetSetting(); + setting.SetFontSize(32); + __pWebReader->SetSetting(setting); + + __pLargeFontBtn->SetEnabled(false); + __pLargeFontBtn->Invalidate(true); + + __pSmallFontBtn->SetEnabled(true); + __pSmallFontBtn->Invalidate(true); + + } + break; + case IDA_SAVE_CLICKED: + { + if(__pWebReader !=null) + { + r = __pWebReader->SavePageAsPdf(UiApp::GetInstance()->GetAppRootPath()+"//data//test.pdf"); + AppLog("SavePageAsPdf result %s",GetErrorMessage(r)); + + int __modalMsgBoxResult; + MessageBox* pMsgBox = new MessageBox(); + pMsgBox->Construct("Saved","Saved at "+UiApp::GetInstance()->GetAppRootPath()+"//data//test.pdf",MSGBOX_STYLE_OK,3000); + pMsgBox->ShowAndWait(__modalMsgBoxResult); + delete pMsgBox; + pMsgBox = null; + __modalMsgBoxResult = 0; + } + + } + break; + case IDA_SHARE_CLICKED: + { + if(__pPopUp != null) + { + delete __pPopUp; + __pPopUp = null; + } + __pPopUp = new(std::nothrow) SharePopup(); + __pPopUp->Initialize(); + + ShareInfo* pShareInfo = new(std::nothrow) ShareInfo(); + pShareInfo->SetPageTitle(*__pShareTitle); + pShareInfo->SetPageUrl(*__pShareUrl); + pShareInfo->SetImageAttached(false); + __pPopUp->RemoveAllShareInfo(); + __pPopUp->AddShareInfo(pShareInfo); + + __pPopUp->SetShowState(true); + __pPopUp->Show(); + } + break; + case IDA_PRINT_CLICKED: + { + r = __pWebReader->SavePageAsPdf(UiApp::GetInstance()->GetAppRootPath()+"//data//test.pdf"); + AppLog("SavePageAsPdf result %s",GetErrorMessage(r)); + + AppLog("RequestPrint called!"); + AppControl* pAc = Tizen::App::AppManager::FindAppControlN(L"org.tizen.mobileprint", L"http://tizen.org/appcontrol/operation/print"); + result nResult = E_FAILURE; + if (pAc) + { + AppLog("TestPrint if (pAc) == true"); + + HashMap map; + map.Construct(); + + String fileType = L"service_print_files_type"; + String typeVal = L"DOC"; + + String fileCount = L"service_print_files_count"; + String countVal = L"1"; + String fileFolder= L"service_print_files_folder_name"; + String folderVal = UiApp::GetInstance()->GetAppRootPath()+"//data"; + + map.Add(&fileCount, &countVal); + map.Add(&fileFolder, &folderVal); + map.Add(&fileType, &typeVal); + + String fileName = L"service_print_files_files_name"; + + ArrayList fileNameList; + fileNameList.Construct(); + String file1 = L"test.pdf"; + + fileNameList.Add(&file1); + map.Add(&fileName, &fileNameList); + + nResult = pAc->Start(NULL, NULL, &map, NULL); + + if (nResult == E_SUCCESS) AppLog("TestPrint ret == E_SUCCESS"); + else if (nResult == E_MAX_EXCEEDED) + AppLog("TestPrint ret == E_MAX_EXCEEDED"); + else if (nResult == E_OBJ_NOT_FOUND) + AppLog("TestPrint ret == E_OBJ_NOT_FOUND"); + else if (nResult == E_IN_PROGRESS) + AppLog("TestPrint ret == E_IN_PROGRESS"); + else if (nResult == E_PRIVILEGE_DENIED) + AppLog("TestPrint ret == E_PRIVILEGE_DENIED"); + else if(nResult == E_SYSTEM) + AppLog("TestPrint ret == E_SYSTEM"); + + delete pAc; + } + else + { + int __modalMsgBoxResult; + MessageBox* pMsgBox = new MessageBox(); + pMsgBox->Construct("Not Supported","Not Supported",MSGBOX_STYLE_OK,3000); + pMsgBox->ShowAndWait(__modalMsgBoxResult); + delete pMsgBox; + pMsgBox = null; + __modalMsgBoxResult = 0; + } + } + break; + case IDA_COPY_TEXT_CLICKED: + { + + // Sets data to a clip board item + ClipboardItem item; + String resourcePath = App::GetInstance()->GetAppResourcePath(); + item.Construct(CLIPBOARD_DATA_TYPE_TEXT, __pWebReader->GetTextFromBlock()); + __pWebReader->ReleaseBlock(); + // copying the item to clipboard + Clipboard* pClipboard = Clipboard::GetInstance(); + if (pClipboard != null) + { + pClipboard->CopyItem(item); + } + } + break; + case IDA_FIND_TEXT_CLICKED: + { + __randomValue = true; + InitFindWordPanel(); + RelayoutControls(); +// __pWebReader->SetBounds(0,__pFindWordControl->GetHeight(),GetClientAreaBounds().width,GetClientAreaBounds().height - __pFooterPanel->GetHeight() - __pFindWordControl->GetHeight()); + } + break; + case IDA_SHARE_TEXT_CLICKED: + { + AppLogDebug("IDA_SHARE_TEXT_CLICKED"); + if(__pPopUp != null) + { + delete __pPopUp; + __pPopUp = null; + } + __pPopUp = new(std::nothrow) SharePopup(); + __pPopUp->Initialize(); + if (__pHitElementResult != null) + { + ShareInfo* pShareInfo = new(std::nothrow) ShareInfo(); + pShareInfo->SetPageTitle(L""); + pShareInfo->SetPageUrl(__pWebReader->GetTextFromBlock()); + pShareInfo->SetImageAttached(false); + __pPopUp->RemoveAllShareInfo(); + __pPopUp->AddShareInfo(pShareInfo); + __pPopUp->SetShowState(true); + __pPopUp->Show(); + } + } + break; + + case IDA_FINDWORD_CANCEL_CLICKED: + { +// currentSearchStr = L""; +// currentWordIndex = 0; +// maxOccurances = 0; + __pFindWordEditField->SetText(L""); + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); + __pFindWordCountLabel->SetText(L"0/0"); + __pWebReader->SearchText(L"aaaabbbbcccc",true); + __pFooterPanel->SetShowState(true); + __pFindWordControl->SetShowState(false); + RelayoutControls(); + + } + break; + case IDA_FINDWORD_CLEAR_CLICKED: + { + __pFindWordCountLabel->SetText(L"0/0"); + __pFindWordEditField->SetText(L""); + __pFindWordPrev->SetEnabled(false); + __pWebReader->SearchText(L"aaaaaabbbbbbccccccc"); + __pFindWordNext->SetEnabled(false); + __pFindWordControl->Invalidate(true); + } + break; + case IDA_FINDWORD_NEXT_CLICKED: + { + FindNextWord(true); + } + break; + case IDA_FINDWORD_PREV_CLICKED: + { + FindNextWord(false); + } + break; + break; + default: + break; + } + + CATCH: return; +} + +void +ArticleReaderForm::OnKeypadOpened(Tizen::Ui::Control& source) +{ + __pFooterPanel->SetShowState(false); +} + +void +ArticleReaderForm::OnKeypadClosed(Tizen::Ui::Control& source) +{ + __pFooterPanel->SetShowState(true); + RelayoutControls(); +} + +void +ArticleReaderForm::OnTouchLongPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo) +{ + AppLog("ArticleReaderForm::OnTouchLongPressed %d, %d" ,currentPosition.x,currentPosition.y); + + if (__pHitElementResult != null) + { + delete __pHitElementResult; + __pHitElementResult = null; + } + + if (__pWebReader != null) + { + AppLog("ArticleReaderForm::OnTouchLongPressed web not null"); + __pHitElementResult = __pWebReader->GetElementByPointN(currentPosition); + } + + if (__pHitElementResult == null) + { + return; + } + + if (__pHitElementResult->HasImage() == true) + { + + } + else if(__pHitElementResult->HasUrl() == true) + { + + } + else + { + String tagName = __pHitElementResult->GetTagName(); + String type = __pHitElementResult->GetAttributeValue("type"); + String value = __pHitElementResult->GetAttributeValue(L"value"); + String innerHtml = __pHitElementResult->GetAttributeValue(L"innerHTML"); + + result r =__pWebReader->SetBlockSelectionPosition(currentPosition); + AppLog("setselectionselectedornot %s",GetErrorMessage(r)); + + } +// __inputEventToBeSupressed = true; +} + +void +ArticleReaderForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs) +{ + AppLog("ArticleReaderForm::OnSceneActivatedN entered"); + int index = 0; + __pReaderData = static_cast(pArgs->GetAt(index++)); + __pShareUrl = static_cast(pArgs->GetAt(index++)); + __pShareTitle = static_cast(pArgs->GetAt(index++)); + AppLog("ArticleReaderForm::OnSceneActivatedN __pReaderData %ls",__pReaderData->GetPointer()); + + String loadData = L"\ + \ + \ + \ + \ + "); + AppLogDebug("data->GetLength %d",__pReaderData->GetLength()); + loadData.Append(*__pReaderData); + loadData.Append(L""); + + ByteBuffer buf ; + buf.Construct(loadData.GetLength()); + AppLogDebug("data->GetLength %d",loadData.GetLength()); + for (int z=0;zLoadData(L"",buf,L"text/html"); + AppLogDebug("LoadData result %s",GetErrorMessage(GetLastResult())); + } + else + { + AppLogDebug("cannot LoadData __pWebReader is null"); + } + + +} + +void +ArticleReaderForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + AppLog("ArticleReaderForm::OnSceneDeactivated entered"); +} + +void +ArticleReaderForm::OnTextFound(int totalCount, int currentOrdinal) +{ + AppLog("ArticleReaderForm::OnTextFound totalCount %d",totalCount); + AppLog("ArticleReaderForm::OnTextFound currentOrdinal %d",currentOrdinal); + + if(totalCount == -1 || totalCount == 0) + { + __pFindWordCountLabel->SetBounds(__pFindWordCountLabel->GetX(),__pFindWordCountLabel->GetY(),84,__pFindWordCountLabel->GetHeight()); + __pFindWordEditField->SetBounds(__pFindWordEditField->GetX(),__pFindWordEditField->GetY(),214+80,__pFindWordEditField->GetHeight()); + } + else if(totalCount > 100) + { + __pFindWordCountLabel->SetBounds(__pFindWordCountLabel->GetX(),__pFindWordCountLabel->GetY(),124,__pFindWordCountLabel->GetHeight()); + __pFindWordEditField->SetBounds(__pFindWordEditField->GetX(),__pFindWordEditField->GetY(),174,__pFindWordEditField->GetHeight()); + } + else + { + __pFindWordCountLabel->SetBounds(__pFindWordCountLabel->GetX(),__pFindWordCountLabel->GetY(),124,__pFindWordCountLabel->GetHeight()); + __pFindWordEditField->SetBounds(__pFindWordEditField->GetX(),__pFindWordEditField->GetY(),174,__pFindWordEditField->GetHeight()); + } + + if (totalCount <= 0) + { + __pFindWordNext->SetEnabled(false); + } + else + { + __pFindWordNext->SetEnabled(true); + } + + String countStr = L""; + countStr.Append(currentOrdinal); + countStr.Append(L"/"); + countStr.Append(totalCount); + __pFindWordCountLabel->SetText(countStr); + __pFindWordCountLabel->Invalidate(false); + + //FindNextWord(true); + //Update the controls + __pFindWordNext->Invalidate(false); +} + +void +ArticleReaderForm::OnWebPageBlockSelected(Tizen::Web::Controls::Web& source, Tizen::Graphics::Point& startPoint, Tizen::Graphics::Point& endPoint) +{ + AppLog("ArticleReaderForm::OnWebPageBlockSelected"); + if (__pHitElementResult != null) + { + delete __pHitElementResult; + __pHitElementResult = null; + } + + if (__pWebReader != null) + { + AppLog("ArticleReaderForm::OnWebPageBlockSelected web not null"); + __pHitElementResult = __pWebReader->GetElementByPointN(startPoint); + if(GetLastResult() == E_INVALID_ARG) + { + __pHitElementResult = __pWebReader->GetElementByPointN(endPoint); + } + } + + if (__pHitElementResult == null) + { + return; + } + + if (__pHitElementResult->HasImage() != true) + { + String tagName = __pHitElementResult->GetTagName(); + String type = __pHitElementResult->GetAttributeValue("type"); + + + if (((tagName.CompareTo(L"INPUT") == 0) || tagName.CompareTo(L"TEXTAREA") == 0)) + { + + } + else + { + AppLog("ArticleReaderForm::OnWebPageBlockSelected no paste option"); + + if(__pHitElementResult->GetUrl().GetLength() > 0) + { + } + InitSelectTextContextMenu(endPoint); + __pSelectionMenu->SetShowState(true); + __pSelectionMenu->Show(); + __pSelectionMenu->Invalidate(true); + } + + AppLog("ArticleReaderForm::OnWebPageBlockSelected tag name is %ls",tagName.GetPointer()); + AppLog("ArticleReaderForm::OnWebPageBlockSelected type name is %ls",type.GetPointer()); + } + +} + +void +ArticleReaderForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus) +{ + AppLog("ArticleReaderForm::OnOrientationChanged entered"); + if(__pFindWordControl) + { + if (__pFindWordBgLabel != null) + { + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_FINDWORD_INPUT_FIELD_BG, __pFindWordBgLabel->GetWidth(), __pFindWordBgLabel->GetHeight()); + if (pBitmap != null) + { + __pFindWordBgLabel->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + } + + __pFindWordControl->SetBounds(0,0, __pFindWordControl->GetWidth(), __pFindWordControl->GetHeight()); + } + RelayoutControls(); +} + + +void +ArticleReaderForm::OnTextValueChanged (const Tizen::Ui::Control &source) +{ + if (__pFindWordEditField != null) + { + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); + __pFindWordNext->Invalidate(true); + __pFindWordPrev->Invalidate(true); + __pFindWordCountLabel->SetText(L"0/0"); + __pFindWordCountLabel->Invalidate(true); + } + if (__pFindWordEditField &&__pFindWordEditField->GetText().GetLength() > 0) + { + StartWordSearch(); + } + else + { + __pFindWordPrev->SetEnabled(false); + __pWebReader->SearchText(L"aaaaaaaabbbbbbbccccccc"); + } + __randomValue = true; +// else +// { +//// currentSearchStr = L"aaaaaaaabbbbbbbccccccc"; +// StartWordSearch(); +//// currentSearchStr = L""; +// AppLogDebug("Enter something"); +// } +} + +result +ArticleReaderForm::InitSelectTextContextMenu(Tizen::Graphics::Point p) +{ + result r = E_SUCCESS; + ContextMenuAnchorDirection direction = CONTEXT_MENU_ANCHOR_DIRECTION_AUTO; + + AppLog("ArticleReaderForm::InitSelectTextContextMenu clicked on text"); + if (__pSelectionMenu != null) + { + delete __pSelectionMenu; + __pSelectionMenu = null; + } + + if(p.y < 150) + { + p.y = p.y + 50; + direction = CONTEXT_MENU_ANCHOR_DIRECTION_DOWNWARD; + } + else + { + direction = CONTEXT_MENU_ANCHOR_DIRECTION_UPWARD; + } + __pSelectionMenu = new (std::nothrow) ContextMenu(); + r = __pSelectionMenu->Construct(p, CONTEXT_MENU_STYLE_GRID, direction); + TryCatch(!IsFailed(r),, "Context image menu creation failed with%s",GetErrorMessage(r)); + + r = __pSelectionMenu->AddItem(CommonUtil::GetString(L"IDS_COM_OPT_COPY"),IDA_COPY_TEXT_CLICKED); + r = __pSelectionMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_FIND_ON_PAGE_ABB"),IDA_FIND_TEXT_CLICKED); + r = __pSelectionMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_SHARE"),IDA_SHARE_TEXT_CLICKED); + + __pSelectionMenu->SetMaxVisibleItemsCount(3); + __pSelectionMenu->AddActionEventListener(*this); + SetControlAlwaysOnTop(*__pSelectionMenu, true); + + CATCH: return r; + +} + +result +ArticleReaderForm::InitFindWordPanel(void) +{ + result r = E_SUCCESS; + Bitmap *pIconBitmap = null; + + if (__pFindWordControl != null) + { + __pFindWordControl->SetBounds(0,0, __pFindWordControl->GetWidth(), __pFindWordControl->GetHeight()); + __pFindWordControl->SetShowState(true); + __pFindWordEditField->SetText(__pWebReader->GetTextFromBlock()); + + + __pFindWordEditField->SetFocus(); + + if (__pFindWordEditField->GetText().GetLength() > 0) + { + StartWordSearch(); + } + __pFindWordEditField->Invalidate(false); + return r; + } + + __pFindWordControl = new (std::nothrow) Panel(); + r = __pFindWordControl->Construct(L"IDL_FIND_ON_PAGE"); + if (IsFailed(r)) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + AddControl(__pFindWordControl); + __pFindWordControl->SetBounds(0,0, __pFindWordControl->GetWidth(), __pFindWordControl->GetHeight()); + SetControlAlwaysOnTop(*__pFindWordControl,true); + __pFindWordControl->SetShowState(true); + __pFindWordControl->Invalidate(false); + + __pFindWordBgLabel = static_cast(__pFindWordControl->GetControl(L"IDC_LABEL1", true)); + if (__pFindWordBgLabel != null) + { + Panel* pPanel1 = static_cast(__pFindWordControl->GetControl(L"IDC_PANEL1", true)); + Rectangle pRect = pPanel1->GetBounds(); + pRect.x = pRect.y = 0; + __pFindWordBgLabel->SetBounds(pRect); + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(L"I01_search_input_field_bg.9.png", __pFindWordBgLabel->GetWidth(), __pFindWordBgLabel->GetHeight()); + if (pBitmap != null) + { + AppLogDebug("InitFindWordPanel: Coming here"); + __pFindWordBgLabel->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + else + { + AppLogDebug("InitFindWordPanel: shouldn't Come here"); + } + } + + Button* pfindWordCancel = null; + pfindWordCancel = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_CANCEL", true)); + if (pfindWordCancel == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + pfindWordCancel->SetActionId(IDA_FINDWORD_CANCEL_CLICKED); + pfindWordCancel->AddActionEventListener(*this); + + __pFindWordClear = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_CLEAR", true)); + if (__pFindWordClear == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + + __pFindWordClear->SetActionId(IDA_FINDWORD_CLEAR_CLICKED); + __pFindWordClear->AddActionEventListener(*this); + + __pFindWordNext = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_NEXT", true)); + if (__pFindWordNext == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + + __pFindWordNext->SetActionId(IDA_FINDWORD_NEXT_CLICKED); + __pFindWordNext->AddActionEventListener(*this); + + __pFindWordPrev = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_PREV", true)); + if (__pFindWordPrev == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + + __pFindWordPrev->SetActionId(IDA_FINDWORD_PREV_CLICKED); + __pFindWordPrev->AddActionEventListener(*this); + + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); + + __pFindWordCountLabel = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_COUNT_LABEL", true)); + if (__pFindWordCountLabel == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + + __pFindWordEditField = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_WORD_EDITFIELD", true)); + if (__pFindWordEditField == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + __pFindWordEditField->SetText(__pWebReader->GetTextFromBlock()); + __pFindWordEditField->AddTextEventListener(*this); + __pFindWordEditField->AddKeypadEventListener(*this); + __pFindWordEditField->SetOverlayKeypadCommandButtonVisible(false); + + __pFindWordEditField->SetFocus(); +// __pFindWordEditField->ShowKeypad(); + if (__pFindWordEditField->GetText().GetLength() > 0) + { + StartWordSearch(); + } + return r; +} + +void +ArticleReaderForm::StartWordSearch() +{ + __pFindWordPrev->SetEnabled(false); + __pWebReader->SearchTextAllAsync(__pFindWordEditField->GetText(), false); + +} + +void +ArticleReaderForm::RelayoutControls() +{ + if( __pFindWordControl && __pFindWordControl->GetShowState() == true) + { + __pFindWordControl->SetBounds(0,0, __pFindWordControl->GetWidth(), __pFindWordControl->GetHeight()); + if(__pFooterPanel && __pFooterPanel->GetShowState() == true && __pWebReader) + __pWebReader->SetBounds(0,__pFindWordControl->GetHeight(),GetClientAreaBounds().width, GetClientAreaBounds().height - __pFooterPanel->GetHeight() - __pFindWordControl->GetHeight()); + else if(__pWebReader) + __pWebReader->SetBounds(0,__pFindWordControl->GetHeight(),GetClientAreaBounds().width, GetClientAreaBounds().height - __pFindWordControl->GetHeight()); + } + else + { + if(__pFooterPanel && __pFooterPanel->GetShowState() == true && __pWebReader) + __pWebReader->SetBounds(0,0,GetClientAreaBounds().width, GetClientAreaBounds().height - __pFooterPanel->GetHeight()); + else if(__pWebReader) + __pWebReader->SetBounds(0,0,GetClientAreaBounds().width, GetClientAreaBounds().height); + + } +} + + +void +ArticleReaderForm::FindNextWord(bool next) +{ + String currentSearchStr = __pFindWordEditField->GetText(); + int currentWordIndex = 0; + String curWordIndexStr = L""; + int maxOccurances = 0; + String maxOccurancesStr = L""; + int index = -1; + String countStr = __pFindWordCountLabel->GetText(); + countStr.IndexOf(L"/",0,index); + countStr.SubString(0,index,curWordIndexStr); + countStr.SubString(index+1,maxOccurancesStr); + Integer::Parse(curWordIndexStr,currentWordIndex); + Integer::Parse(maxOccurancesStr,maxOccurances); + if (next == true) + { + if (__pWebReader->SearchText(currentSearchStr, true) == true) + { + if(currentWordIndex < maxOccurances) + { + currentWordIndex++; + } + if(__randomValue == true) + { + __randomValue = false; + __pWebReader->SearchText(currentSearchStr, true); + } + } + } + else + { + if (__pWebReader->SearchText(currentSearchStr, false) == true) + { + if(currentWordIndex > 1) + { + currentWordIndex--; + } + } + } + + countStr.Clear(); + countStr.Append(currentWordIndex); + countStr.Append(L"/"); + countStr.Append(maxOccurances); + __pFindWordCountLabel->SetText(countStr); + // __pFindWordCountLabel->SetShowState(true); + __pFindWordCountLabel->Invalidate(false); + if (currentWordIndex >= maxOccurances) + { + __pFindWordNext->SetEnabled(false); + } + else + { + __pFindWordNext->SetEnabled(true); + } + if (currentWordIndex <= 1) + { + __pFindWordPrev->SetEnabled(false); + } + else + { + __pFindWordPrev->SetEnabled(true); + } + __pFindWordPrev->Invalidate(false); + __pFindWordNext->Invalidate(false); + __pFindWordCountLabel->Invalidate(false); + __pFindWordControl->Invalidate(true); +} diff --git a/src/IntBookmarkData.cpp b/src/IntBookmarkData.cpp new file mode 100644 index 0000000..dd5a270 --- /dev/null +++ b/src/IntBookmarkData.cpp @@ -0,0 +1,261 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntBookmark.cpp + *@brief: Used to define bookmark + */ + +#include +#include "IntBookmarkData.h" + +using namespace Tizen::Base; +using namespace Tizen::Media; +using namespace Tizen::Graphics; + +BookmarkData::BookmarkData(void) + : __bookmarkId("") + , __bookmarkType(BOOKMARK_TYPE_URL) + , __bookmarkTitle("") + , __bookmarkUrl("") + , __parentId("0") + , __iconPath("") + , __faviconId("") + , __pFavIconData(null) + , __favIconWidth(0) + , __favIconHeight(0) +{ + __createdTime.SetValue(0, 0, 0); + __modifiedTime.SetValue(0, 0, 0); +} + +BookmarkData::BookmarkData(const BookmarkData& bookmark) +{ + __bookmarkId = bookmark.__bookmarkId; + __bookmarkType = bookmark.__bookmarkType; + __bookmarkTitle = bookmark.__bookmarkTitle; + __bookmarkUrl = bookmark.__bookmarkUrl; + __parentId = bookmark.__parentId; + __iconPath=bookmark.__iconPath; + __faviconId=bookmark.__faviconId; +} + +BookmarkData::~BookmarkData(void) +{ + if(__pFavIconData) + { + delete __pFavIconData; + } +} + +BookmarkData& +BookmarkData::operator =(const BookmarkData& rhs) +{ + if (this != &rhs) + { + __bookmarkId = rhs.__bookmarkId; + __bookmarkType = rhs.__bookmarkType; + __bookmarkTitle = rhs.__bookmarkTitle; + __bookmarkUrl = rhs.__bookmarkUrl; + __parentId = rhs.__parentId; + __iconPath = rhs.__iconPath; + __faviconId = rhs.__faviconId; + } + return *this; +} + +String +BookmarkData::GetBookmarkId(void) +{ + return __bookmarkId; +} + +type +BookmarkData::GetBookmarkType(void) +{ + if (__bookmarkUrl.GetLength() > 0) + __bookmarkType = BOOKMARK_TYPE_URL; + else + __bookmarkType = BOOKMARK_TYPE_FOLDER; + return __bookmarkType; +} + +String +BookmarkData::GetBookmarkTitle(void) +{ + return __bookmarkTitle; +} + +String +BookmarkData::GetUrl(void) +{ + return __bookmarkUrl; +} + +String +BookmarkData::GetParentId(void) +{ + return __parentId; +} + +DateTime +BookmarkData::GetCreatedTime(void) +{ + return __createdTime; +} + +DateTime +BookmarkData::GetModifiedTime(void) +{ + return __modifiedTime; +} + +String +BookmarkData::GetIconPath(void) +{ + return __iconPath; +} + +String +BookmarkData::GetFaviconId(void) +{ + return __faviconId; +} + +void +BookmarkData::SetBookmarkId(const String& strBookmarkId) +{ + __bookmarkId = strBookmarkId; +} + +void +BookmarkData::SetBookmarkTitle(String& strTitle) +{ + strTitle.Trim(); + __bookmarkTitle = strTitle; +} + +void BookmarkData::SetBookmarkType(type bookmarkType) +{ + __bookmarkType = bookmarkType; +} + +void +BookmarkData::SetUrl(const String& strUrl) +{ + __bookmarkUrl = strUrl; +} + +void +BookmarkData::SetParentId(const String& strParentID) +{ + __parentId = strParentID; +} + +void +BookmarkData::SetCreatedTime(const DateTime& strCreatedTime) +{ + __createdTime = strCreatedTime; +} + +void +BookmarkData::SetModifiedTime(const DateTime& strModifiedTime) +{ + __modifiedTime = strModifiedTime; +} + +void +BookmarkData::SetIconPath(const String& strFilePath) +{ + __iconPath = strFilePath; +} + +void +BookmarkData::SetFaviconId(const String& strFaviconId) +{ + __faviconId = strFaviconId; +} + +void +BookmarkData::SetFavIconBitmap(Tizen::Graphics::Bitmap& favIconImage) +{ + Image* pImage = null; +// ByteBuffer* pEncodedBuffer = null; + + __favIconWidth = favIconImage.GetWidth(); + __favIconHeight = favIconImage.GetHeight(); + + pImage = new Image(); + pImage->Construct(); + //__pFavIconData = pImage->EncodeToBufferN(favIconImage,Tizen::Media::IMG_FORMAT_PNG); + __pFavIconData = pImage->EncodeToBufferN(favIconImage,IMG_FORMAT_PNG); + + //__pFavIconData = pImage->DecodeToBufferN(*pEncodedBuffer, IMG_FORMAT_PNG, BITMAP_PIXEL_FORMAT_ARGB8888, __favIconWidth, __favIconHeight); + + delete pImage; +} + +void +BookmarkData::SetFavIconBuffer(Tizen::Base::ByteBuffer& favIconBuffer) +{ + __pFavIconData = &favIconBuffer; +} + +ByteBuffer* +BookmarkData::GetFavIconBuffer() +{ + return __pFavIconData; +} + +Bitmap* +BookmarkData::GetFavIconBitmap() +{ + Bitmap *pBitmap = null; + + if (__pFavIconData != null) + { + Image *pImage = new(std::nothrow) Image(); + pImage->Construct(); + pBitmap = pImage->DecodeN(*__pFavIconData, IMG_FORMAT_PNG, BITMAP_PIXEL_FORMAT_ARGB8888); + delete pImage; + } + return pBitmap; +} + + + +int BookmarkData::GetFavIconWidth() +{ + return __favIconWidth; +} + +int BookmarkData::GetFavIconHeight() +{ + return __favIconHeight; +} + +void +BookmarkData::SetFavIconWidth(int favIconWidth) +{ + __favIconWidth = favIconWidth; +} + +void +BookmarkData::SetFavIconHeight(int favIconHeight) +{ + __favIconHeight = favIconHeight; +} diff --git a/src/IntBookmarkListForm.cpp b/src/IntBookmarkListForm.cpp new file mode 100644 index 0000000..d627a3a --- /dev/null +++ b/src/IntBookmarkListForm.cpp @@ -0,0 +1,1251 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntBookmarkListForm + *@brief: This class defines BookmarkListForm + * + */ + +#include +#include "IntBookmarkData.h" +#include "IntBookmarkListForm.h" +#include "IntBookmarkPresentationModel.h" +#include "IntCommonLib.h" +#include "IntConfirmationPopup.h" +#include "IntFaviconManager.h" +#include "IntMultipleWindowPresentationModel.h" +#include "IntSceneRegister.h" +#include "IntTypes.h" + + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; +using namespace Tizen::Media; + +const wchar_t* DEFAULT_VALUE_PARENTID = L"0"; +static const wchar_t* IDB_TAB_ICON_BOOKMARK = L"I01_search_list_icon_favorite.png"; +static const wchar_t* IDB_TAB_ICON_HISTORY = L"I01_search_list_icon_history.png"; +static const wchar_t* IDB_NO_CONTENT_BOOKMARK = L"I01_Nocontents_Bookmarks.png"; +static const wchar_t* IDB_ICON_FOLDER_OPEN = L"I01_icon_folder_open.png"; + +const int BookmarkListForm::IDA_TABBAR_ITEM_1 = 101; +const int BookmarkListForm::IDA_TABBAR_ITEM_2 = 102; +const int BookmarkListForm::IDA_FOOTER_ITEM1 = 103; +const int BookmarkListForm::IDA_FOOTER_ITEM2 = 104; +const int BookmarkListForm::IDA_FOOTER_ITEM_ADDBOOKMARK = 105; +const int BookmarkListForm::IDA_FORMAT_FOLDER = 106; +const int BookmarkListForm::IDA_FORMAT_SITE = 107; +const int BookmarkListForm::IDA_CONTEXT_ITEM_FOLDER_EDIT = 108; +const int BookmarkListForm::IDA_CONTEXT_ITEM_FOLDER_DELETE = 109; +const int BookmarkListForm::IDA_CONTEXT_ITEM_EDIT = 110; +const int BookmarkListForm::IDA_CONTEXT_ITEM_SHARE = 111; +const int BookmarkListForm::IDA_CONTEXT_ITEM_DELETE = 112; +const int BookmarkListForm::IDA_FORMAT_ICON = 113; +const int BookmarkListForm::IDA_FORMAT_URL = 114; + +//const int BookmarkListForm::IDA_CONFIRMATION_NO = 1000; +//const int BookmarkListForm::IDA_CONFIRMATION_YES = 1001; + +BookmarkListForm::BookmarkListForm(void) +{ + __pItemContextFolder = null ; + __pItemContextSite = null ; + __pListview = null; + __pData = null; + __pSearchListView = null; + __pSearchBar = null; + __searchBookmark = false; + __parentID = DEFAULT_VALUE_PARENTID; + __noBookmarks = true; + __selectedindex = 0; + __searchText = L""; + __previousSceneId = L""; + __fontSize = 44; +} + +BookmarkListForm::~BookmarkListForm(void) +{ + + if (__pData != null) + { + __pData->RemoveAll(true); + delete __pData; + __pData = NULL; + } + + if (__pItemContextFolder != null) + { + delete __pItemContextFolder; + __pItemContextFolder = null; + } + + if (__pItemContextSite != null) + { + delete __pItemContextSite; + __pItemContextSite = null; + } +} + +result +BookmarkListForm::OnTerminating(void) +{ + result r = E_SUCCESS; + + if (__pData != null) + { + __pData->RemoveAll(true); + delete __pData; + __pData = NULL; + } + + return r; +} + + +bool +BookmarkListForm::Initialize(void) +{ + Construct(L"IDL_BOOKMARK_LIST"); + return true; +} + +result +BookmarkListForm::OnInitializing(void) +{ + result r = E_SUCCESS; + HeaderItem bookmark; + HeaderItem history; + Header *pHeader = GetHeader(); + Bitmap *pIconBitmap = null; + AppResource* pAppResource = UiApp::GetInstance()->GetAppResource(); + int bookmarkCount = 0; + const int WIDTH_CONTEXT_MENU_TWO_BUTTON = 336; + const int WIDTH_CONTEXT_MENU_THREE_BUTTON = 160; + const int HEIGHT_CONTEXT_MENU_BUTTON = 72; + + + // Setup back event listener + SetFormBackEventListener(this); + AddOrientationEventListener(*this); + + SceneManager::GetInstance()->AddSceneEventListener(IDSCN_BOOKMARK_VIEW, *this); + GetHeader()->AddActionEventListener(*this); + GetFooter()->AddActionEventListener(*this); + + if ( pAppResource == NULL ) + { + return E_FAILURE; + } + + __fontSize = CommonUtil::GetFontSize(); + __pItemContextFolder = new(std::nothrow) ListContextItem(); + __pItemContextFolder->Construct(); + __pItemContextFolder->AddElement(IDA_CONTEXT_ITEM_FOLDER_EDIT, CommonUtil::GetString(L"IDS_BR_SK_EDIT")); + + __pItemContextFolder->AddElement(IDA_CONTEXT_ITEM_FOLDER_DELETE, CommonUtil::GetString(L"IDS_BR_SK_DELETE_ABB"), true); + __pItemContextFolder->SetElementBackgroundColor(IDA_CONTEXT_ITEM_FOLDER_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_NORMAL , CONTEXT_ITEM_DELETE_COLOR); + __pItemContextFolder->SetElementBackgroundColor(IDA_CONTEXT_ITEM_FOLDER_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_HIGHLIGHTED , CONTEXT_ITEM_DELETE_COLOR); + __pItemContextFolder->SetElementBackgroundColor(IDA_CONTEXT_ITEM_FOLDER_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_PRESSED , CONTEXT_ITEM_DELETE_COLOR); + + __pItemContextSite = new(std::nothrow) ListContextItem(); + __pItemContextSite->Construct(); + __pItemContextSite->AddElement(IDA_CONTEXT_ITEM_EDIT, CommonUtil::GetString(L"IDS_BR_SK_EDIT")); + __pItemContextSite->AddElement(IDA_CONTEXT_ITEM_SHARE, CommonUtil::GetString(L"IDS_BR_OPT_SHARE")); + + __pItemContextSite->AddElement(IDA_CONTEXT_ITEM_DELETE, CommonUtil::GetString(L"IDS_BR_SK_DELETE_ABB"), true); + __pItemContextSite->SetElementBackgroundColor(IDA_CONTEXT_ITEM_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_NORMAL , CONTEXT_ITEM_DELETE_COLOR); + __pItemContextSite->SetElementBackgroundColor(IDA_CONTEXT_ITEM_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_HIGHLIGHTED , CONTEXT_ITEM_DELETE_COLOR); + __pItemContextSite->SetElementBackgroundColor(IDA_CONTEXT_ITEM_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_PRESSED , CONTEXT_ITEM_DELETE_COLOR); + + __pListview = static_cast< ListView* >(GetControl("IDC_LISTVIEW1")); + + if (__pListview == null) + { + return E_FAILURE; + } + __pSearchBar = static_cast< SearchBar* >(GetControl(L"IDC_SEARCHBAR1")); + + if (__pSearchBar == null) + { + return E_FAILURE; + } + + __pSearchBar->AddFocusEventListener(*this); + if (__pListview != null) + { + __pListview->SetBackgroundColor(GetBackgroundColor()); + // __pListview->SetBounds(__pListview->GetX(), __pListview->GetY(), GetClientAreaBounds().width, GetClientAreaBounds().height); + __pListview->AddFastScrollListener(*this); + __pListview->AddListViewItemEventListener(*this); + __pListview->SetItemProvider(*this); + __pListview->UpdateList(); + } + + __pPopUp = new(std::nothrow) SharePopup(); + + if (__pPopUp != null) + { + __pPopUp->Initialize(); +// AddControl(__pPopUp); + } + + __pSearchListView = new(std::nothrow) ListView(); + + if (__pSearchListView == null) + { + return E_FAILURE; + } + + r = __pSearchListView->Construct(Rectangle(0, 0, GetClientAreaBounds().width, GetClientAreaBounds().height -72), true, false); + TryCatch( !IsFailed(r),,"BookmarkListForm::OnSearchBarModeChanged Update list failed %s",GetErrorMessage(r)); + + __pSearchListView->SetBackgroundColor(GetBackgroundColor()); + __pSearchListView->SetItemProvider(*this); + __pSearchListView->SetTextOfEmptyList(CommonUtil::GetString(L"IDS_BR_BODY_NO_RESULTS_FOUND")); + __pSearchListView->SetTextColorOfEmptyList(Color::GetColor(COLOR_ID_BLACK)); + __pSearchListView->SetShowState(false); + __pSearchListView->AddListViewItemEventListener(*this); + + __pSearchBar->AddSearchBarEventListener(*this); + __pSearchBar->AddKeypadEventListener(*this); + __pSearchBar->SetContent(__pSearchListView); + + BookmarkPresentationModel::GetInstance()->GetFolderBookmarkCount(__parentID, bookmarkCount); + if(bookmarkCount <= 0) + { + __pSearchBar->SetShowState(false); + //__pListview->SetBounds(__pListview->GetX(),__pSearchBar->GetY(),__pSearchBar->GetWidth(),GetClientAreaBounds().height - __pSearchBar->GetPosition().y); + __pListview->SetBounds(__pListview->GetX(),__pSearchBar->GetY(),__pListview->GetWidth(),GetClientAreaBounds().height); + } + else + { + __pSearchBar->SetShowState(true); + } + + + if (pHeader != null) + { + pHeader->SetStyle(HEADER_STYLE_TAB); + bookmark.Construct(IDA_TABBAR_ITEM_1); + String strbookmark; + pAppResource->GetString(L"IDS_BR_TAB_BOOKMARKS", strbookmark); + bookmark.SetText(strbookmark); + pIconBitmap = pAppResource->GetBitmapN(IDB_TAB_ICON_BOOKMARK); + bookmark.SetIcon(HEADER_ITEM_STATUS_NORMAL, pIconBitmap); + bookmark.SetIcon(HEADER_ITEM_STATUS_PRESSED, pIconBitmap); + pHeader->AddItem(bookmark); + + if (pIconBitmap != NULL) + { + delete pIconBitmap; + } + + history.Construct(IDA_TABBAR_ITEM_2); + String strhistory; + pAppResource->GetString(L"IDS_BR_TAB_HISTORY", strhistory); + history.SetText(strhistory); + pIconBitmap = pAppResource->GetBitmapN(IDB_TAB_ICON_HISTORY); + history.SetIcon(HEADER_ITEM_STATUS_NORMAL, pIconBitmap); + history.SetIcon(HEADER_ITEM_STATUS_PRESSED, pIconBitmap); + pHeader->AddItem(history); + pHeader->SetItemSelected(0); + pHeader->SetTabEditModeEnabled(false); + + if (pIconBitmap != NULL) + { + delete pIconBitmap; + } + } + + + CATCH:return r; +} + +void +BookmarkListForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId) +{ + AppLogDebug("BookmarkListForm::OnActionPerformed actionId = %d",actionId); + String bookmarkId; + int id = 0; + BookmarkData* pBookMark = null; + + switch (actionId) + { + case IDA_FOOTER_ITEM1: + { + __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL); +// GetHeader()->SetItemSelected(0); +// GetHeader()->Invalidate(true); + SceneManager* pSceneManager = SceneManager::GetInstance(); + pBookMark = dynamic_cast< BookmarkData* >(__pData->GetAt(__selectedindex)); + + if ( pBookMark == NULL ) + { + return; + } + + ArrayList* pArgList = null; + pArgList = new(std::nothrow) ArrayList(); + if (pArgList != null) + { + pArgList->Construct(); + pArgList->Add(*new(std::nothrow) String(pBookMark->GetParentId())); + } + //pArgList->Add(*new(std::nothrow) String(pBookmark->); + if (pSceneManager != null) + { + if(pSceneManager->GoForward(ForwardSceneTransition(IDSCN_EDIT_BOOKMARK_LIST),pArgList) != E_SUCCESS) + { + AppLogDebug("BookmarkListForm::OnActionPerformed GoForward failed"); + pArgList->RemoveAll(true); + delete pArgList; + pArgList = null; + return; + } + } + + if ( pArgList != NULL) + { + pArgList->RemoveAll(true); + delete pArgList; + } + } + + break; + case IDA_TABBAR_ITEM_2: + { + // GetHeader()->SetItemSelected(0); + // GetHeader()->Invalidate(true); + + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager != null) + { + if(__previousSceneId.CompareTo(IDSCN_HISTORY_LIST) != 0) + { + if(pSceneManager->GoForward(ForwardSceneTransition(IDSCN_HISTORY_LIST, SCENE_TRANSITION_ANIMATION_TYPE_LEFT)) != E_SUCCESS) + { + AppLogDebug("BookmarkListForm::OnActionPerformed GoForward failed"); + return; + } + } + else + { + + if(pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT))!= E_SUCCESS) + { + AppLogDebug("BookmarkListForm::OnActionPerformed GoBackward failed"); + return; + } + + } + } + } + break; + case IDA_FOOTER_ITEM2: + { + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager) + { + if(pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CREATE_BOOKMARK_FOLDER)) != E_SUCCESS) + { + AppLogDebug("BookmarkListForm::OnActionPerformed GoForward failed"); + return; + } + } + } + break; + case IDA_FOOTER_ITEM_ADDBOOKMARK: + { + SceneManager* pSceneManager = SceneManager::GetInstance(); + + // send array list 0-for add, 1 for edit with parent ID + ArrayList* pArgList = null; + pArgList = new(std::nothrow) ArrayList(); + if (pArgList != null) + { + pArgList->Construct(); + pArgList->Add(*new(std::nothrow) String(L"0")); + pArgList->Add(*new(std::nothrow) String(__parentID)); + } + + if (pSceneManager) + { + if(pSceneManager->GoForward(ForwardSceneTransition(IDSCN_ADD_BOOKMARK),pArgList) != E_SUCCESS) + { + AppLogDebug("BookmarkListForm::OnActionPerformed GoForward failed"); + pArgList->RemoveAll(true); + delete pArgList; + return; + } + } + + if (pArgList != null) + { + pArgList->RemoveAll(true); + delete pArgList; + } + + } + break; + case IDA_BUTTON_NO: + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + break; + case IDA_BUTTON_YES: + pBookMark = dynamic_cast< BookmarkData* >(__pData->GetAt(__selectedindex)); + if ( pBookMark== null) + return; + bookmarkId=pBookMark->GetBookmarkId(); + Integer::Parse(bookmarkId,id); + if (pBookMark->GetBookmarkType() == BOOKMARK_TYPE_FOLDER) + BookmarkPresentationModel::GetInstance()->DeleteFolder(id); + else + BookmarkPresentationModel::GetInstance()->DeleteBookmark(id); + if (__pListview == null) + { + return; + } + AppLogDebug("__pListview GetBounds %d,%d,%d,%d",__pListview->GetBounds().x,__pListview->GetBounds().y,__pListview->GetBounds().width,__pListview->GetBounds().height); + __pSearchListView->UpdateList(); + __pListview->UpdateList(); + + if (__pListview->GetItemCount() == 0) + { + GetFooter()->SetItemEnabled(1,false); + __pSearchBar->SetShowState(false); + __pSearchBar->Invalidate(true); + } + + if (__noBookmarks == true) + { + Bitmap* emptyListBmp = AppResource::GetInstance()->GetBitmapN(IDB_NO_CONTENT_BOOKMARK); + GetFooter()->SetItemEnabled(1,false); + __pSearchBar->SetShowState(false); + __pSearchBar->Invalidate(true); + // __pListview->SetBounds(__pSearchBar->GetPosition().x,__pSearchBar->GetPosition().y,__pSearchBar->GetWidth() ,GetClientAreaBounds().height); + __pListview->SetBounds(__pListview->GetX(),__pSearchBar->GetPosition().y,__pSearchBar->GetWidth() ,GetClientAreaBounds().height); + __pListview->SetBitmapOfEmptyList(emptyListBmp); + if (emptyListBmp) + { + delete emptyListBmp; + emptyListBmp = null; + } + __pListview->UpdateList(); + + } + else + { + GetFooter()->SetItemEnabled(1,true); + + if (__parentID.CompareTo(L"0") == 0) + { + __pSearchBar->SetShowState(true); + __pSearchBar->Invalidate(true); + } + } + + GetFooter()->Invalidate(true); + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + __selectedindex = 0; + + break; + default: + break; + } +} + +void +BookmarkListForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source) +{ + AppLogDebug("BrowserApplicationForm::OnFormBackRequested"); + + UiApp* pApp = UiApp::GetInstance(); + if (pApp == null) + { + return; + } + + if (__parentID != DEFAULT_VALUE_PARENTID) + { + __parentID = DEFAULT_VALUE_PARENTID; + __pSearchBar->SetShowState(true); + __pListview->SetBounds(__pListview->GetX() ,__pSearchBar->GetPosition().y + __pSearchBar->GetHeight(),__pListview->GetWidth(),GetClientAreaBounds().height - (__pSearchBar->GetY() + __pSearchBar->GetHeight())); + __pListview->UpdateList(); + __pFooter = GetFooter(); + GetFooter()->SetItemEnabled(2,true); + GetFooter()->Invalidate(true); + } + else + { + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager != null) + { + if(__previousSceneId.CompareTo(IDSCN_HISTORY_LIST) != 0) + { + pSceneManager->GoBackward(BackwardSceneTransition()); + } + else + { + pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_LEFT)); + } + } + } + + if (__noBookmarks == true) + { + GetFooter()->SetItemEnabled(1,false); + } + else + { + GetFooter()->SetItemEnabled(1,true); + } +} + +Tizen::Ui::Controls::ListItemBase* +BookmarkListForm::CreateItem(int index, int itemWidth) +{ + + AppLog("BookmarkListForm::CreateItem index %d , itemWidth %d",index, itemWidth); + AppLog("listviewwidth %d",__pListview->GetWidth()); + result r = E_FAILURE; + ListAnnexStyle style = LIST_ANNEX_STYLE_NORMAL; + if(__pData == null) + { + return null; + } + CustomItem* pItem = new(std::nothrow) CustomItem(); + + BookmarkData* pBookMark = dynamic_cast< BookmarkData* >(__pData->GetAt(index)); + Bitmap* pBitmap = null; + Dimension dim; + + Image* pImage = null; + pImage = new Image(); + pImage->Construct(); + + const int x_Margin_Icon = 16; // local as there used only in this function + const int y_Margin_Icon = 28; + const int height_Icon = 72; + const int width_Icon = 72 ; + const int x_Margin_Title = 104 ; + const int y_Margin_Title = 10; + const int width_Title = GetClientAreaBounds().width - 108 - 52 - 40; + const int x_Margin_Url = 104 ; + const int y_Margin_Url = 70 ; + const int width_Url = GetClientAreaBounds().width - 108 - 52 ; + const int height_Url = 48; + const int itemHeight = 128; + const int textSize = 32; + String bitmapId; + + if( pBookMark == NULL ) + { + delete pItem; + pItem = null; + delete pImage; + pImage = null; + return NULL; + } + if ( pBookMark->GetBookmarkType() == BOOKMARK_TYPE_FOLDER ) + { + r = pItem->Construct(Tizen::Graphics::Dimension(itemWidth,112 - 44 + __fontSize), LIST_ANNEX_STYLE_DETAILED); + TryCatch(!IsFailed(r),,"BookmarkListForm::CreateItem Construct failed %s",GetErrorMessage(r)); + + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_ICON_FOLDER_OPEN); + if (pBitmap != null) + { + pItem->AddElement(Rectangle(x_Margin_Icon, 20+(__fontSize - 44)/2, width_Icon, height_Icon), IDA_FORMAT_ICON, *pBitmap, null); + delete pBitmap; + } + + pItem->AddElement(Rectangle(x_Margin_Title, 26, width_Title, 72 + (__fontSize - 44) ), IDA_FORMAT_FOLDER, pBookMark->GetBookmarkTitle(),__fontSize, CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,true); + + if ( __pItemContextFolder != NULL) + { + pItem->SetContextItem(__pItemContextFolder); + } + } + else + { + r = pItem->Construct(Tizen::Graphics::Dimension(itemWidth, itemHeight - 44 + __fontSize), style); + TryCatch( !IsFailed(r),,"BookmarkListForm::CreateItem Construct failed %s",GetErrorMessage(r)); + + AppLogDebug("BookmarkListForm::faviconid %ls",pBookMark->GetFaviconId().GetPointer()); + bitmapId = pBookMark->GetFaviconId(); + + dim = Dimension(pBookMark->GetFavIconWidth(), pBookMark->GetFavIconHeight()); + + AppLog("BookmarkListForm::CreateItem check 0"); + + // get fav icon bitmap + ByteBuffer* pFavIconBuffer = null; + pFavIconBuffer = pBookMark->GetFavIconBuffer(); + + AppLog("BookmarkListForm::CreateItem check 0"); + + if (pFavIconBuffer != null) + { + AppLog("BookmarkListForm::CreateItem pFavIconBuffer is not null"); + } + else + { + AppLog("BookmarkListForm::CreateItem pFavIconBuffer is null"); + } + + pBitmap = pImage->DecodeN(*pFavIconBuffer, IMG_FORMAT_PNG, BITMAP_PIXEL_FORMAT_ARGB8888); + + AppLog("BookmarkListForm::CreateItem check 1"); + + if (pBitmap != null) + { + AppLog("rahul bitmap is not null"); + int width = pBitmap->GetWidth(); + int height = pBitmap->GetHeight(); + AppLog("rahul bitmap width is %d", width); + AppLog("rahul bitmap height is %d", height); + AppLog("rahul favicon width is %d", pBookMark->GetFavIconWidth()); + AppLog("rahul favicon height is %d", pBookMark->GetFavIconHeight()); + } + else + { + AppLog("rahul bitmap is null"); + } + + if (pBitmap == null) + { + AppLogDebug("BookmarkListForm::CreateItem bitmap is null"); + pBitmap = FaviconManager::GetInstance()->GetDefaultFaviconN(); + } + pItem->AddElement(Rectangle(x_Margin_Icon, y_Margin_Icon +(__fontSize - 44)/2, width_Icon, height_Icon), IDA_FORMAT_ICON, *pBitmap, null); + pItem->AddElement(Rectangle(x_Margin_Title, 0, width_Title, itemHeight - height_Url - 44 + __fontSize), IDA_FORMAT_SITE, pBookMark->GetBookmarkTitle(),__fontSize,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,true); +// if(__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT) +// pItem->AddElement(Rectangle(x_Margin_Url, y_Margin_Url, width_Url, height_Url), IDA_FORMAT_URL, pBookMark->GetUrl(),textSize,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,true); +// else + pItem->AddElement(Rectangle(x_Margin_Url, y_Margin_Url - 44 + __fontSize, width_Url, height_Url), IDA_FORMAT_URL, pBookMark->GetUrl(),textSize,CUSTOM_COLOR_GREY,CUSTOM_COLOR_LISTVIEW_TEXT,CUSTOM_COLOR_LISTVIEW_TEXT,true); + + if (pBitmap != null) + { + delete pBitmap; + } + if ( __pItemContextSite != NULL) + { + pItem->SetContextItem(__pItemContextSite); + } + } + + delete pImage; + return pItem; + + CATCH: + + delete pImage; + delete pItem; + pItem = null; + return null; + +} + +bool +BookmarkListForm::DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth) +{ + delete pItem; + pItem = null; + return true; +} + +int +BookmarkListForm::GetItemCount(void) +{ + int count = 0; + + if (__pData != NULL ) + { + __pData->RemoveAll(true); + delete __pData; + __pData = null; + } + __pData = new(std::nothrow) Collection::ArrayList(); + __pData->Construct(); + + if (__searchBookmark == false) + { + BookmarkPresentationModel::GetInstance()->GetFolderBookmarkCount(__parentID, count); + BookmarkPresentationModel::GetInstance()->GetFoldersBookmarks(__parentID, 0, count, *__pData); + } + else + { + if (__searchText.GetLength() > 0) + { + __searchText.Replace(L"%", L"/%"); + __searchText.Replace(L"_", L"/_"); + } + BookmarkPresentationModel::GetInstance()->GetSearchFolderBookmarkCount(count,__searchText); + BookmarkPresentationModel::GetInstance()->GetSearchFoldersBookmarks(0, count, *__pData, __searchText); + } + + AppLogDebug("Count = %d parentId = %ls __searchText %ls", count, __parentID.GetPointer() , __searchText.GetPointer()); + + if (count <= 0) + { + __noBookmarks = true; + GetFooter()->SetItemEnabled(1,false); + } + else + { + __noBookmarks = false; + GetFooter()->SetItemEnabled(1,true); + } + + AppLogDebug("Result: %s", GetErrorMessage(GetLastResult())); + GetFooter()->Invalidate(true); + if (__pData != null && __pData->GetCount() >= 1) + { + // __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL); + __pSearchBar->SetShowState(true); + __pSearchBar->Invalidate(true); + } + else if (__searchBookmark == false) + { + __pSearchBar->SetShowState(false); + __pSearchBar->Invalidate(true); + } + + if (__parentID.CompareTo(L"0") != 0) + { + __pSearchBar->SetShowState(false); + __pSearchBar->Invalidate(true); + } + if (__noBookmarks == true) + { + __pListview->SetBounds(__pListview->GetX(),__pSearchBar->GetPosition().y,__pSearchBar->GetWidth() ,GetClientAreaBounds().height); + Bitmap* pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_NO_CONTENT_BOOKMARK); + + if ( pBitmap != NULL) + { + __pListview->SetBitmapOfEmptyList(pBitmap); + delete pBitmap; + } + } + else + { + if (__parentID.CompareTo(L"0") == 0) + { + __pListview->SetBounds(__pListview->GetX(),__pSearchBar->GetHeight(),GetClientAreaBounds().width ,GetClientAreaBounds().height - __pSearchBar->GetY() - __pSearchBar->GetHeight()); + } + else + { + __pListview->SetBounds(__pListview->GetX(),__pSearchBar->GetY(),__pSearchBar->GetWidth() ,GetClientAreaBounds().height); + + } + + } + __pListview->Invalidate(true); + return count; + +} + +void +BookmarkListForm::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus status) +{ + AppLogDebug("BookmarkListForm::OnListViewContextItemStateChanged int index %d, int elementId %d, Tizen::Ui::Controls::ListContextItemStatus status %d",index,elementId,status); + + String deleteText = CommonUtil::GetString(L"IDS_BR_SK3_DELETE"); + int timeOut = 25000; + result r = E_SUCCESS; + + switch(elementId) + { + case IDA_CONTEXT_ITEM_FOLDER_EDIT: + { + ArrayList* pArgList = null; + String* pEdit = null; + + SceneManager* pSceneManager = SceneManager::GetInstance(); + BookmarkData* pBookMark = dynamic_cast< BookmarkData* >(__pData->GetAt(index)); + if (pBookMark != null && pBookMark->GetBookmarkType() == BOOKMARK_TYPE_FOLDER) + { + pArgList = new(std::nothrow) ArrayList(); + if (pArgList != null) + { + pEdit= new(std::nothrow) String(CommonUtil::GetString(L"IDS_BR_SK_EDIT")); + pArgList->Construct(); + pArgList->Add(*new(std::nothrow) BookmarkData(*pBookMark)); + pArgList->Add(*pEdit); + if ( pSceneManager != null) + { + result r; + r = pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CREATE_BOOKMARK_FOLDER), pArgList); + } + + if (pArgList != null) + { + delete pArgList; + pArgList = null; + } + if(IsFailed(r)) + { + AppLogDebug("BookmarkListForm::OnListViewContextItemStateChanged GoForward failed %s",GetErrorMessage(r)); + return; + } + } + } + + } + break; + + case IDA_CONTEXT_ITEM_FOLDER_DELETE: + case IDA_CONTEXT_ITEM_DELETE: + { + __pConfirmationPopup = new(std::nothrow) ConfirmationPopup(); + __pConfirmationPopup->Initialize(); + __pConfirmationPopup->RemoveActionListener(*this); + __pConfirmationPopup->AddActionListener(*this); + __pConfirmationPopup->setMessage(deleteText); + __pConfirmationPopup->Show(); + __selectedindex = index; + } + break; + + case IDA_CONTEXT_ITEM_EDIT: + { + ArrayList* pArgList = null; + SceneManager* pSceneManager = SceneManager::GetInstance(); + BookmarkData* pBookMark = dynamic_cast< BookmarkData* >(__pData->GetAt(index)); + if (pBookMark!= null && pBookMark->GetBookmarkType() == BOOKMARK_TYPE_URL) + { + AppLogDebug("ID_CONTEXT_ITEM_SITE_1 BOOKMARK_TYPE_URL"); + pArgList = new(std::nothrow) ArrayList(); + if (pArgList != null) + { + pArgList->Construct(); + pArgList->Add(*new(std::nothrow) String(L"1")); + pArgList->Add(*new(std::nothrow) BookmarkData(*pBookMark)); + if ( pSceneManager != null) + { + result r; + r = pSceneManager->GoForward(ForwardSceneTransition(IDSCN_ADD_BOOKMARK), pArgList); + if (pArgList != null) + { + delete pArgList; + pArgList = null; + } + if(IsFailed(r)) + { + AppLogDebug("BookmarkListForm::OnListViewContextItemStateChanged GoForward failed %s",GetErrorMessage(r)); + return; + } + } + } + } + } + break; + case IDA_CONTEXT_ITEM_SHARE: + { + AppLogDebug("OnListViewContextItemStateChanged Share"); + if (__pPopUp != null) + { + delete __pPopUp; + __pPopUp = null; + } + __pPopUp = new(std::nothrow) SharePopup(); + __pPopUp->Initialize(); + BookmarkData* pBookmark = dynamic_cast(__pData->GetAt(index)); + if (pBookmark != null) + { + ShareInfo* pShareInfo = new(std::nothrow) ShareInfo(); + pShareInfo->SetPageTitle(pBookmark->GetBookmarkTitle()); + pShareInfo->SetPageUrl(pBookmark->GetUrl()); + pShareInfo->SetImageAttached(false); + __pPopUp->RemoveAllShareInfo(); + __pPopUp->AddShareInfo(pShareInfo); + } + + __pPopUp->SetShowState(true); + __pPopUp->Show(); + + } + break; + default: + break; + } + +} + +void +BookmarkListForm::OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback) +{ + +} + +void +BookmarkListForm::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status) +{ + AppLogDebug("BookmarkListForm::OnListViewItemStateChanged"); + + result r = E_FAILURE; + ArrayList *pArgList = null; + SceneManager* pSceneManager = SceneManager::GetInstance(); + BookmarkData* pBookmark = dynamic_cast< BookmarkData* >(__pData->GetAt(index)); + + if ( pBookmark == NULL ) + { + return; + } + + switch (pBookmark->GetBookmarkType()) + { + case BOOKMARK_TYPE_FOLDER: + + __parentID = pBookmark->GetBookmarkId(); + AppLogDebug("BOOKMARK_TYPE_FOLDER parent ID is %ls",__parentID.GetPointer()); + + listView.UpdateList(); + if (listView.GetItemCount() == 0) + { + GetFooter()->SetItemEnabled(1,false); + } + else + { + GetFooter()->SetItemEnabled(1,true); + } + GetFooter()->SetItemEnabled(2,false); + GetFooter()->Invalidate(true); + __pSearchBar->HideKeypad(); + __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL); + __pSearchBar->SetShowState(false); + __pSearchBar->Invalidate(true); + __pListview->SetBounds(__pListview->GetX(),__pSearchBar->GetY(),__pListview->GetWidth() ,GetClientAreaBounds().height); + break; + + case BOOKMARK_TYPE_URL: + + pArgList = new(std::nothrow) ArrayList(); + if (pArgList != null) + { + r = pArgList->Construct(); + TryCatch(!IsFailed(r), L"BookmarkListForm::OnListViewItemStateChanged pArgList Construct failed %s", GetErrorMessage(r)); + + AppLogDebug("bookmark url = %ls",pBookmark->GetUrl().GetPointer()); + r = pArgList->Add(*MultipleWindowPresentationModel::GetInstance()->GetActiveWindowInfo()); + pArgList->Add(*new(std::nothrow) String(pBookmark->GetUrl())); + + if (pSceneManager != null) + { + AppLogDebug("pSceneManager exists"); + String prevSceneId; + MultipleWindowPresentationModel::GetInstance()->GetCurrentSceneId(prevSceneId); + r = pSceneManager->GoBackward(BackwardSceneTransition(prevSceneId), pArgList); + TryCatch(!IsFailed(r), L"BookmarkListForm::OnListViewItemStateChanged pArgList Construct failed %s", GetErrorMessage(r)); + } + delete pArgList; + } + break; + + default: + break; + } + + return; + CATCH: + if(pArgList) + { + pArgList->RemoveAll(true); + delete pArgList; + } + +} + +void +BookmarkListForm::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction) +{ + + +} + +void +BookmarkListForm::OnFastScrollIndexSelected(Tizen::Ui::Control& source, Tizen::Base::String& index) +{ + +} + +void +BookmarkListForm::OnFocusGained(const Tizen::Ui::Control& source) +{ + __pSearchListView->SetEnabled(false); +} + +void +BookmarkListForm::OnFocusLost(const Tizen::Ui::Control& source) +{ + __pSearchListView->SetEnabled(true); + __searchBookmark = false; +} + +void +BookmarkListForm::OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar& source, Tizen::Ui::Controls::SearchBarMode mode) +{ + result r = E_FAILURE; + AppLog("ABCD::BookmarkListForm::OnSearchBarModeChanged %d",GetClientAreaBounds().height); + + if(__pSearchBar) + __pSearchListView->SetBounds(__pSearchListView->GetX(), __pSearchListView->GetY(), __pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight()); + __pSearchListView->Invalidate(false); + + if (mode == SEARCH_BAR_MODE_NORMAL) + { + __pSearchListView->SetShowState(false); + __pSearchListView->UpdateList(); + __pListview->SetShowState(true); + Invalidate(true); + __searchBookmark = false; + r = __pListview->UpdateList(); +// __pSearchListView->SetBounds(0,0,GetClientAreaBounds().width,GetClientAreaBounds().height -__pSearchBar->GetHeight()); + if(__pSearchBar) + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight())); + TryCatch( !IsFailed(r),,"BookmarkListForm::OnSearchBarModeChanged Update list failed %s",GetErrorMessage(r)); + CATCH:return; + } + else + { + __pSearchListView->SetShowState(true); + __pSearchListView->SetEnabled(false); + __pListview->SetShowState(false); + + if(__pSearchBar) + { + AppLog("heightarea %d",GetClientAreaBounds().height - __pSearchBar->GetHeight()); + r = __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight())); + __pSearchBar->SetText(L""); + } + __pListview->UpdateList(); + __pSearchListView->UpdateList(); + } +} + +void +BookmarkListForm::OnKeypadWillOpen(Tizen::Ui::Control& source) +{ + AppLog("ABCD::BookmarkListForm::OnKeypadWillOpen"); +// GetFooter()->SetShowState(false); + __pSearchListView->SetBounds(__pSearchListView->GetX(), __pSearchListView->GetY(), GetClientAreaBounds().width, GetClientAreaBounds().height - __pSearchBar->GetHeight()); + __pSearchListView->SetEnabled(false); + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight())); + Invalidate(true); +} + +void +BookmarkListForm::OnKeypadOpened(Tizen::Ui::Control& source) +{ + AppLog("ABCD::BookmarkListForm::OnKeypadOpened"); + GetFooter()->SetShowState(false); + __pSearchListView->SetBounds(__pSearchListView->GetX(), __pSearchListView->GetY(), __pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight()); + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight())); + Invalidate(true); +} + +void +BookmarkListForm::OnKeypadClosed(Tizen::Ui::Control& source) +{ + AppLog("ABCD::BookmarkListForm::OnKeypadClosed"); + AppLog("jahsjkdad %d",Clipboard::GetInstance()->IsPopupVisible()); +// if(Clipboard::GetInstance()->IsPopupVisible() == true) +// { +// return; +// } + GetFooter()->SetShowState(true); + __pSearchListView->SetBounds(__pSearchListView->GetX(), __pSearchListView->GetY(), __pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight()); + __pSearchListView->Invalidate(false); + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight())); + __pListview->SetBounds(0, __pSearchBar->GetY() + __pSearchBar->GetHeight(), GetClientAreaBounds().width, GetClientAreaBounds().height - __pSearchBar->GetHeight()); + Invalidate(true); +} + +void +BookmarkListForm::OnKeypadActionPerformed(Tizen::Ui::Control& source, Tizen::Ui::KeypadAction keypadAction) +{ + AppLog("BookmarkListForm::OnKeypadActionPerformed %d",keypadAction); + + if (__pSearchBar != null) + { + __pSearchBar->HideKeypad(); + } + if ( __pSearchBar != null && keypadAction == KEYPAD_ACTION_SEARCH) + { +// if (__pSearchBar->GetText().GetLength() == 0) +// { +// return; +// } + + if (__pSearchBar != null) + { + __pSearchBar->HideKeypad(); + } + + __searchText = __pSearchBar->GetText(); + AppLog("SearchbarGettext result %s %ls",GetErrorMessage(GetLastResult()),__searchText.GetPointer()); + __searchBookmark = true; + __pListview->SetShowState(false); + __pSearchListView->SetEnabled(true); + __pSearchListView->SetShowState(true); + __pSearchListView->SetBounds(0,0,GetClientAreaBounds().width,GetClientAreaBounds().height -__pSearchBar->GetHeight()); + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), __pSearchListView->GetHeight())); + __pSearchListView->UpdateList(); + + } + Invalidate(true); +} + +void +BookmarkListForm::OnKeypadBoundsChanged(Tizen::Ui::Control& source) +{ + AppLog("ABCD::BookmarkListForm::OnKeypadBoundsChanged"); + FloatRectangle clientRect; + clientRect = GetClientAreaBoundsF(); + AppLogDebug("ABCD::SearchBarForm::OnKeypadBoundsChanged ClientBounds(%f, %f, %f, %f)",clientRect.x, clientRect.y, clientRect.width, clientRect.height); + __pSearchBar->SetContentAreaSize(FloatDimension(clientRect.width, clientRect.height - __pSearchBar->GetHeightF())); + __pSearchListView->SetSize(FloatDimension(clientRect.width, clientRect.height - __pSearchBar->GetHeightF())); + __pListview->SetSize(FloatDimension(clientRect.width, clientRect.height - __pSearchBar->GetHeightF())); +// __pListview->SetEnabled(false); + Invalidate(true); +} + +void +BookmarkListForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs) +{ + AppLogDebug("BookmarkListForm::OnSceneActivatedN called"); + ArrayListT * pList = dynamic_cast* >(SceneManager::GetInstance()->GetSceneHistoryN()); + if(pList != null) + { + pList->GetAt(pList->GetCount()-1,__previousSceneId); + } + + __searchBookmark = false; + GetFooter()->SetShowState(true); + GetFooter()->Invalidate(true); + GetHeader()->SetItemSelected(0); + GetHeader()->Invalidate(true); + + /* if (previousSceneId != IDSCN_HISTORY_LIST && previousSceneId != IDSCN_CREATE_BOOKMARK_FOLDER && previousSceneId != IDSCN_EDIT_BOOKMARK_LIST) + { + __previousSceneId = previousSceneId; + }*/ + + if (pList) + { + delete pList; + pList = null; + } + + if (__pListview != null) + { + __pListview->UpdateList(); + } + + return; +} + +void +BookmarkListForm::OnOrientationChanged (const Tizen::Ui::Control &source, Tizen::Ui::OrientationStatus orientationStatus) +{ + AppLog("BookmarkListForm::OnOrientationChanged start"); + if (__pListview) + { + __pListview->SetBackgroundColor(GetBackgroundColor()); + } + if (__pSearchListView) + { + __pSearchListView->SetBackgroundColor(GetBackgroundColor()); + } + if (__pListview) + { + if(__pSearchBar->GetShowState()) + { + __pListview->SetBounds(__pListview->GetX(),__pSearchBar->GetHeight(),GetClientAreaBounds().width ,GetClientAreaBounds().height - __pSearchBar->GetY() - __pSearchBar->GetHeight()); + } + else + { + __pListview->SetBounds(__pListview->GetX(),0,GetClientAreaBounds().width ,GetClientAreaBounds().height); + } + + } + + if (__pSearchListView && __pListview) + { + AppLog("__pListview->GetBounds() %d, %d, %d, %d",__pListview->GetBounds().x,__pListview->GetBounds().y,__pListview->GetBounds().width,__pListview->GetBounds().height); + __pSearchListView->SetBounds(0,0,GetClientAreaBounds().width,GetClientAreaBounds().height -__pSearchBar->GetHeight()); + + __pSearchListView->UpdateList(); + } + + if (__pSearchListView && __pData != null ) + { + if (__parentID != DEFAULT_VALUE_PARENTID) + { + AppLog("BookmarkListForm::OnOrientationChanged parent id true"); + __pSearchBar->SetShowState(false); + __pSearchBar->Invalidate(true); + } + + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight())); + } + +// +// +// +// FloatRectangle clientRect; +// clientRect = GetClientAreaBoundsF(); +// +// __pSearchBar->SetContentAreaSize(FloatDimension(clientRect.width, clientRect.height - __pSearchBar->GetHeightF())); +// __pListview->SetSize(FloatDimension(clientRect.width, clientRect.height - __pSearchBar->GetHeightF())); +// __pSearchListView->SetSize(FloatDimension(clientRect.width, clientRect.height - __pSearchBar->GetHeightF())); +// Invalidate(true); +// + + Invalidate(true); +} + +void +BookmarkListForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL); + return; +} + +void +BookmarkListForm::OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs) +{ + AppLog("receiving userevent for appcontrol %d",requestId); + if (requestId == APPCONTROL_LAUNCH_MAX_LIMIT_REACHED) + { + AppLog("receiving userevent for appcontrol %d ",requestId); + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + } +} diff --git a/src/IntBookmarkPresentationModel.cpp b/src/IntBookmarkPresentationModel.cpp new file mode 100644 index 0000000..1311fbb --- /dev/null +++ b/src/IntBookmarkPresentationModel.cpp @@ -0,0 +1,1349 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntBookmarkPresentationModel.cpp + *@brief: Used to define BookmarkPresentationModel + */ + +#include + +#include "IntBookmarkData.h" +#include "IntBookmarkPresentationModel.h" +#include "IntTypes.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Utility; +using namespace Tizen::Io; +using namespace Tizen::Locales; +using namespace Tizen::System; + +extern const wchar_t* BOOKMARK_URL_TABLE; +//extern const wchar_t* BOOKMARK_FOLDER_TABLE; +extern const wchar_t* DEFAULT_VALUE_PARENTID ; + +BookmarkPresentationModel* BookmarkPresentationModel::__pBookmarkPresentationModel = null; + +BookmarkPresentationModel::BookmarkPresentationModel(void) +{ + +} + +BookmarkPresentationModel::~BookmarkPresentationModel(void) +{ + +} + +BookmarkPresentationModel::BookmarkPresentationModel(const BookmarkPresentationModel& settingModelObj) +{ + +} + +BookmarkPresentationModel& BookmarkPresentationModel::operator=(const BookmarkPresentationModel& settingModelObj) +{ + return *this; +} + +result +BookmarkPresentationModel::Construct(void) +{ + result r = E_SUCCESS; + DB_FILE_PATH = L"/opt/usr/dbspace/.internet_bookmark.db"; + + r = PresentationModelBase::Initialize(); + TryCatch( !IsFailed(r),,"Failed to intitialize bookmarkPresentation Model %s",GetErrorMessage(r)); + CATCH: return r; +} + +void +BookmarkPresentationModel::CreateInstance(void) +{ + if (__pBookmarkPresentationModel == null) + __pBookmarkPresentationModel = new(std::nothrow) BookmarkPresentationModel(); + result r = __pBookmarkPresentationModel->Construct(); + if (IsFailed(r)) + { + delete __pBookmarkPresentationModel; + __pBookmarkPresentationModel = null; + return; + } + std::atexit(DestroyInstance); +} + + +void BookmarkPresentationModel::DestroyInstance(void) +{ + if (__pBookmarkPresentationModel) + { + __pBookmarkPresentationModel->UnInitialize(); + delete __pBookmarkPresentationModel; + __pBookmarkPresentationModel = null; + } +} + + +BookmarkPresentationModel* +BookmarkPresentationModel::GetInstance(void) +{ + if(__pBookmarkPresentationModel == null) + { + CreateInstance(); + } + return __pBookmarkPresentationModel; +} + +result +BookmarkPresentationModel::SaveFolder(BookmarkData& bookmark) +{ + bookmark.SetParentId("0"); + return SaveTempBookmark(bookmark); +} + +result +BookmarkPresentationModel::SaveBookmark(BookmarkData& bookmark) +{ + result r = E_FAILURE; + String bookmarkTable(BOOKMARK_URL_TABLE); + String query; + String columnNames; + String attachment; + int resultCount = -1; + int rowId = -1; + DateTime dt; + String bookmarkId; + String bookmarkTitle = bookmark.GetBookmarkTitle(); + bookmarkTitle.Replace(L"'", L"\'"); + String bookmarkUrl = bookmark.GetUrl(); + bookmarkUrl.Replace(L"'", L"\'"); + + AppLog("BookmarkPresentationModel::SaveBookmark"); + + String pFavArray; + ByteBuffer* pFavBuffer = bookmark.GetFavIconBuffer(); + if(pFavBuffer != null) + { + AppLog("Buffer found"); + pFavBuffer->Flip(); + + wchar_t value; + + AppLog("BookmarkPresentationModel::SaveBookmark 0 "); + + while(pFavBuffer->HasRemaining()) + { + pFavBuffer->GetWchar(value); + pFavArray.Append(value); + } + } + + AppLog("BookmarkPresentationModel::SaveBookmark 1 pFavArray(%d) is %ls",pFavArray.GetLength(), pFavArray.GetPointer()); + + PresentationModelBase::GetCurrentDateTime(dt); + if (bookmark.GetBookmarkId() == "") + { + columnNames.Append(L"TYPE, "); + columnNames.Append(L"PARENT, "); + columnNames.Append(L"ADDRESS, "); + columnNames.Append(L"TITLE, "); + columnNames.Append(L"CREATIONDATE, "); + columnNames.Append(L"UPDATEDATE, "); + columnNames.Append(L"FAVICON, "); + // columnNames.Append(L"FAVICON_LENGTH, "); + columnNames.Append(L"FAVICON_W, "); + columnNames.Append(L"FAVICON_H"); + //columnNames.Append(L"FAVICON_ID" + //columnNames.Append(L"FAVICON_ID"); + + query.Append(L"INSERT INTO "); + query.Append(bookmarkTable); + query.Append("("); + query.Append(columnNames); + query.Append(") "); + query.Append("VALUES("); + query.Append(bookmark.GetBookmarkType()); + query.Append(", "); + query.Append(bookmark.GetParentId()); + query.Append(", "); + query.Append("'"); + query.Append(bookmarkUrl); + query.Append("', "); + query.Append("'"); + query.Append(bookmarkTitle); + query.Append("', "); + query.Append("'"); + query.Append(dt.ToString()); + query.Append("', "); + query.Append("'"); + query.Append(dt.ToString()); + query.Append("', "); + query.Append("'"); + query.Append(pFavArray); + query.Append("', "); + query.Append(bookmark.GetFavIconWidth()); + query.Append(", "); + query.Append(bookmark.GetFavIconHeight()); + /*query.Append("', "); + query.Append("'"); + query.Append(bookmark.GetIconPath()); + query.Append("'"); + query.Append(", "); + query.Append("'"); + query.Append(bookmark.GetFaviconId());*/ + query.Append(")"); + } + else + { + query.Append(L"UPDATE "); + query.Append(bookmarkTable); + query.Append(" SET PARENT = "); + query.Append(bookmark.GetParentId()); + query.Append(", ADDRESS = "); + query.Append("'"); + query.Append(bookmarkUrl); + query.Append("'"); + query.Append(", TITLE = "); + query.Append("'"); + query.Append(bookmarkTitle); + query.Append("'"); + query.Append(", UPDATEDATE = "); + query.Append("'"); + query.Append(dt.ToString()); + query.Append("'"); + query.Append(" WHERE ID = "); + query.Append(bookmark.GetBookmarkId()); + /*query.Append(L"UPDATE "); + query.Append(bookmarkTable); + query.Append(" SET TITLE = "); + query.Append("'"); + query.Append(bookmarkTitle); + query.Append("'"); + query.Append(", URL = "); + query.Append("'"); + query.Append(bookmarkUrl); + query.Append("'"); + query.Append(", PARENT_BOOKMARK_ID = "); + query.Append(bookmark.GetParentId()); + query.Append(", MODIFIED_TIME = "); + query.Append("'"); + query.Append(dt.ToString()); + query.Append("'"); + query.Append(", ICON_PATH = "); + query.Append("'"); + query.Append(bookmark.GetIconPath()); + query.Append("'"); + query.Append(", FAVICON_ID = "); + query.Append("'"); + query.Append(bookmark.GetFaviconId()); + query.Append("'"); + query.Append(" WHERE ID = "); + query.Append(bookmark.GetBookmarkId());*/ + } + + r = PresentationModelBase::ExecuteQuery(query, resultCount); + AppLog("BookmarkPresentationModel::SaveBookmark query is %S",query.GetPointer()); + + if (r == E_SUCCESS) + { + AppLog("BookmarkPresentationModel::SaveBookmark query is success"); + } + else + { + AppLog("BookmarkPresentationModel::SaveBookmark query is failure"); + } + + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::SaveBookmark query failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::CommitDb(); + + r = GetLastInsertedId(bookmarkTable, rowId); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::SaveBookmark GetLastInsertedId failed %s",GetErrorMessage(r)); + + if (rowId < 0) + return E_FAILURE; + + bookmarkId.Append(rowId); + + //Set the generated ID to Bookmark + bookmark.SetBookmarkId(bookmarkId); + + CATCH: return r; +} + +result +BookmarkPresentationModel::SaveTempBookmark(BookmarkData& bookmark) +{ + result r = E_FAILURE; + String bookmarkTable(BOOKMARK_URL_TABLE); + String query; + String columnNames; + String attachment; + int resultCount = -1; + int rowId = -1; + DateTime dt; + String bookmarkId; + String bookmarkTitle = bookmark.GetBookmarkTitle(); + bookmarkTitle.Replace(L"'", L"''"); + String bookmarkUrl = bookmark.GetUrl(); + bookmarkUrl.Replace(L"'", L"''"); + + PresentationModelBase::GetCurrentDateTime(dt); + + if (bookmark.GetBookmarkId() == "") + { + columnNames.Append(L"TYPE, "); + columnNames.Append(L"PARENT, "); + columnNames.Append(L"ADDRESS, "); + columnNames.Append(L"TITLE, "); + columnNames.Append(L"CREATIONDATE, "); + columnNames.Append(L"UPDATEDATE, "); + + columnNames.Append(L"FAVICON, "); + columnNames.Append(L"FAVICON_W, "); + columnNames.Append(L"FAVICON_H"); + + query.Append(L"INSERT INTO "); + query.Append(bookmarkTable); + query.Append("("); + query.Append(columnNames); + query.Append(") "); + query.Append("VALUES"); + query.Append(" (?,?,?,?,?,?,?,?,?)"); + r = PresentationModelBase::ExecuteBookmarkQuery(query, resultCount, bookmark); + } + else + { + query.Append(L"UPDATE "); + query.Append(bookmarkTable); + query.Append(" SET PARENT = "); + query.Append(bookmark.GetParentId()); + query.Append(", ADDRESS = "); + query.Append("'"); + query.Append(bookmarkUrl); + query.Append("'"); + query.Append(", TITLE = "); + query.Append("'"); + query.Append(bookmarkTitle); + query.Append("'"); + query.Append(", UPDATEDATE = "); + query.Append("'"); + query.Append(dt.ToString()); + query.Append("'"); + query.Append(" WHERE ID = "); + query.Append(bookmark.GetBookmarkId()); + r = PresentationModelBase::ExecuteQuery(query, resultCount); + } + + + AppLog("BookmarkPresentationModel::SaveBookmark query is %S",query.GetPointer()); + + if (r == E_SUCCESS) + { + AppLog("BookmarkPresentationModel::SaveBookmark query is success"); + } + else + { + AppLog("BookmarkPresentationModel::SaveBookmark query is failure"); + } + + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::SaveBookmark query failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::CommitDb(); + + r = GetLastInsertedId(bookmarkTable, rowId); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::SaveBookmark GetLastInsertedId failed %s",GetErrorMessage(r)); + + if (rowId < 0) + return E_FAILURE; + + bookmarkId.Append(rowId); + + //Set the generated ID to Bookmark + bookmark.SetBookmarkId(bookmarkId); + + CATCH: return r; + +} + +result +BookmarkPresentationModel::DeleteFolder(int folderId) +{ + result r = E_SUCCESS; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + int resultCount = -1; + + if (folderId < 1) + { + return E_INVALID_ARG; + } + + //strQuery.Format(MAX_DB_QUERY_SIZE, L"DELETE FROM %ls WHERE ID = %d", strBookmarkTable.GetPointer(), bookmarkId); + query.Append(L"DELETE FROM "); + query.Append(bookmarkTable); + query.Append(" WHERE ID = "); + query.Append(folderId); + + r = BookmarkPresentationModel::ExecuteQuery(query, resultCount); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::DeleteBookmark query failed %s",GetErrorMessage(r)); + r = BookmarkPresentationModel::CommitDb(); + DeleteBookmarkByFolderId(folderId); + + CATCH: return r; +} + +result +BookmarkPresentationModel::DeleteBookmark(int bookmarkId) +{ + result r = E_SUCCESS; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + int resultCount = -1; + + if (bookmarkId < 1) + { + return E_INVALID_ARG; + } + + //strQuery.Format(MAX_DB_QUERY_SIZE, L"DELETE FROM %ls WHERE ID = %d", strBookmarkTable.GetPointer(), bookmarkId); + query.Append(L"DELETE FROM "); + query.Append(bookmarkTable); + query.Append(" WHERE ID = "); + query.Append(bookmarkId); + + r = BookmarkPresentationModel::ExecuteQuery(query, resultCount); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::DeleteBookmark query failed %s",GetErrorMessage(r)); + r = BookmarkPresentationModel::CommitDb(); + + CATCH: return r; +} + +result +BookmarkPresentationModel::DeleteBookmarkByFolderId(int folderId) +{ + result r = E_SUCCESS; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + int resultCount = -1; + + if (folderId < 1) + { + return E_INVALID_ARG; + } + + //strQuery.Format(MAX_DB_QUERY_SIZE, L"DELETE FROM %ls WHERE ID = %d", strBookmarkTable.GetPointer(), bookmarkId); + query.Append(L"DELETE FROM "); + query.Append(bookmarkTable); + query.Append(" WHERE PARENT = "); + query.Append(folderId); + + r = BookmarkPresentationModel::ExecuteQuery(query, resultCount); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::DeleteBookmark query failed %s",GetErrorMessage(r)); + r = BookmarkPresentationModel::CommitDb(); + + CATCH: return r; +} + + +result +BookmarkPresentationModel::GetFolderBookmarkCount(const String& parentID, int& Count) +{ + result r = E_SUCCESS; + int bookmarkCount = 0; + int folderCount = 0; + r = GetBookmarkCount(parentID,bookmarkCount); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetBookmarkCount query failed %s",GetErrorMessage(r)); + + r = GetFolderCount(parentID,folderCount); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetBookmarkCount query failed %s",GetErrorMessage(r)); + Count = folderCount+ bookmarkCount; + return E_SUCCESS; + CATCH: + return r; +} + +result +BookmarkPresentationModel::GetBookmarkCount(const String& parentID, int& bookmarkCount) +{ + int count = -1; + int intVal = -1; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + result r = E_FAILURE; + bool nextRowPresent = false; + + //query.Format(MAX_DB_QUERY_SIZE, L"SELECT COUNT(ID) FROM %ls WHERE PARENT_ID = %ls", strTable.GetPointer(),notebookId.GetPointer()); + query.Append(L"SELECT COUNT(ID) FROM "); + query.Append(bookmarkTable); + query.Append(" WHERE PARENT = "); + query.Append(parentID); + query.Append(" AND ADDRESS != ''"); + + + r = PresentationModelBase::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetBookmarkCount query failed %s",GetErrorMessage(r)); + r = PresentationModelBase::DbIsNextRowPresent(nextRowPresent); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::DbIsNextRowPresent query failed %s",GetErrorMessage(r)); + if (nextRowPresent == true) + { + r = PresentationModelBase::GetColumn(0, intVal); + if (IsFailed(r)) + { + AppLogDebug("Error:BookmarkPresentationModel::GetColumn:%s", GetErrorMessage(r)); + return r; + } + } + bookmarkCount = intVal; + AppLog("Count:%d", bookmarkCount); + + CATCH: return r; +} + +result +BookmarkPresentationModel::GetFolderCount(const String& parentID, int& folderCount) +{ + + int count = -1; + int intVal = -1; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + result r = E_FAILURE; + bool nextRowPresent = false; + + //query.Format(MAX_DB_QUERY_SIZE, L"SELECT COUNT(ID) FROM %ls WHERE PARENT_ID = %ls", strTable.GetPointer(),notebookId.GetPointer()); + query.Append(L"SELECT COUNT(ID) FROM "); + query.Append(bookmarkTable); + query.Append(" WHERE PARENT = "); + query.Append(parentID); + query.Append(" AND ADDRESS = ''"); + + r = PresentationModelBase::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetBookmarkCount query failed %s",GetErrorMessage(r)); + r = PresentationModelBase::DbIsNextRowPresent(nextRowPresent); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::DbIsNextRowPresent query failed %s",GetErrorMessage(r)); + if (nextRowPresent == true) + { + r = PresentationModelBase::GetColumn(0, intVal); + if (IsFailed(r)) + { + AppLogDebug("Error:BookmarkPresentationModel::GetColumn:%s", GetErrorMessage(r)); + return r; + } + } + folderCount = intVal; + AppLog("Count:%d", folderCount); + + CATCH: return r; + + + /* + int count = -1; + int intVal = -1; + String query; + String bookmarkFolderTable(BOOKMARK_FOLDER_TABLE); + result r = E_FAILURE; + bool nextRowPresent = false; + + if (parentID.CompareTo(DEFAULT_VALUE_PARENTID) != 0) + { + folderCount = 0; + return E_SUCCESS; + } + query.Append(L"SELECT COUNT(ID) FROM "); + query.Append(bookmarkFolderTable); + + r = PresentationModelBase::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetFolderCount query failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::DbIsNextRowPresent(nextRowPresent); + + if (nextRowPresent == true) + { + r = PresentationModelBase::GetColumn(0, intVal); + } + folderCount = intVal; + + CATCH: return r; +*/} + +result +BookmarkPresentationModel::GetFoldersBookmarks(const String& parentID, int startIndex, int limit, ArrayList& pBookmarkList) +{ + ArrayList arrayList; + arrayList.Construct(); + GetFolder(parentID,startIndex,limit,arrayList); + for(int index = arrayList.GetCount()-1; index >= 0; index--) + { + pBookmarkList.Add(*arrayList.GetAt(index)); + } + arrayList.RemoveAll(false); + GetBookmark(parentID,startIndex,limit,arrayList); + for(int index = arrayList.GetCount()-1; index >= 0; index--) + { + pBookmarkList.Add(*arrayList.GetAt(index)); + } + return E_SUCCESS; +} + +result +BookmarkPresentationModel::GetBookmark(const String& parentID, int startIndex, int limit, ArrayList& pBookmarkList) +{ + int count = -1; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + result r = E_FAILURE; + + query.Append(L"SELECT * FROM "); + query.Append(bookmarkTable); + query.Append(" WHERE PARENT = "); + query.Append(parentID); + query.Append(" AND ADDRESS != ''"); + + //Append LIMIT + if (limit > 0) + { + query.Append(" LIMIT "); + query.Append(limit); + + //Append OFFESET + if (startIndex >= 0) + { + query.Append(" OFFSET "); + query.Append(startIndex); + } + } + r = PresentationModelBase::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetBookmark query failed %s",GetErrorMessage(r)); + + r = CreateBookmarkList(count, pBookmarkList); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::CreateBookmarkList failed %s",GetErrorMessage(r)); + + CATCH: return r; +} + +result BookmarkPresentationModel::GetBookmarkForHistory(int startIndex, Tizen::Base::Collection::ArrayList& pBookmarkList) +{ + int count = -1; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + result r = E_FAILURE; + + query.Append(L"SELECT * FROM "); + query.Append(bookmarkTable); + query.Append(" WHERE ADDRESS != ''"); + + r = PresentationModelBase::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetBookmark query failed %s",GetErrorMessage(r)); + + r = CreateBookmarkList(count, pBookmarkList); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::CreateBookmarkList failed %s",GetErrorMessage(r)); + + CATCH: return r; +} + +result +BookmarkPresentationModel::GetFolder(const String& parentID, int startIndex, int limit, ArrayList& folderList) +{ + int count = -1; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + result r = E_FAILURE; + + if (parentID.CompareTo(DEFAULT_VALUE_PARENTID ) != 0) + { + return E_SUCCESS; + } + query.Append(L"SELECT * FROM "); + query.Append(bookmarkTable); + query.Append(" WHERE ADDRESS = ''"); + + //Append LIMIT + if (limit > 0) + { + query.Append(" LIMIT "); + query.Append(limit); + + //Append OFFESET + if (startIndex >= 0) + { + query.Append(" OFFSET "); + query.Append(startIndex); + } + } + + r = PresentationModelBase::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetFolder query failed %s",GetErrorMessage(r)); + + r = CreateFolderList(count, folderList); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::CreateBookmarkList failed %s",GetErrorMessage(r)); + + CATCH: return r; +} + +result +BookmarkPresentationModel::GetSearchFolderBookmarkCount(int& searchBookmarkCount, String& text) +{ + int searchUrlCount = 0; + int searchFolderCount = 0; + GetSearchBookmarkCount(searchUrlCount,text); + GetSearchFolderCount(searchFolderCount,text); + searchBookmarkCount = searchUrlCount + searchFolderCount; + return E_SUCCESS; +} + +result +BookmarkPresentationModel::GetSearchBookmarkCount(int& searchBookmarkCount, String& text) +{ + + int count = -1; + int intVal = -1; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + result r = E_FAILURE; + bool nextRowPresent = false; + text.Replace(L"'", L"\'"); + + query.Append(L"SELECT COUNT(ID) FROM "); + query.Append(bookmarkTable); + query.Append(L" WHERE (TITLE LIKE '%"); + query.Append(text); + query.Append("%'"); + query.Append(" OR "); + query.Append(L"ADDRESS LIKE '%"); + query.Append(text); + query.Append("%'"); + query.Append(" ESCAPE '/')"); + query.Append(" AND ADDRESS != ''"); + + r = BookmarkPresentationModel::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetSearchBookmarkCount query failed %s",GetErrorMessage(r)); + + r = BookmarkPresentationModel::DbIsNextRowPresent(nextRowPresent); + + if (nextRowPresent == true) + { + r = BookmarkPresentationModel::GetColumn(0, intVal); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetColumn failed %s",GetErrorMessage(r)); + } + searchBookmarkCount = intVal; + + CATCH: +// text.Replace(L"''", L"'"); + return r; + +} + + +result +BookmarkPresentationModel::GetSearchFolderCount(int& searchFolderCount, String& text) +{ + + int count = -1; + int intVal = -1; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + result r = E_FAILURE; + bool nextRowPresent = false; + text.Replace(L"'", L"\'"); + + query.Append(L"SELECT COUNT(ID) FROM "); + query.Append(bookmarkTable); + query.Append(L" WHERE TITLE LIKE '%"); + query.Append(text); + query.Append("%'"); + query.Append(" ESCAPE '/'"); + query.Append(" AND ADDRESS = ''"); + + r = BookmarkPresentationModel::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetSearchBookmarkCount query failed %s",GetErrorMessage(r)); + + r = BookmarkPresentationModel::DbIsNextRowPresent(nextRowPresent); + + if (nextRowPresent == true) + { + r = BookmarkPresentationModel::GetColumn(0, intVal); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetColumn failed %s",GetErrorMessage(r)); + } + searchFolderCount = intVal; + + CATCH: +// text.Replace(L"''", L"'"); + return r; +} + + +result +BookmarkPresentationModel::GetSearchFoldersBookmarks(int startIndex, int limit, ArrayList& pFolderList, String& text) +{ + ArrayList arrayList; + arrayList.Construct(); + GetSearchFolder(startIndex, limit, arrayList,text); + for(int index = arrayList.GetCount()-1; index >= 0; index--) + { + pFolderList.Add(*arrayList.GetAt(index)); + } + arrayList.RemoveAll(false); + GetSearchBookmark(startIndex, limit, arrayList,text); + for(int index = arrayList.GetCount()-1; index >= 0; index--) + { + pFolderList.Add(*arrayList.GetAt(index)); + } + return E_SUCCESS; +} + +result +BookmarkPresentationModel::GetSearchBookmark(int startIndex, int limit, ArrayList& pBookmarkList, String& text) +{ + int count = -1; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + result r = E_FAILURE; + + text.Replace(L"'", L"\'"); + query.Append(L"SELECT * FROM "); + query.Append(bookmarkTable); + query.Append(L" WHERE ((TITLE LIKE '%"); + query.Append(text); + query.Append("%' ESCAPE '/')"); + query.Append(" OR "); + query.Append(L"(ADDRESS LIKE '%"); + query.Append(text); + query.Append("%' ESCAPE '/') )"); + query.Append(" AND (ADDRESS != '')"); + //Append LIMIT + if (limit > 0) + { + query.Append(" LIMIT "); + query.Append(limit); + + //Append OFFESET + if (startIndex >= 0) + { + query.Append(" OFFSET "); + query.Append(startIndex); + } + } + AppLog("Query is %ls", query.GetPointer()); + r = BookmarkPresentationModel::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetSearchBookmark query failed %s",GetErrorMessage(r)); + + r = CreateBookmarkList(count, pBookmarkList); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::CreateBookmarkList failed %s",GetErrorMessage(r)); + + CATCH: +// text.Replace(L"''", L"'"); + return r; +} + +result +BookmarkPresentationModel::GetSearchFolder(int startIndex, int limit, ArrayList& pFolderList, String& text) +{ + int count = -1; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + result r = E_FAILURE; + text.Replace(L"'", L"\'"); + + query.Append(L"SELECT * FROM "); + query.Append(bookmarkTable); + query.Append(L" WHERE TITLE LIKE '%"); + query.Append(text); + //query.Append("%')"); + query.Append("%'"); + query.Append(" ESCAPE '/'"); + query.Append(" AND ADDRESS = ''"); + + //Append LIMIT + if (limit > 0) + { + query.Append(" LIMIT "); + query.Append(limit); + + //Append OFFESET + if (startIndex >= 0) + { + query.Append(" OFFSET "); + query.Append(startIndex); + } + } + + r = BookmarkPresentationModel::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetSearchBookmark query failed %s",GetErrorMessage(r)); + + r = CreateFolderList(count, pFolderList); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::CreateBookmarkList failed %s",GetErrorMessage(r)); + + CATCH: +// text.Replace(L"''", L"'"); + return r; +} + +result +BookmarkPresentationModel::CreateFolderList(int bookmarkCount, ArrayList& folderList) +{ + BookmarkData* pBookmark = null; + int intVal = -1; + String value; + DateTime dateValue; + result r = E_FAILURE; + String bookmarkId; + String parentId; + String faviconId; + DateTime createdTime; + DateTime modifiedTime; + String iconPath; + bool nextRowPresent = false; + + if (bookmarkCount < 1) + { + return E_SUCCESS; + } + for (int l_bookmarkCount = 0; l_bookmarkCount < bookmarkCount; l_bookmarkCount++) + { + r = PresentationModelBase::DbIsNextRowPresent(nextRowPresent); + if (IsFailed(r)) + return r; + if (nextRowPresent == true) + { + pBookmark = new(std::nothrow) BookmarkData; + + if (pBookmark) + { + for (int columnCount = 0; columnCount < MAX_NOTE_TABLE_COLUMN; columnCount++) + { + + switch (columnCount) + { + case BOOKMARK_ID: + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal > 0) + { + bookmarkId.Clear(); + bookmarkId.Append(intVal); + if (bookmarkId.GetLength() > 0) + pBookmark->SetBookmarkId(bookmarkId); + } + + } + break; + case BOOKMARK_PARENT: + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal > 0) + { + parentId.Clear(); + parentId.Append(intVal); + if (parentId.GetLength() > 0) + pBookmark->SetParentId(parentId); + } + } + break; + case BOOKMARK_ADDRESS: + r = PresentationModelBase::GetColumn(columnCount, value); + if (!IsFailed(r)) + { + pBookmark->SetUrl(value); + } + break; + case BOOKMARK_TITLE: + r = PresentationModelBase::GetColumn(columnCount, value); + if (!IsFailed(r)) + { + pBookmark->SetBookmarkTitle(value); + } + break; + case BOOKMARK_CREATIONDATE: + r = PresentationModelBase::GetColumn(columnCount, dateValue); + if (!IsFailed(r)) + { + createdTime = dateValue; + pBookmark->SetCreatedTime(createdTime); + } + break; + + case BOOKMARK_UPDATEDATA: + r = PresentationModelBase::GetColumn(columnCount, dateValue); + if (!IsFailed(r)) + { + modifiedTime = dateValue; + pBookmark->SetModifiedTime(modifiedTime); + } + break; + + /*case 6: + r = PresentationModelBase::GetColumn(columnCount, value); + if (!IsFailed(r)) + { + iconPath = value; + pBookmark->SetIconPath(iconPath); + } + break; + case 7: + + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal >= 0) + { + faviconId.Clear(); + faviconId.Append(intVal); + if (faviconId.GetLength() > 0) + { + pBookmark->SetFaviconId(faviconId); + } + } + } + break;*/ + + default: + break; + } + + } + + r = folderList.Add(*pBookmark); + if (IsFailed(r)) + { + delete pBookmark; + return r; + } + } + } + } + return r; +} + +result +BookmarkPresentationModel::CreateBookmarkList(int bookmarkCount, ArrayList& bookmarkList) +{ + AppLog("BookmarkPresentationModel::CreateBookmarkList start"); + BookmarkData* pBookmark = null; + int intVal = -1; + String value; + DateTime dateValue; + result r = E_FAILURE; + String bookmarkId; + String parentId; + String faviconId; + DateTime createdTime; + DateTime modifiedTime; + ByteBuffer *pFavIconBuffer = null; + + String iconPath; + bool nextRowPresent = false; + + if (bookmarkCount < 1) + { + return E_SUCCESS; + } + + for (int l_bookmarkCount = 0; l_bookmarkCount < bookmarkCount; l_bookmarkCount++) + { + r = PresentationModelBase::DbIsNextRowPresent(nextRowPresent); + if (IsFailed(r)) + return r; + if (nextRowPresent == true) + { + pBookmark = new(std::nothrow) BookmarkData; + if (pBookmark) + { + for (int columnCount = 0; columnCount < MAX_NOTE_TABLE_COLUMN; columnCount++) + { + + switch (columnCount) + { + case BOOKMARK_ID: + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal > 0) + { + bookmarkId.Clear(); + bookmarkId.Append(intVal); + if (bookmarkId.GetLength() > 0) + pBookmark->SetBookmarkId(bookmarkId); + } + + } + break; + case BOOKMARK_PARENT: + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal > 0) + { + parentId.Clear(); + parentId.Append(intVal); + if (parentId.GetLength() > 0) + pBookmark->SetParentId(parentId); + } + } + break; + case BOOKMARK_ADDRESS: + r = PresentationModelBase::GetColumn(columnCount, value); + if (!IsFailed(r)) + { + pBookmark->SetUrl(value); + } + break; + case BOOKMARK_TITLE: + r = PresentationModelBase::GetColumn(columnCount, value); + if (!IsFailed(r)) + { + pBookmark->SetBookmarkTitle(value); + } + break; + case BOOKMARK_CREATIONDATE: + r = PresentationModelBase::GetColumn(columnCount, dateValue); + if (!IsFailed(r)) + { + createdTime = dateValue; + pBookmark->SetCreatedTime(createdTime); + } + break; + case BOOKMARK_SEQUENCE: + { + + } + break; + case BOOKMARK_UPDATEDATA: + r = PresentationModelBase::GetColumn(columnCount, dateValue); + if (!IsFailed(r)) + { + modifiedTime = dateValue; + pBookmark->SetModifiedTime(modifiedTime); + } + break; + case BOOKMARK_VISITDATE: + { + + } + break; + case BOOKMARK_EDITABLE: + { + + } + break; + case BOOKMARK_ACCESSACCOUNT: + { + + } + break; + case BOOKMARK_FAVICON: + { + AppLog("BookmarkPresentationModel::CreateBookmarkList BOOKMARK_FAVICON 0"); + pFavIconBuffer = new ByteBuffer(); + r = PresentationModelBase::GetColumn(columnCount, *pFavIconBuffer); + AppLog("BookmarkPresentationModel::CreateBookmarkList BOOKMARK_FAVICON 1"); + if (pFavIconBuffer->GetCapacity() > 0) + { + AppLog("BookmarkPresentationModel::CreateBookmarkList favIconBuffer not null"); + } + else + { + AppLog("BookmarkPresentationModel::CreateBookmarkList favIconBuffer is null"); + } + + if (!IsFailed(r)) + { + iconPath = value; + pBookmark->SetFavIconBuffer(*pFavIconBuffer); + } + } + break; + case BOOKMARK_FAVICON_LENGTH: + { + + } + break; + case BOOKMARK_FAVICON_W: + { + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal > 0) + { + pBookmark->SetFavIconWidth(intVal); + } + } + } + break; + case BOOKMARK_FAVICON_H: + { + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal > 0) + { + pBookmark->SetFavIconHeight(intVal); + } + } + } + break; + /* + *case 6: + r = PresentationModelBase::GetColumn(columnCount, value); + if (!IsFailed(r)) + { + iconPath = value; + pBookmark->SetIconPath(iconPath); + } + break; + case 7: + + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal >= 0) + { + faviconId.Clear(); + faviconId.Append(intVal); + if (faviconId.GetLength() > 0) + { + pBookmark->SetFaviconId(faviconId); + } + } + } + break;*/ + + default: + break; + } + + } + + r = bookmarkList.Add(*pBookmark); + if (IsFailed(r)) + { + delete pBookmark; + return r; + } + } + } + } + AppLog("BookmarkPresentationModel::CreateBookmarkList end"); + return r; +} + +result +BookmarkPresentationModel::DoesBookmarkExist(const Tizen::Base::String& Url, bool &exist, const String& parentId, bool checkParentId) +{ + int bookmarkCount = -1; + int intVal = -1; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + result r = E_FAILURE; + bool nextRowPresent = false; + int count = 0; + String tempURL = Url; + tempURL.Replace(L"'", L"''"); + + query.Append(L"SELECT COUNT(ID) FROM "); + query.Append(bookmarkTable); + query.Append(" WHERE ADDRESS = '"); + query.Append(tempURL); + if(tempURL.EndsWith(L"/")) + { + query.Append("' OR ADDRESS = '"); + String newUrl = L""; + tempURL.SubString(0,tempURL.GetLength()-1 ,newUrl); + query.Append(newUrl); + } + else + { + query.Append("' OR ADDRESS = '"); + String newUrl = tempURL; +// Url.SubString(0,Url.GetLength()-1 ,newUrl); + newUrl.Append(L"/"); + query.Append(newUrl); + } + + if(checkParentId == true) + { + query.Append(L"' AND PARENT = '"); + query.Append(parentId); + } + query.Append("'"); + + AppLog("BookmarkPresentationModel::DoesBookmarkExist query is %S",query.GetPointer()); + + r = PresentationModelBase::ExecuteQuery(query, bookmarkCount); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::DoesBookmarkExist query failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::DbIsNextRowPresent(nextRowPresent); + + if (nextRowPresent == true) + { + r = PresentationModelBase::GetColumn(0, intVal); + } + count = intVal; + + if (count == 0) + { + exist = false; + } + else + { + exist = true ; + } + tempURL.Replace(L"''",L"'"); + CATCH: return r; +} + +result +BookmarkPresentationModel::DeleteBookmark(const Tizen::Base::String& url) +{ + result r = E_SUCCESS; + String query; + String bookmarkTable(BOOKMARK_URL_TABLE); + int resultCount = -1; + + query.Append(L"DELETE FROM "); + query.Append(bookmarkTable); + query.Append(" WHERE ADDRESS = '"); + query.Append(url); + + if(url.EndsWith(L"/")) + { + query.Append("' OR ADDRESS = '"); + String newUrl = L""; + url.SubString(0,url.GetLength()-1 ,newUrl); + query.Append(newUrl); + } + else + { + query.Append("' OR ADDRESS = '"); + String newUrl = url; +// Url.SubString(0,Url.GetLength()-1 ,newUrl); + newUrl.Append(L"/"); + query.Append(newUrl); + + } + + query.Append(L"'"); + + r = BookmarkPresentationModel::ExecuteQuery(query, resultCount); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::DeleteBookmark query failed %s",GetErrorMessage(r)); + + r = BookmarkPresentationModel::CommitDb(); + + CATCH: return r; +} diff --git a/src/IntBrightnessForm.cpp b/src/IntBrightnessForm.cpp new file mode 100644 index 0000000..abe327f --- /dev/null +++ b/src/IntBrightnessForm.cpp @@ -0,0 +1,360 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet IntBrightness class +/*@file: IntBrightness.cpp + *@brief: This class defines IntBrightness used to change the brightness + * + */ + +#include +#include +#include +#include "IntBrightnessForm.h" +#include "IntCommonLib.h" +#include "IntMultipleWindowPresentationModel.h" +#include "IntSceneRegister.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Graphics; +using namespace Tizen::System; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + +const int IDA_AUTOBTN_CLICKED = 101; +const int IDA_MANUALBTN_CLICKED = 102; + +BrightnessForm::BrightnessForm(void) +{ + __manualBrightness = true; + __pBrightnessSlider = null; + __pLabel = null; +} + +BrightnessForm::~BrightnessForm(void) +{ + +} + +bool +BrightnessForm::Initialize() +{ + Form::Construct(L"IDL_BRIGHTNESS"); + + return true; +} + +result +BrightnessForm::OnInitializing(void) +{ + result r = E_FAILURE; + WindowInfo* pWindowInfo = null; + + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager != null) + { + r = pSceneManager->AddSceneEventListener(IDSCN_BRIGHTNESS, *this); + if (IsFailed(r)) + { + AppLogException("OnInitialized failed with %s", GetErrorMessage(r)); + return r; + } + } + AddOrientationEventListener(*this); + SetFormBackEventListener(this); + + __pLabel = static_cast< Label* >(GetControl(L"IDC_LABEL", true)); + + pWindowInfo = MultipleWindowPresentationModel::GetInstance()->GetActiveWindowInfo(); + if (pWindowInfo != null && pWindowInfo->pWebCanvasBitmap != null && __pLabel != null) + { + int labelWidth = __pLabel->GetWidth(); + int labelHeigth = __pLabel->GetHeight(); + + if(GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE) + { + labelWidth = pWindowInfo->pWebCanvasBitmap->GetWidth() * labelHeigth / pWindowInfo->pWebCanvasBitmap->GetHeight(); + __pLabel->SetBounds(__pLabel->GetX() + (__pLabel->GetWidth() - labelWidth)/2, __pLabel->GetY(), labelWidth, labelHeigth); + } + else + { + labelHeigth = pWindowInfo->pWebCanvasBitmap->GetHeight() * labelWidth / pWindowInfo->pWebCanvasBitmap->GetWidth(); + __pLabel->SetBounds(__pLabel->GetX(), __pLabel->GetY() + (__pLabel->GetHeight() - labelHeigth)/2, labelWidth, labelHeigth); + } + __pLabel->SetBackgroundBitmap(*pWindowInfo->pWebCanvasBitmap); + } + + AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry(); + String sliderKey("SliderValue"); + String tabKey("TabButton"); + int sliderValue = 10; + int tabValue = 1; + + r = pAppRegistry->Get(sliderKey, sliderValue); + if (r == E_KEY_NOT_FOUND) + { + pAppRegistry->Add(sliderKey, sliderValue); + pAppRegistry->Set(sliderKey,sliderValue); + } + + r = pAppRegistry->Get(tabKey, tabValue); + if (r == E_KEY_NOT_FOUND) + { + pAppRegistry->Add(tabKey, tabValue); + pAppRegistry->Set(tabKey,tabValue); + } + r = pAppRegistry->Save(); + if (IsFailed(r)) + { + // Failed to save data to registry + AppLogDebug("OnInitialized failed to save data to registry with %s", GetErrorMessage(r)); + return E_FAILURE; + } + + + __pBrightnessSlider = static_cast< Slider* >(GetControl(L"IDC_FONT_SLIDER", true)); + if (__pBrightnessSlider == null) + { + return E_FAILURE; + } + __pBrightnessSlider->SetRange(1,10); + __pBrightnessSlider->SetValue(sliderValue); + __pBrightnessSlider->AddSliderEventListener(*this); + __pBrightnessSlider->AddAdjustmentEventListener(*this); + + GetFooter()->AddActionEventListener(*this); + return r; +} + +void +BrightnessForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs) +{ + result r = E_FAILURE; + AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry(); + String sliderKey("SliderValue"); + String tabKey("TabButton"); + int sliderValue = 10; + int tabValue = 0; + + r = pAppRegistry->Get(sliderKey, sliderValue); + r = pAppRegistry->Get(tabKey, tabValue); + + AppLog("BrightnessForm tab value is %d",tabValue); + AppLog("BrightnessForm slider value is %d",sliderValue); + + if(__pBrightnessSlider == null) + { + return; + } + + if(tabValue == 0) + { + __pBrightnessSlider->SetEnabled(false); + __pBrightnessSlider->Invalidate(true); + } + else + { + __pBrightnessSlider->SetEnabled(true); + AppLog("BatteryLvl %d",PowerManager::GetScreenBrightness()); + __pBrightnessSlider->SetValue(sliderValue); + __pBrightnessSlider->Invalidate(true); + } + + GetFooter()->SetItemSelected(tabValue); + + __pBrightnessSlider->SetRange(1,10); +// __pBrightnessSlider->SetValue(sliderValue); + + + AppLog("slider value is %d",PowerManager::GetScreenBrightness()); + + Invalidate(true); + +} + +void +BrightnessForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + AppLog("slider value is %d",PowerManager::GetScreenBrightness()); + __pBrightnessSlider->SetValue(PowerManager::GetScreenBrightness()); + Invalidate(true); +} + +void +BrightnessForm::OnSliderBarMoved(Slider& source, int value) +{ + AppLog("coming to OnSliderBarMoved"); + if (__manualBrightness == true) + { + PowerManager::SetScreenBrightness(value); + AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry(); + String sliderKey("SliderValue"); + if (pAppRegistry) + { + pAppRegistry->Set(sliderKey,value); + } + } +} +void +BrightnessForm::OnAdjustmentValueChanged(const Tizen::Ui::Control& source, int adjustment) +{ + if(source.Equals(*__pBrightnessSlider) == true) + { + AppLog("coming to OnSliderBarMoved"); + if (__manualBrightness == true) + { + PowerManager::SetScreenBrightness(adjustment); + AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry(); + String sliderKey("SliderValue"); + if (pAppRegistry) + { + pAppRegistry->Set(sliderKey,adjustment); + } + } + } +} + +void +BrightnessForm::OnFormBackRequested(Form& source) +{ + + result r = E_FAILURE; + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager != null) + { + // save the slider value + // save the tab button + AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry(); + String sliderKey("SliderValue"); + String tabKey("TabButton"); + int sliderValue = __pBrightnessSlider->GetValue(); + r = pAppRegistry->Set(sliderKey,sliderValue); + FooterItemStatus footerStatus; + GetFooter()->GetItemStatus(0,footerStatus); + if (footerStatus == FOOTER_ITEM_STATUS_SELECTED || footerStatus == FOOTER_ITEM_STATUS_HIGHLIGHTED) + { + r = pAppRegistry->Set(tabKey,0); + } + else + { + r = pAppRegistry->Set(tabKey,1); + } + pAppRegistry->Save(); + r = pSceneManager->GoBackward(BackwardSceneTransition()); + if(IsFailed(r)) + { + AppLogException("OnFormBackRequested failed with %s", GetErrorMessage(r)); + } + } + +} + +void +BrightnessForm::OnActionPerformed(const Control& source, int actionId) +{ + result r = E_SUCCESS; + switch (actionId) + { + case IDA_AUTOBTN_CLICKED: + if(__manualBrightness == false) + { + break; + } + __manualBrightness = false; + __pBrightnessSlider->SetValue(6); +// __pBrightnessSlider->SetShowState(false); + PowerManager::SetScreenBrightness(6); + __pBrightnessSlider->SetEnabled(false); + __pBrightnessSlider->Invalidate(true); + break; + case IDA_MANUALBTN_CLICKED: + PowerManager::SetScreenBrightness(__pBrightnessSlider->GetValue()); + //__pBrightnessSlider->SetValue(__pBrightnessSlider->GetValue()); + __pBrightnessSlider->SetEnabled(true); + __pBrightnessSlider->SetShowState(true); + __pBrightnessSlider->Invalidate(true); + + __manualBrightness = true; + break; + default: + break; + } + // save the slider value + // save the tab button + AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry(); + String sliderKey("SliderValue"); + String tabKey("TabButton"); + int sliderValue = __pBrightnessSlider->GetValue(); + r = pAppRegistry->Set(sliderKey,sliderValue); + FooterItemStatus footerStatus; + GetFooter()->GetItemStatus(0,footerStatus); + if (footerStatus == FOOTER_ITEM_STATUS_SELECTED || footerStatus == FOOTER_ITEM_STATUS_HIGHLIGHTED) + { + r = pAppRegistry->Set(tabKey,0); + } + else + { + r = pAppRegistry->Set(tabKey,1); + } + pAppRegistry->Save(); +} + +void +BrightnessForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus) +{ + WindowInfo* pWindowInfo = MultipleWindowPresentationModel::GetInstance()->GetActiveWindowInfo(); + + if (pWindowInfo != null) + { + if(pWindowInfo->pWebCanvasBitmap != null) + { + int labelWidth = __pLabel->GetWidth(); + int labelHeigth = __pLabel->GetHeight(); + + if(orientationStatus == ORIENTATION_STATUS_LANDSCAPE || orientationStatus == ORIENTATION_STATUS_LANDSCAPE_REVERSE) + { + labelWidth = pWindowInfo->pWebCanvasBitmap->GetWidth() * labelHeigth / pWindowInfo->pWebCanvasBitmap->GetHeight(); + __pLabel->SetBounds(__pLabel->GetX() + (__pLabel->GetWidth() - labelWidth)/2, __pLabel->GetY(), labelWidth, labelHeigth); + } + else + { + labelHeigth = pWindowInfo->pWebCanvasBitmap->GetHeight() * labelWidth / pWindowInfo->pWebCanvasBitmap->GetWidth(); + __pLabel->SetBounds(__pLabel->GetX(), __pLabel->GetY() + (__pLabel->GetHeight() - labelHeigth)/2, labelWidth, labelHeigth); + } + Invalidate(true); + } + } +} + +void +BrightnessForm::OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs) +{ + if (requestId == DEVICE_BRIGHTNESS_CHANGE_EVENT) + { + String key = L"http://tizen.org/setting/screen.brightness" ; + int sliderValue = 10; + SettingInfo::GetValue(key,sliderValue); + if( (sliderValue/10) + 1 > 10) + __pBrightnessSlider->SetValue(10); + else + __pBrightnessSlider->SetValue((sliderValue/10) + 1); + __pBrightnessSlider->Invalidate(true); + } +} diff --git a/src/IntCommonLib.cpp b/src/IntCommonLib.cpp new file mode 100644 index 0000000..7a63024 --- /dev/null +++ b/src/IntCommonLib.cpp @@ -0,0 +1,239 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntCommonUtil.cpp + *@brief: To define the common method of Internet application + */ + +#include +#include +#include +#include "IntCommonLib.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Graphics; +using namespace Tizen::Media; +using namespace Tizen::System; + +const int FONT_MAIN_TEXT_SIZE_GIANT = 98; +const int FONT_MAIN_TEXT_SIZE_HUGE = 81; +const int FONT_MAIN_TEXT_SIZE_LARGE = 64; +const int FONT_MAIN_TEXT_SIZE_NORMAL = 44; +const int FONT_MAIN_TEXT_SIZE_SMALL = 36; +const wchar_t* SETTING_INFO_KEY_FONT_SIZE = L"http://tizen.org/setting/font.size"; + +CommonBitmapTable CommonUtil::__commonBitmapTable[] = { + + // -------- End of table ----------------------------------------------------- + { + NULL, 0, L"", -1, -1 + } // DO NOT REPLACE THIS LINE +}; + +String +CommonUtil::GetString(const String& resourceId) +{ + + result r = E_SUCCESS; + String tmpString; + AppResource* pAppResource = Application::GetInstance()->GetAppResource(); + + if (!pAppResource) + { + tmpString = "(Error)"; + return tmpString; + } + + r = pAppResource->GetString(resourceId, tmpString); + + TryCatch( !IsFailed(r),,"CommonUtil::GetString ,pAppResource->GetString Failed %s",GetErrorMessage(r)); + return tmpString; + + CATCH: + tmpString = "(Error)"; + return tmpString; +} + +Bitmap* +CommonUtil::GetBitmapN(const String& path, const int width, const int height) +{ + Bitmap* pBitmap = null; + AppResource* pAppResource = Application::GetInstance()->GetAppResource(); + + if (pAppResource == null) + { + return null; + } + + if (path == null) + { + return null; + } + + if (width <= 0 || height <= 0) + { + return null; + } + + AppLogDebug("Calling Decode method for image %ls", path.GetPointer()); + pBitmap = pAppResource->GetBitmapN(path, BITMAP_PIXEL_FORMAT_ARGB8888); + AppLogDebug("Image Decoded successfully"); + + if (pBitmap == null) + { + return null; + } + + if (width > 0 && height > 0) + { + pBitmap->Scale(Dimension(width, height)); + } + + return pBitmap; +} + + +Bitmap* +CommonUtil::GetBitmap(uint id) +{ + AppLogDebug("CommonUtil::GetBitmap entered"); + + Bitmap* pBitmap = null; + + if (__commonBitmapTable[id].ptr) + { + pBitmap = __commonBitmapTable[id].ptr; + AppLogDebug("found already used bitmap pointer"); + } + else + { + AppLogDebug("Not found #%d bitmap data in cache. Start loading...\n", (int) id); + pBitmap = GetBitmapN(__commonBitmapTable[id].filename, + __commonBitmapTable[id].width, + __commonBitmapTable[id].height); + if (pBitmap == NULL) + { + AppLogDebug("Error: Failed to load #%d bitmap.\n", (int) id); + return null; + } + + __commonBitmapTable[id].ptr = pBitmap; + } + + __commonBitmapTable[id].refcount++; + AppLogDebug("CommonUtil::GetBitmap exit"); + return pBitmap; +} + +Bitmap* +CommonUtil::GetNinepatchedBitmapN(const String& strPath, const int width, const int height) +{ + Bitmap* pBmp = UiApp::GetInstance()->GetAppResource()->GetBitmapN(strPath); + + if (pBmp == NULL) + { + AppLogDebug("Couldn't create bitmap %ls error(%s)",strPath.GetPointer(),GetErrorMessage(GetLastResult())); + return null; + } + + Bitmap* pBitmap = null; + result r = E_SUCCESS; + + Canvas* pCanvas = new(std::nothrow) Canvas(); + TryCatch(pCanvas != null, , "Canvas new Fail."); + r = pCanvas->Construct(Rectangle(0,0,width, height)); + TryCatch(r == E_SUCCESS, , "Canvas Construct Fail."); + + r = pCanvas->DrawNinePatchedBitmap(Rectangle(0,0,width, height), *pBmp); + + if (r != E_SUCCESS) + { + AppLogDebug("DrawNinePatchedBitmap Error %ls", GetErrorMessage(r)); + pCanvas->DrawBitmap(Rectangle(0,0,width, height), *pBmp); + } + + pBitmap = new(std::nothrow) Bitmap(); + TryCatch(pBitmap != null, , "Bitmap new Fail."); + + r = pBitmap->Construct(*pCanvas, Rectangle(0,0,width, height)); + TryCatch(r == E_SUCCESS, , "Bitmap Construct Fail."); + + if ( pBmp != NULL) + { + delete pBmp; + } + + if (pCanvas != NULL) + { + delete pCanvas; + } + + return pBitmap; + + CATCH: + if (pBmp != NULL) + { + delete pBmp; + } + + if (pCanvas != NULL) + { + delete pCanvas; + } + + if (pBitmap != NULL) + { + delete pBitmap; + } + + return null; +} + +int +CommonUtil::GetFontSize(void) +{ + int fontSize = FONT_MAIN_TEXT_SIZE_NORMAL; + String fontSizeValue; + + if (SettingInfo::GetValue(SETTING_INFO_KEY_FONT_SIZE, fontSizeValue) == E_SUCCESS) + { + if (fontSizeValue.Equals(L"giant", false)) + { + fontSize = FONT_MAIN_TEXT_SIZE_GIANT; + } + else if (fontSizeValue.Equals(L"huge", false)) + { + fontSize = FONT_MAIN_TEXT_SIZE_HUGE; + } + else if (fontSizeValue.Equals(L"large", false)) + { + fontSize = FONT_MAIN_TEXT_SIZE_LARGE; + } + else if (fontSizeValue.Equals(L"medium", false)) + { + fontSize = FONT_MAIN_TEXT_SIZE_NORMAL; + } + else + { + fontSize = FONT_MAIN_TEXT_SIZE_SMALL; + } + } + return fontSize; +} + diff --git a/src/IntConfirmationPopup.cpp b/src/IntConfirmationPopup.cpp new file mode 100644 index 0000000..a5a3e04 --- /dev/null +++ b/src/IntConfirmationPopup.cpp @@ -0,0 +1,124 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +/* + * IntConfirmationPopup.cpp + *@file: IntConfirmationPopup.cpp + *@brief: Common popup to show delete confirmation + */ + +#include +#include + +#include "IntCommonLib.h" +#include "IntConfirmationPopup.h" +#include "IntHistoryPresentationModel.h" +#include "IntSettingPresentationModel.h" + + +using namespace Tizen::Base; +using namespace Tizen::Graphics; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui; +// +//static const int IDA_BUTTON_NO = 1000; +//static const int IDA_BUTTON_YES = 1001; + + +ConfirmationPopup::ConfirmationPopup(void) +{ + __pPopupText = null; + __pYesButton = null; + __pNoButton = null; +} + +ConfirmationPopup::~ConfirmationPopup(void) +{ + +} + +bool +ConfirmationPopup::Initialize(void) +{ + Button* pYesButton = null; + Button* pNoButton = null; + Popup::Construct(L"IDL_CONFIRMATION_POPUP"); + + __pYesButton = static_cast< Button* >(GetControl(L"IDC_BUTTON_OK", true)); + if (__pYesButton) + { + __pYesButton->SetActionId(IDA_BUTTON_YES); + } + + __pNoButton = static_cast< Button* >(GetControl(L"IDC_BUTTON_CANCEL", true)); + if (__pNoButton) + { + __pNoButton->SetActionId(IDA_BUTTON_NO); + } + + __pPopupText = static_cast< Label* >(GetControl(L"IDC_LABEL1", true)); + + SetPropagatedKeyEventListener(this); + return true; +} + +result +ConfirmationPopup::OnTerminating(void) +{ + return E_SUCCESS; +} + +void +ConfirmationPopup::setMessage(String& str) +{ + __message = str; + __pPopupText->SetText(str); +} + +String +ConfirmationPopup::GetMessage(void) +{ + return __message; +} + +void +ConfirmationPopup::AddActionListener(IActionEventListener& listener) +{ + __pYesButton->AddActionEventListener(listener); + __pNoButton->AddActionEventListener(listener); +} + +void +ConfirmationPopup::RemoveActionListener(IActionEventListener& listener) +{ + __pYesButton->RemoveActionEventListener(listener); + __pNoButton->RemoveActionEventListener(listener); +} + +bool +ConfirmationPopup::OnKeyReleased (Control &source, const KeyEventInfo &keyEventInfo) +{ + AppLog("ConfirmationPopup::OnKeyReleased %d",keyEventInfo.GetKeyCode()); + if(keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC) + { + if(GetShowState() == true) + { + SetShowState(false); + } + } + return false; +} diff --git a/src/IntCreateBookmarkFolderForm.cpp b/src/IntCreateBookmarkFolderForm.cpp new file mode 100644 index 0000000..d1b750b --- /dev/null +++ b/src/IntCreateBookmarkFolderForm.cpp @@ -0,0 +1,503 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// !Internet +/*@file: IntCreateBookmarkFolderForm + *@brief: This class creates Bookmark folder + * + */ + +#include +#include +#include "IntBookmarkPresentationModel.h" +#include "IntBookmarkData.h" +#include "IntCommonLib.h" +#include "IntCreateBookmarkFolderForm.h" +#include "IntSceneRegister.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + + +const int CreateBookmarkFolderForm::IDA_BUTTON_DONE = 101; +const int CreateBookmarkFolderForm::IDA_BUTTON_CANCEL = 102; + +CreateBookmarkFolderForm::CreateBookmarkFolderForm(void) +: __pFolderTitle(null) +, __pMsgBox(null) +, __modalMsgBoxResult(0) +, __pBookmark(null) +, __ret(false) +{ + +} + +CreateBookmarkFolderForm::~CreateBookmarkFolderForm(void) +{ + +} + +bool +CreateBookmarkFolderForm::Initialize(void) +{ + result r = Construct(L"IDL_CREATE_BOOKMARK_FOLDER"); + AppLogDebug("CreateBookmarkFolderForm Construct returned %s",GetErrorMessage(r)); + return true; +} + +result +CreateBookmarkFolderForm::OnInitializing(void) +{ + // Add your initialization code here + + result r = E_SUCCESS; + Header* pHeader = null; + SceneManager* pSceneManager = SceneManager::GetInstance(); + AppAssert(pSceneManager); + pSceneManager->AddSceneEventListener(IDSCN_CREATE_BOOKMARK_FOLDER, *this); + SetFormBackEventListener(this); + + __pFolderTitle = static_cast< EditField* >(GetControl(L"IDC_EDITFIELD_FOLDER_TITLE")); + + if (__pFolderTitle == null) + { + return E_FAILURE; + } + + __pFolderTitle->AddKeypadEventListener(*this); + __pFolderTitle->AddTextEventListener(*this); + __pFolderTitle->SetOverlayKeypadCommandButtonVisible(false); + + pHeader = GetHeader(); + + if (pHeader != NULL) + { + pHeader->AddActionEventListener(*this); + } + + return r; +} + +result +CreateBookmarkFolderForm::OnTerminating(void) +{ + result r = E_SUCCESS; + return r; +} + +void +CreateBookmarkFolderForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs) +{ + AppLogDebug("CreateBookmarkFolderForm::OnSceneActivatedN"); + + result r = E_SUCCESS; + __previousScene = previousSceneId; + bool flag = false; + ArrayList folderList; + String parentID = "0"; + String title ; + String folderTitle ; + int count = 0; + int foldercount = 0; + int counter = 0; + __ret = false; + + String pStr = CommonUtil::GetString(L"IDS_BR_SK_EDIT"); + + String folder01 = CommonUtil::GetString(L"IDS_BR_HEADER_FOLDER"); + folder01.Append(L"_"); + + String* pEvent = null; + if (pArgs != NULL) + { + pEvent = dynamic_cast(pArgs->GetAt(1)); + } + + if (pEvent != null) + { + if (pEvent->CompareTo(pStr) == 0) + { + __ret = true; + } + delete pEvent; + } + + Header* pHeader = GetHeader(); + + if (pHeader != null) + { + if (previousSceneId ==IDSCN_EDIT_BOOKMARK_LIST || __ret == true) + { + pHeader->SetTitleText(CommonUtil::GetString(L"IDS_BR_SK_EDIT")); + } + else + { + pHeader->SetTitleText(CommonUtil::GetString(L"IDS_BR_SK3_CREATE_FOLDER")); + } + } + + if (__pFolderTitle == NULL) + { + return; + } + + if (previousSceneId == IDSCN_EDIT_BOOKMARK_LIST || __ret == true) + { + if (__pBookmark != NULL ) + { + delete __pBookmark; + __pBookmark = null; + } + + if ( pArgs != NULL ) + { + __pBookmark = dynamic_cast(pArgs->GetAt(0)); + } + + if (__pBookmark != null) + { + __pFolderTitle->SetText(__pBookmark->GetBookmarkTitle()); + __pFolderTitle->SetFocus(); + __pFolderTitle->ShowKeypad(); + } + } + else + { + __pFolderTitle->SetText(folder01); + __pFolderTitle->SetFocus(); + __pFolderTitle->ShowKeypad(); + + r = BookmarkPresentationModel::GetInstance()->GetFolderCount(parentID, foldercount); // to get count of existing folders + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetInstance()->GetFolderCount failed %s",GetErrorMessage(r)); + + r = BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, foldercount, folderList); // to get list of existing folders + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetInstance()->GetFolder failed %s",GetErrorMessage(r)); + + while (true) // to provide user with unique folder title when he creates a new(std::nothrow) folder + { // to generate folder with default name of type Folder_## + flag = false ; + title = L""; + count = 0; + counter++; + title.Append(folder01); + + if (counter/10 == 0) + { + title.Append(0); + } + + title.Append(counter); + + for (count = 0;count < foldercount ; count++) + { + BookmarkData* pBookmark = dynamic_cast(folderList.GetAt(count)); + folderTitle = L""; + if ( pBookmark != NULL) + { + folderTitle = pBookmark->GetBookmarkTitle(); + } + + if (title.Equals(folderTitle,false) == true) + { + flag = true; // if flag is true folder title already exists + break; // break from for loop + } + + } // end of for loop + + if ( flag == false) + { + __pFolderTitle->SetText(title); // if flag is false folder title is unique + break; // break from while loop + } + + } // end of while loop + } + + CATCH: + + folderList.RemoveAll(true); + return; +} + +void +CreateBookmarkFolderForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + +} + +void +CreateBookmarkFolderForm::OnActionPerformed(const Control& source, int actionId) +{ + int count = 0; + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager == null) + { + return; + } + + switch (actionId) + { + case IDA_BUTTON_CANCEL: + { + result r; + if (__pFolderTitle != NULL) + { + __pFolderTitle->Clear(); + __pFolderTitle->HideKeypad(); + } + + r = pSceneManager->GoBackward(BackwardSceneTransition()); + AppLogDebug("SCENE_ADD_BOOKMARK error = %s",GetErrorMessage(r)); + TryCatch(!IsFailed(r),L"BookmarkPresentationModel::GetFolderCount failed %s",GetErrorMessage(r)); + + } + break; + + case IDA_BUTTON_DONE: + { + result r = E_SUCCESS; + bool flag = false; + ArrayList folderList; + String parentID = "0"; + int foldercount = 0; + String title; + String folderTitle; + folderTitle = __pFolderTitle->GetText(); + folderTitle.Trim(); + AppLog("IDA_BUTTON_DONE folderTitle %ls",folderTitle.GetPointer()); + + r = BookmarkPresentationModel::GetInstance()->GetFolderCount(parentID, foldercount); + TryCatch( !IsFailed(r),,"BookmarkPresentationModel::GetInstance()->GetFolderCount failed %s",GetErrorMessage(r)); + + r = BookmarkPresentationModel::GetInstance()->GetFolder(parentID, 0, foldercount, folderList); + TryCatch( !IsFailed(r),,"BookmarkPresentationModel::GetInstance()->GetFolder failed %s",GetErrorMessage(r)); + + // To check if folder with same name exists + for (count = 0; count < foldercount; count++) + { + BookmarkData* pBookmark = dynamic_cast< BookmarkData* >(folderList.GetAt(count)); + if ( pBookmark == NULL ) + { + return; + } + title = pBookmark->GetBookmarkTitle(); + title.Trim(); + + if (folderTitle.Equals(title, true) == true) + { + flag = true; + break; + } + } + + if (flag == true && ( __ret == true || __previousScene == IDSCN_EDIT_BOOKMARK_LIST) ) + { + + if(__pBookmark && (__pBookmark->GetBookmarkTitle() == folderTitle )) + { + SceneManager::GetInstance()->GoBackward(BackwardSceneTransition()); + folderList.RemoveAll(false); + return; + } + } + + if (flag == true) + { + String message = " Folder already exists "; + CreateMessage(message); // Message alert saying Folder already exists + } + else + { + if (__previousScene == IDSCN_EDIT_BOOKMARK_LIST || __ret == true ) + { + __pBookmark->SetBookmarkTitle(folderTitle); + BookmarkPresentationModel::GetInstance()->SaveFolder(*__pBookmark); + + r = SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT)); + AppLogDebug("SCENE_ADD_BOOKMARK error = %s",GetErrorMessage(r)); + + } + else + { + ArrayList* pArgList = null; + pArgList = new(std::nothrow) ArrayList(); + if (pArgList != null) + { + pArgList->Construct(); + pArgList->Add(*new(std::nothrow) String(L"2")); + } + + BookmarkData bookmark; + bookmark.SetBookmarkTitle(folderTitle); + BookmarkPresentationModel::GetInstance()->SaveFolder(bookmark); + result r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT),pArgList); + AppLogDebug("SCENE_ADD_BOOKMARK error = %s",GetErrorMessage(r)); + if (pArgList != null) + { + pArgList->RemoveAll(false); + delete pArgList; + } + TryCatch( !IsFailed(r),L"BookmarkPresentationModel::GetFolder failed %s",GetErrorMessage(r)); + } + + } + + folderList.RemoveAll(false); + } + break; + + default: + break; + } + + CATCH: return; +} + +void +CreateBookmarkFolderForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source) +{ + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return; + } + result r; + if (__pFolderTitle != NULL) + { + __pFolderTitle->Clear(); + __pFolderTitle->HideKeypad(); + } + + r = pSceneManager->GoBackward(BackwardSceneTransition()); + AppLogDebug("SCENE_ADD_BOOKMARK error = %s",GetErrorMessage(r)); + + +} + +void +CreateBookmarkFolderForm::OnKeypadActionPerformed(Control& source, KeypadAction keypadAction) +{ + +} + +void +CreateBookmarkFolderForm::OnKeypadClosed(Control& source) +{ +// __pFolderTitle->SetFocus(); +// __pFolderTitle->HideKeypad(); +} + +void +CreateBookmarkFolderForm::OnKeypadOpened(Control& source) +{ + +} + +void +CreateBookmarkFolderForm::OnKeypadWillOpen(Control& source) +{ + +} + +void +CreateBookmarkFolderForm::OnTextValueChanged(const Control& source) +{ + AppLog("CreateBookmarkFolderForm::OnTextValueChanged"); + String title = L""; + Header* pHeader = GetHeader(); + + if (pHeader == NULL) + { + return; + } + + if (__pFolderTitle == NULL) + { + return; + } + + title = __pFolderTitle->GetText(); + title.Trim(); + + // To disable done button when folder title edit-field is empty + if (__pFolderTitle && title.GetLength() == 0) + { + pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, false); + } + else + { + pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, true); + } + pHeader->Invalidate(true); + return; +} + +void +CreateBookmarkFolderForm::OnTextValueChangeCanceled(const Control& source) +{ + +} + +void +CreateBookmarkFolderForm::CreateMessage(String& msg) +{ + + if (__pMsgBox != null) + { + delete __pMsgBox; + __pMsgBox = null; + __modalMsgBoxResult = 0; + } + + __pMsgBox = new(std::nothrow) MessageBox; + + if (__pMsgBox != null) + { + __pMsgBox->Construct(L"", msg, MSGBOX_STYLE_OK, 3000); + } + + if (__pMsgBox != null) + { + __pMsgBox->ShowAndWait(__modalMsgBoxResult); + if(__pFolderTitle != null) + __pFolderTitle->SetFocus(); + /*if (__modalMsgBoxResult == MSGBOX_RESULT_OK) + { + AppLog("CreateBookmarkFolderForm::CreateMessage MSGBOX_RESULT_OK"); + if (__pMsgBox != null) + { + delete __pMsgBox; + __pMsgBox = null; + } + }*/ + if (__pMsgBox != null) + { + delete __pMsgBox; + __pMsgBox = null; + } + __modalMsgBoxResult = 0; + } + + return; +} diff --git a/src/IntDefaultCustomItem.cpp b/src/IntDefaultCustomItem.cpp new file mode 100644 index 0000000..53209c0 --- /dev/null +++ b/src/IntDefaultCustomItem.cpp @@ -0,0 +1,89 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// !Internet +/*@file: IntDefaultCustomItem + *@brief: + * + */ + +#include +#include "IntCommonLib.h" +#include "IntDefaultCustomItem.h" +#include "IntTypes.h" + +using namespace Tizen::Base; +using namespace Tizen::Graphics; +using namespace Tizen::Ui::Controls; + +const int DefaultCustomItem::IDA_FORMAT_STRING = 101; + +DefaultCustomItem::DefaultCustomItem(void) +{ + __width = 0; + __height = 0; + __text = L""; +} + +DefaultCustomItem::~DefaultCustomItem(void) +{ + +} + +result +DefaultCustomItem::Construct(int width, int height) +{ + result r = E_FAILURE; + __fontSize = CommonUtil::GetFontSize(); + __width = width; + __height = height; + const Dimension dim(width, height); + r = CustomItem::Construct(dim, LIST_ANNEX_STYLE_NORMAL); + return r; + +} + +void +DefaultCustomItem::SetText(String& text) +{ + __text = text; +} + +String +DefaultCustomItem::GetText(void) +{ + return __text; +} + + +result +DefaultCustomItem::Make(void) +{ + result r = E_SUCCESS; + const Color pressedTextColor = Color(249, 249, 249); + const int textSize = 40; + const int x_Margin_Element = 26; + const int y_Margin_Element = 26; + const int width_Element = __width - 60; + + r = AddElement(Rectangle(x_Margin_Element, y_Margin_Element, width_Element,60 + (__fontSize - 44)), IDA_FORMAT_STRING, __text, __fontSize , CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,true); + TryCatch( !IsFailed(r),,"DefaultCustomItem::Make %s",GetErrorMessage(r)); + +// SetElementSelectionEnabled(IDA_FORMAT_STRING, true); + + CATCH:return r; +} diff --git a/src/IntDropDownCustomItem.cpp b/src/IntDropDownCustomItem.cpp new file mode 100644 index 0000000..46b51ec --- /dev/null +++ b/src/IntDropDownCustomItem.cpp @@ -0,0 +1,209 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +/* + *@file: IntDropDownCustomItem + *@brief: To create Drop Down custom item + * + */ + +#include +#include + +#include "IntCommonLib.h" +#include "IntDropDownCustomItem.h" +#include "IntTypes.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Graphics; +using namespace Tizen::Ui::Controls; + +static const wchar_t* IDB_LIST_EXPAND_CLOSED = L"00_button_expand_closed.png"; +static const wchar_t* IDB_LIST_EXPAND_CLOSED_PRESS = L"00_button_expand_closed_press.png"; +static const wchar_t* IDB_LIST_EXPAND_OPENED = L"00_button_expand_opened.png"; +static const wchar_t* IDB_LIST_EXPAND_OPENED_PRESS = L"00_button_expand_opened_press.png"; + +const int DropDownCustomItem::IDA_FORMAT_BITMAP = 101; +const int DropDownCustomItem::IDA_FORMAT_MAIN_STRING = 102; +const int DropDownCustomItem::IDA_FORMAT_SUB_STRING = 103; +const int DropDownCustomItem::IDA_FORMAT_DROPPER = 104; + + +DropDownCustomItem::DropDownCustomItem(void) +{ + __width = 0; + __height = 0; + __mainText = L""; + __subText = L""; + __currentState = DROP_DOWN__ITEM_STATE_CLOSED; +} + +DropDownCustomItem::~DropDownCustomItem(void) +{ + +} + +result +DropDownCustomItem::Construct(int width) +{ + result r = E_SUCCESS; + __width = width; + __fontSize = CommonUtil::GetFontSize(); + __height = 140 + (__fontSize - 44); + Dimension dim(__width, __height); + r = CustomItem::Construct(dim, LIST_ANNEX_STYLE_NORMAL); + return r; +} + +void +DropDownCustomItem::SetMainText(const Tizen::Base::String& text) +{ + __mainText = text; +} + +String +DropDownCustomItem::GetMainText(void) +{ + return __mainText; +} + +void +DropDownCustomItem::SetSubText(const Tizen::Base::String& text) +{ + __subText = text; +} + +String +DropDownCustomItem::GetSubText(void) +{ + return __subText; +} + +result +DropDownCustomItem::Make() +{ + AppLogDebug("DropDownCustomItem::Make entered"); + result r = E_FAILURE; + EnrichedText* pMainEnText = null; + EnrichedText* pSubEnText = null; + TextElement* pMainTextElement = null; + TextElement* pSubTextElement = null; + Font mainTextFont; + Font subTextFont; + Tizen::Graphics::Bitmap* pDropperBitmapNormal = null; + Tizen::Graphics::Bitmap* pDropperBitmapPressed = null; + + pMainEnText = new(std::nothrow) EnrichedText(); + r = pMainEnText->Construct(Dimension(__width - 80, 54 + (__fontSize - 44))); + if(IsFailed(r)) + { + delete pMainEnText; + return E_FAILURE; + } + + pMainTextElement = new(std::nothrow) TextElement(); + pMainTextElement->Construct(__mainText); + + mainTextFont.Construct(FONT_STYLE_BOLD, __fontSize); + + Color pressedTextColor = CUSTOM_COLOR_LISTVIEW_TEXT; + pMainTextElement->SetFont(mainTextFont); + pMainTextElement->SetTextColor(CUSTOM_COLOR_TRANSPARENT); + pMainEnText->Add(*pMainTextElement); + + pSubEnText = new(std::nothrow) EnrichedText(); + r = pSubEnText->Construct(Dimension(__width - 80, 42)); + if(IsFailed(r)) + { + pMainEnText->RemoveAll(true); + delete pMainEnText; + delete pSubEnText; + return E_FAILURE; + } + + pSubTextElement = new(std::nothrow) TextElement(); + r = pSubTextElement->Construct(__subText); + if(IsFailed(r)) + { + pMainEnText->RemoveAll(true); + delete pMainEnText; + delete pSubEnText; + delete pSubTextElement; + return E_FAILURE; + } + + + subTextFont.Construct(FONT_STYLE_PLAIN, 32); + + pSubTextElement->SetFont(subTextFont); + pSubTextElement->SetTextColor(CUSTOM_COLOR_GREY); + pSubEnText->Add(*pSubTextElement); + + r = AddElement(Rectangle(26, 22, __width - 126, 72 + (__fontSize - 44)), IDA_FORMAT_MAIN_STRING, *pMainEnText); + r = AddElement(Rectangle(26, 76 + (__fontSize - 44), __width - 126, 42), IDA_FORMAT_SUB_STRING, *pSubEnText); + if(IsFailed(r)) + { + pMainEnText->RemoveAll(true); + pSubEnText->RemoveAll(true); + delete pMainEnText; + delete pSubEnText; + return E_FAILURE; + } + AppResource* pAppResource = UiApp::GetInstance()->GetAppResource(); + if (pAppResource) + { + if (GetCurState() == DROP_DOWN__ITEM_STATE_CLOSED) + { + pDropperBitmapNormal = pAppResource->GetBitmapN(IDB_LIST_EXPAND_CLOSED, BITMAP_PIXEL_FORMAT_ARGB8888); + pDropperBitmapPressed = pAppResource->GetBitmapN(IDB_LIST_EXPAND_CLOSED_PRESS, BITMAP_PIXEL_FORMAT_ARGB8888); + } + else + { + pDropperBitmapNormal = pAppResource->GetBitmapN(IDB_LIST_EXPAND_OPENED, BITMAP_PIXEL_FORMAT_ARGB8888); + pDropperBitmapPressed = pAppResource->GetBitmapN(IDB_LIST_EXPAND_OPENED_PRESS, BITMAP_PIXEL_FORMAT_ARGB8888); + } + + AddElement(Rectangle(__width - pDropperBitmapNormal->GetWidth() - 12, (__height - pDropperBitmapNormal->GetHeight()) / 2 + (__fontSize - 44)/2, pDropperBitmapNormal->GetWidth(), pDropperBitmapNormal->GetHeight()), IDA_FORMAT_DROPPER, *pDropperBitmapNormal, pDropperBitmapNormal, pDropperBitmapNormal); + delete pDropperBitmapNormal; + delete pDropperBitmapPressed; + } + +// SetElementSelectionEnabled(IDA_FORMAT_MAIN_STRING, true); +// SetElementSelectionEnabled(IDA_FORMAT_SUB_STRING, true); +// SetElementSelectionEnabled(IDA_FORMAT_DROPPER, true); + + pSubEnText->RemoveAllTextElements(true); + pMainEnText->RemoveAllTextElements(true); + + delete pMainEnText; + delete pSubEnText; + + return E_SUCCESS; +} + +DropDownItemState +DropDownCustomItem::GetCurState(void) +{ + return __currentState; +} + +void +DropDownCustomItem::SetCurState(DropDownItemState state) +{ + __currentState = state; +} diff --git a/src/IntEditBookmarkListForm.cpp b/src/IntEditBookmarkListForm.cpp new file mode 100644 index 0000000..d9cfc46 --- /dev/null +++ b/src/IntEditBookmarkListForm.cpp @@ -0,0 +1,1029 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: EditBookmarkListForm + *@brief: This class defines EditBookmarkListForm used to edit the bookmark + * + */ + +#include +#include + +#include "IntBookmarkData.h" +#include "IntBookmarkPresentationModel.h" +#include "IntCommonLib.h" +#include "IntEditBookmarkListForm.h" +#include "IntFaviconManager.h" +#include "IntSceneRegister.h" +#include "IntTypes.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + +static const wchar_t* IDB_ICON_FOLDER_OPEN = L"I01_icon_folder_open.png"; +static const wchar_t* IDB_ITEM = L"edit_item.png"; +static const wchar_t* IDB_RIGHT_ARROW = L"00_circle_bg_ef.png"; +static const wchar_t* IDB_RIGHT_ARROW_PRESS = L"00_circle_bg_ef_press.png"; + + +const int EditBookmarkListForm::IDA_BUTTON_CHECKED = 101; +const int EditBookmarkListForm::IDA_TABBAR_ITEM_1 = 102; +const int EditBookmarkListForm::IDA_TABBAR_ITEM_2 = 103; +const int EditBookmarkListForm::IDA_DELETEITEM_CLICKED = 104; +const int EditBookmarkListForm::IDA_SHAREITEM_CLICKED = 105; +const int EditBookmarkListForm::IDA_CANCELITEM_CLICKED = 106; +const int EditBookmarkListForm::IDA_FORMAT_FOLDER = 107; +const int EditBookmarkListForm::IDA_FORMAT_SITE = 108; +const int EditBookmarkListForm::IDA_FORMAT_ICON = 109; +const int EditBookmarkListForm::IDA_FORMAT_BITMAP = 110; +const int EditBookmarkListForm::IDA_BUTTON_UNCHECKED = 111; +const int EditBookmarkListForm::IDA_FORMAT_URL = 112; + + +EditBookmarkListForm::EditBookmarkListForm(void) +{ + __pListview = null; + __pData = null; + __pTimer = null; + __parentID = L"0"; + __pInfoPanel = null; + __pInfoLabel = null; + __selectedItemCount = 0; + __pCheckButton = null; + __pConfirmationPopup = null; + __pSelectedList = null; + __fontSize = 44; + __pNotification = null; +} + +EditBookmarkListForm::~EditBookmarkListForm(void) +{ + if (__pData != null) + { + __pData->RemoveAll(false); + delete __pData; + } + if(__pSelectedList != null) + { + __pSelectedList->RemoveAll(false); + delete __pSelectedList; + } +// if(__pNotification) +// delete __pNotification; +} + +bool +EditBookmarkListForm::Initialize(void) +{ + Construct(L"IDL_EDIT_BOOKMARK_LIST"); + + return true; +} +result +EditBookmarkListForm::OnInitializing(void) +{ + result r = E_SUCCESS; + + Rectangle rc = GetClientAreaBounds(); + String selected = CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED"); + + // Setup back event listener + SetFormBackEventListener(this); + AddOrientationEventListener(*this); + + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager != null) + { + pSceneManager->AddSceneEventListener(IDSCN_EDIT_BOOKMARK_LIST, *this); + } + + __fontSize = CommonUtil::GetFontSize(); + Header* pHeader = GetHeader(); + + if (pHeader == NULL) + { + return E_FAILURE; + } + pHeader->SetTitleText(CommonUtil::GetString(L"IDS_BR_HEADER_EDIT_BOOKMARK")); + + __pCheckButton = static_cast< CheckButton* >(GetControl( + L"IDC_SELECT_CHECKBUTTON", true)); + + if (__pCheckButton == null) + { + return E_FAILURE; + } + + __pCheckButton->SetActionId(IDA_BUTTON_CHECKED, IDA_BUTTON_UNCHECKED); + __pCheckButton->AddActionEventListener(*this); + + __pListview = static_cast< ListView* >(GetControl("IDC_LISTVIEW1")); + + if (__pListview == null) + { + return E_FAILURE; + } + + __pListview->AddFastScrollListener(*this); + __pListview->AddListViewItemEventListener(*this); + __pListview->SetItemProvider(*this); + + __pInfoPanel = static_cast< Panel* >(GetControl( + L"IDC_INFO_PANEL", true)); + + if (__pInfoPanel == null) + { + return E_FAILURE; + } + + __pInfoLabel = static_cast< Label* >(GetControl( + L"IDC_INFO_LABEL", true)); + + if (__pInfoLabel == null) + { + return E_FAILURE; + } + +// __pInfoLabel->SetBounds(Rectangle(0,0,rc.width, 48)); + //selected.Append(L"(0)"); + selected.Format(25, selected.GetPointer() , 0); + __pInfoLabel->SetText(selected); + + __pInfoLabel->SetTextConfig(32,LABEL_TEXT_STYLE_BOLD); + //__pInfoLabel->SetBackgroundColor(CUSTOM_COLOR_INFO_LABEL); + __pInfoLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE); + __pInfoLabel->SetTextHorizontalAlignment(ALIGNMENT_CENTER); + GetFooter()->SetItemEnabled(0,false); + GetFooter()->AddActionEventListener(*this); + __pTimer = new (std::nothrow) Timer(); + __pTimer->Construct(*this); + + __pSelectedList = new(std::nothrow) ArrayList(); + __pSelectedList->Construct(); + return r; +} + +void +EditBookmarkListForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId) +{ + result r = E_SUCCESS; + + SceneManager* pSceneManager = SceneManager::GetInstance(); + + switch (actionId) + { + case IDA_DELETEITEM_CLICKED: + if(__pConfirmationPopup) + { + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + if (!__pConfirmationPopup) + { + String closeWarning = CommonUtil::GetString(L"IDS_BR_SK3_DELETE"); + __pConfirmationPopup = new(std::nothrow) ConfirmationPopup(); + __pConfirmationPopup->Initialize(); + + __pConfirmationPopup->RemoveActionListener(*this); + __pConfirmationPopup->AddActionListener(*this); + __pConfirmationPopup->setMessage(closeWarning); + __pConfirmationPopup->Show(); + } + break; + case IDA_BUTTON_NO: + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + break; + case IDA_BUTTON_YES: + { + String labelString; + int count = 0; + if(__pListview == null) + { + return; + } + int totalCount = __pListview->GetItemCount(); + for (int count = 0;count < totalCount;count++) + { + if (__pListview->IsItemChecked(count)) + { + int id = 0; + String bookmarkId; + BookmarkData* pBookMark = dynamic_cast< BookmarkData* >(__pData->GetAt(count)); + if (pBookMark == null) + { + return; + } + bookmarkId = pBookMark->GetBookmarkId(); + Integer::Parse(bookmarkId,id); + + if (pBookMark->GetBookmarkType() == BOOKMARK_TYPE_URL) + { + r = BookmarkPresentationModel::GetInstance()->DeleteBookmark(id); + TryCatch( r == E_SUCCESS,,"EditBookmarkListForm::OnActionPerformed BookmarkPresentationModel::GetInstance()->DeleteBookmark failed %s",GetErrorMessage(r)); + } + else + { + r = BookmarkPresentationModel::GetInstance()->DeleteFolder(id); + TryCatch( r == E_SUCCESS,,"EditBookmarkListForm::OnActionPerformed BookmarkPresentationModel::GetInstance()->DeleteBookmark failed %s",GetErrorMessage(r)); + } + } + } + + if (__pListview != null) + { + count = __pListview->GetItemCount(); + + for(int index = 0; index < count ; index ++) + { + if(__pListview->IsItemChecked(index) == true ) + { + __pListview->SetItemChecked(index,false); + } + } + + __pCheckButton->SetSelected(false); + __pListview->UpdateList(); + + if ( __pListview->GetItemCount() == 0) + { + __pCheckButton->SetShowState(false); + __pCheckButton->Invalidate(true); + if (__pInfoPanel != null) + { + __pInfoPanel->SetShowState(false); + } + r = __pListview->SetBounds(__pListview->GetX(), 0, __pListview->GetWidth(), GetClientAreaBounds().height); + if (IsFailed(r)) + { + return; + } + + + } + } + GetFooter()->SetItemEnabled(0,false); + GetFooter()->Invalidate(true); + // removing all the element from selected list + __pSelectedList->RemoveAll(false); + + labelString.Format(25, CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED").GetPointer() , 0); + + /*labelString.Append(CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED")); + labelString.Append(L"\x200E"); // LEFT-TO-RIGHT MARK + labelString.Append(L"(0)");*/ + + if (__pInfoPanel != null) + { + __pInfoLabel->SetText(labelString); + __pInfoPanel->Draw(); + __pInfoPanel->Show(); + } + +// if(__pNotification) +// { +//// delete __pNotification; +// __pNotification = null; +// } + __pNotification = new (std::nothrow) NotificationPanel(*this); + String notification = CommonUtil::GetString(L"IDS_BR_POP_DELETED"); + __pNotification->SetText(notification); + __pNotification->ShowNotification(); + + if(__pConfirmationPopup) + { + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + if( __pListview->GetItemCount() == 0) + { + __pTimer->Start(1000); + } + } + break; + case IDA_CANCELITEM_CLICKED: + { + if ( __pTimer != NULL) + { + __pTimer->Cancel(); + } + if(pSceneManager != NULL) + { + r = pSceneManager->GoBackward(BackwardSceneTransition()); + } + if (IsFailed(r)) + { + AppLogDebug("EditBookmarkListForm::OnActionPerformed Failed to GoBackward %s",GetErrorMessage(r)); + return; + } + } + break; + case IDA_BUTTON_CHECKED: + { + String labelString; + bool flag = false; + + for (int count = 0;count < __pListview->GetItemCount();count++) + { + __pListview->SetItemChecked(count,true); + } + + GetFooter()->SetItemEnabled(0,true); + GetFooter()->Invalidate(true); + + if(__pListview->GetItemCount() >1) + { + labelString.Format(25, CommonUtil::GetString(L"IDS_BR_POP_PD_ITEMS_SELECTED").GetPointer() , __pListview->GetItemCount()); + } + else + { + labelString.Format(25, CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED").GetPointer() , __pListview->GetItemCount()); + } + + __selectedItemCount = 0; + + __pInfoLabel->SetText(labelString); + __pInfoPanel->Draw(); + __pInfoPanel->Show(); + + __pSelectedList->RemoveAll(); + int totalCount = __pData->GetCount(); + for(int index = 0; index < totalCount; index++) + { + BookmarkData* pBookMark = dynamic_cast< BookmarkData* >(__pData->GetAt(index)); + if (pBookMark == null) + { + continue; + } + String *pBookmarkId = new(std::nothrow) String(); + if(pBookMark->GetBookmarkType() == BOOKMARK_TYPE_FOLDER) + { + pBookmarkId->Append("F"); + } + else + { + pBookmarkId->Append("U"); + } + pBookmarkId->Append(pBookMark->GetBookmarkId()); + + __pListview->SetItemChecked(index, true); + __pSelectedList->Add(pBookmarkId); + } + __pListview->Invalidate(true); + } + break; + case IDA_BUTTON_UNCHECKED: + { + String labelString = L""; + + for (int count = 0;count < __pListview->GetItemCount();count++) + { + __pListview->SetItemChecked(count,false); + } + + /*labelString.Append(CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED")); + labelString.Append(L"\x200E"); // LEFT-TO-RIGHT MARK + labelString.Append(L"(0)");*/ + + labelString.Format(25, CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED").GetPointer() , 0); + + __pInfoLabel->SetText(labelString); + __pInfoPanel->Draw(); + __pInfoPanel->Show(); + __pSelectedList->RemoveAll(true); + __pListview->Invalidate(true); + + GetFooter()->SetItemEnabled(0,false); + GetFooter()->Invalidate(true); + } + break; + default: + break; + } + + CATCH: return ; +} + +ListItemBase* +EditBookmarkListForm::CreateItem(int index, int itemWidth) +{ + result r = E_SUCCESS; + ListAnnexStyle style = LIST_ANNEX_STYLE_MARK; + CustomItem* pItem = null; + BookmarkData* pBookMark = null; + Bitmap* pBitmap = null; + String bitmapId; + const int x_Margin_Url = 104; + const int y_Margin_Url = 70; + const int height_Url = 40; + const int width_Url = GetClientAreaBounds().width - 104 - 120 - 16 - 48; + const int itemHeight = 112; + const int textSize = 32; + const int width_Title = GetClientAreaBounds().width - 104 - 120 - 16 - 48; + + pItem = new(std::nothrow) CustomItem(); + if (pItem == null) + { + return null; + } + pBookMark = dynamic_cast< BookmarkData* >(__pData->GetAt(index)); + if (pBookMark == null) + { + delete pItem; + pItem = null; + return null; + } + if (pBookMark->GetBookmarkType() == BOOKMARK_TYPE_FOLDER) + { + r = pItem->Construct(Tizen::Graphics::Dimension(itemWidth, 112 - 44 + __fontSize), style); + TryCatch( r == E_SUCCESS,,"EditBookmarkListForm::CreateItem contruct item failed %s",GetErrorMessage(r)); + + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_ICON_FOLDER_OPEN); + + if (pBitmap != null) + { + pItem->AddElement(Rectangle(16, 26+(__fontSize - 44)/2, 60, 60), IDA_FORMAT_ICON, *pBitmap, null); + delete pBitmap; + } + + pItem->AddElement(Rectangle(92, 8, width_Title/*__pListview->GetWidth() - 92 - 80*/, 112 + (__fontSize - 44)), IDA_FORMAT_FOLDER, pBookMark->GetBookmarkTitle(),__fontSize, CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,true); + + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_ITEM); + + if (pBitmap != null) + { + pItem->AddElement(Rectangle(GetClientAreaBounds().width - 92 - 80, 20 + (__fontSize - 44)/2, 60, 60), IDA_FORMAT_BITMAP, *pBitmap, null, null); + pItem->SetElementSelectionEnabled(IDA_FORMAT_BITMAP, true); + delete pBitmap; + } + } + else + { + r = pItem->Construct(Tizen::Graphics::Dimension(itemWidth, 128 + (__fontSize - 44)), style); + TryCatch( r == E_SUCCESS,,"EditBookmarkListForm::CreateItem contruct item failed %s",GetErrorMessage(r)); + + pBitmap = pBookMark->GetFavIconBitmap(); + + if (pBitmap == null) + { + pBitmap = FaviconManager::GetInstance()->GetDefaultFaviconN(); + } + + pItem->AddElement(Rectangle(16, 28 + (__fontSize - 44)/2, 72, 72), IDA_FORMAT_ICON, *pBitmap, null); + delete pBitmap; + + pItem->AddElement(Rectangle(104, 10, width_Title, itemHeight - height_Url + (__fontSize - 44)), IDA_FORMAT_SITE, pBookMark->GetBookmarkTitle(),__fontSize,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,true); + pItem->AddElement(Rectangle(x_Margin_Url, y_Margin_Url + (__fontSize - 44), width_Url, height_Url), IDA_FORMAT_URL, pBookMark->GetUrl(),textSize,CUSTOM_COLOR_GREY,CUSTOM_COLOR_LISTVIEW_TEXT,CUSTOM_COLOR_LISTVIEW_TEXT,true); + + //pBitmap = AppResource::GetInstance()->GetBitmapN("I01_picker_arrow_right.png"); + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_RIGHT_ARROW); + Bitmap* pPressedBitmap = AppResource::GetInstance()->GetBitmapN(IDB_RIGHT_ARROW_PRESS); + if (pBitmap != null && pPressedBitmap != null) + { + pItem->AddElement(Rectangle(GetClientAreaBounds().width - 92 - 84-4, 32 + (__fontSize - 44)/2-4, 72, 72), IDA_FORMAT_BITMAP, *pBitmap, pPressedBitmap, null); + pItem->SetElementSelectionEnabled(IDA_FORMAT_BITMAP, true); + delete pBitmap; + delete pPressedBitmap; + } + } + return pItem; + + CATCH: + delete pItem; + pItem = null; + return NULL; +} + +bool +EditBookmarkListForm::DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth) +{ + delete pItem; + pItem = null; + return true; +} + +int +EditBookmarkListForm::GetItemCount(void) +{ + int count = 0; + result r = E_SUCCESS; + + BookmarkPresentationModel::GetInstance()->GetFolderBookmarkCount(__parentID, count); + + if (__pData != NULL) + { + __pData->RemoveAll(true); + delete __pData; + __pData = NULL ; + + } + __pData = new(std::nothrow) ArrayList(); + + if (__pData == null) + { + return 0; + } + + r = __pData->Construct(); + + TryCatch( r == E_SUCCESS,,"EditBookmarkListForm::GetItemCount __pData->Construct() failed %s",GetErrorMessage(r)); + + BookmarkPresentationModel::GetInstance()->GetFoldersBookmarks(__parentID, 0, count, *__pData); + + + if ( count == 0) + { + if(__pCheckButton != null) + { + __pCheckButton->SetShowState(false); + } + if(__pInfoPanel != null) + { + __pInfoPanel->SetShowState(false); + } + __pListview->SetBounds(__pListview->GetX(), 0, __pListview->GetWidth(), GetClientAreaBounds().height); + + } + else + { + if(__pCheckButton != null) + { + __pCheckButton->SetShowState(true); + } + if(__pInfoPanel != null) + { + __pInfoPanel->SetShowState(true); + } + if(__pCheckButton != null && __pInfoPanel != null) + __pListview->SetBounds(__pListview->GetX(), __pListview->GetY(), __pListview->GetWidth(), GetClientAreaBounds().height - __pCheckButton->GetHeight() - __pInfoPanel->GetHeight()); + + } + if(__pCheckButton != null) + { + __pCheckButton->Invalidate(true); + } + if(__pInfoPanel != null) + { + __pInfoPanel->Invalidate(false); + } + + return count; + + CATCH: + __pData->RemoveAll(true); + delete __pData; + __pData = null; + return 0; +} + +void +EditBookmarkListForm::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus status) +{ + +} + +void +EditBookmarkListForm::OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback) +{ + +} + +void +EditBookmarkListForm::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status) +{ + String labelString; + __selectedItemCount = 0; + result r = E_SUCCESS; + + switch (elementId) + { + case IDA_FORMAT_BITMAP: + { + ArrayList* pArgList = null; + SceneManager* pSceneManager = SceneManager::GetInstance(); + BookmarkData* pBookMark = dynamic_cast< BookmarkData* >(__pData->GetAt(index)); + + if(pBookMark == NULL) + { + return; + } + + if (pBookMark->GetBookmarkType() == BOOKMARK_TYPE_FOLDER) + { + pArgList = new(std::nothrow) ArrayList(); + + if (pArgList != null) + { + pArgList->Construct(); + pArgList->Add(*new(std::nothrow) BookmarkData(*pBookMark)); + if ( pSceneManager != null) + { + result r = pSceneManager->GoForward(ForwardSceneTransition(IDSCN_CREATE_BOOKMARK_FOLDER, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList); + } + + if (pArgList != null) + { + pArgList->RemoveAll(false); + delete pArgList; + pArgList = null; + } + if(IsFailed(r)) + { + AppLogDebug("BookmarkListForm::CreateItem Construct failed %s",GetErrorMessage(r)); + return; + } + } + } + else + { + pArgList = new(std::nothrow) ArrayList(); + + if (pArgList != null) + { + pArgList->Construct(); + pArgList->Add(*new(std::nothrow) String(L"1")); + pArgList->Add(*new(std::nothrow) BookmarkData(*pBookMark)); + if ( pSceneManager != null) + { + result r = pSceneManager->GoForward(ForwardSceneTransition(IDSCN_ADD_BOOKMARK, SCENE_TRANSITION_ANIMATION_TYPE_NONE), pArgList); + } + if (pArgList != null) + { + pArgList->RemoveAll(false); + delete pArgList; + pArgList = null; + } + if(IsFailed(r)) + { + AppLogDebug("BookmarkListForm::CreateItem Construct failed %s",GetErrorMessage(r)); + return; + } + } + } + } + break; + + default: + { + int count = 0; + bool flag = false; + BookmarkData* pBookMark = dynamic_cast< BookmarkData* >(__pData->GetAt(index)); + + + if(pBookMark == NULL) + { + return; + } + String *pBookmarkId = new(std::nothrow) String(); + if(pBookMark->GetBookmarkType() == BOOKMARK_TYPE_FOLDER) + { + pBookmarkId->Append("F"); + } + else + { + pBookmarkId->Append("U"); + } + pBookmarkId->Append(pBookMark->GetBookmarkId()); + + if (__pListview->IsItemChecked(index) == false) + { + __pSelectedList->Remove(*pBookmarkId); + } + else + { + __pSelectedList->Add(pBookmarkId); + } + + + int itemCount = __pListview->GetItemCount(); + for (int count = 0;count < itemCount ; count++) + { + if (__pListview->IsItemChecked(count)) + { + __selectedItemCount++; + } + } + + //labelString.Append(__selectedItemCount); + /*labelString.Append(CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED")); + labelString.Append(L"\x200E"); // LEFT-TO-RIGHT MARK + labelString.Append(L"("); + labelString.Append(__selectedItemCount); + labelString.Append(L")");*/ + + if(__selectedItemCount >1) + { + labelString.Format(25, CommonUtil::GetString(L"IDS_BR_POP_PD_ITEMS_SELECTED").GetPointer() , __selectedItemCount); + } + else + { + labelString.Format(25, CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED").GetPointer() , __selectedItemCount); + } + + __pInfoLabel->SetText(labelString); + __pInfoPanel->Draw(); + __pInfoPanel->Show(); + BookmarkPresentationModel::GetInstance()->GetFolderBookmarkCount(__parentID,count); + if (__selectedItemCount == count) + { + __pCheckButton->SetSelected(true); + } + else + { + __pCheckButton->SetSelected(false); + } + + itemCount = __pListview->GetItemCount(); + for (int count = 0;count < itemCount ;count++) + { + if (__pListview->IsItemChecked(count)) + { + flag = true; + break; + } + } + + if (flag == true) + { + GetFooter()->SetItemEnabled(0,true); + } + else + { + GetFooter()->SetItemEnabled(0,false); + } + + GetFooter()->Invalidate(true); + + } + break; + } +} + +void +EditBookmarkListForm::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction) +{ + +} + +void +EditBookmarkListForm::OnFastScrollIndexSelected(Tizen::Ui::Control& source, Tizen::Base::String& index) +{ + +} +void +EditBookmarkListForm::OnListViewItemReordered(Tizen::Ui::Controls::ListView& listView, int indexFrom, int indexTo) +{ + +} + +void +EditBookmarkListForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs) +{ + result r = E_FAILURE; + String labelString ; + int count = 0; + BookmarkData* pBookMark = null; + + if (pArgs != null) + { + __parentID.Clear(); + String* pStr = dynamic_cast(pArgs->GetAt(0)); + if(pStr == null) + { + return; + } + __parentID.Append(pStr->GetPointer()); + } + + __selectedItemCount = 0; + + + __pListview->UpdateList(); + + count = __pListview->GetItemCount(); + if(count == 0) + { + __pTimer->Start(1000); + } + + for(int index = 0 ; index < count ; index++) + { + pBookMark = dynamic_cast< BookmarkData* >(__pData->GetAt(index)); + + if(pBookMark == NULL) + { + return; + } + String *pBookmarkId = new(std::nothrow) String(); + if(pBookMark->GetBookmarkType() == BOOKMARK_TYPE_FOLDER) + { + pBookmarkId->Append("F"); + } + else + { + pBookmarkId->Append("U"); + } + pBookmarkId->Append(pBookMark->GetBookmarkId()); + + if(__pSelectedList->Contains(*pBookmarkId)) + { + __pListview->SetItemChecked(index,true); + __selectedItemCount++; + } + else + { + __pListview->SetItemChecked(index,false); + } + if (pBookmarkId) + { + delete pBookmarkId; + pBookmarkId = null; + } + } + + //if(previousSceneId == IDSCN_ADD_BOOKMARK) + // return; + + if(__selectedItemCount >1) + { + labelString.Format(25, CommonUtil::GetString(L"IDS_BR_POP_PD_ITEMS_SELECTED").GetPointer() , __selectedItemCount); + } + else + { + labelString.Format(25, CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED").GetPointer() , __selectedItemCount); + } + + __pInfoLabel->SetText(labelString); + + + if(__selectedItemCount == 0) + { + GetFooter()->SetItemEnabled(0, false); + GetFooter()->Invalidate(true); + } + else + { + GetFooter()->SetItemEnabled(0, true); + GetFooter()->Invalidate(true); + } + if(__selectedItemCount < __pListview->GetItemCount()) + { + __pCheckButton->SetSelected(false); + } + else + { + __pCheckButton->SetSelected(true); + } + + Invalidate(true); +} + +void +EditBookmarkListForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + +} + +void +EditBookmarkListForm::OnFormBackRequested(Form& source) +{ + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if ( __pTimer != NULL) + { + __pTimer->Cancel(); + delete __pTimer; + } + + if (pSceneManager != null) + { + //pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_BOOKMARK_VIEW, SCENE_TRANSITION_ANIMATION_TYPE_RIGHT)); + result r = pSceneManager->GoBackward(BackwardSceneTransition()); + if(IsFailed(r)) + { + AppLogDebug("BookmarkListForm::CreateItem Construct failed %s",GetErrorMessage(r)); + return; + } + + } + GetFooter()->Invalidate(true); +} + + +void EditBookmarkListForm::OnOrientationChanged(const Tizen::Ui::Control &source, Tizen::Ui::OrientationStatus orientationStatus) +{ + int itemCount = 0; + ArrayList* pCheckedItems = NULL ; + + if(__pNotification) + __pNotification->SetShowState(false); + + if (__pListview != null) + { + AppLog("the list Y axis is %d", __pListview->GetY()); + pCheckedItems = new(std::nothrow) ArrayList(); + pCheckedItems->Construct(); + if ( __pListview->GetItemCount() == 0) + { + __pCheckButton->SetShowState(false); + __pInfoPanel->SetShowState(false); + __pListview->SetBounds(0, __pListview->GetY(), GetClientAreaBounds().width, GetClientAreaBounds().height -__pListview->GetY()); + + } + else + { + AppLog("EditBookmarkListForm::OnOrientationChanged 1"); + __pCheckButton->SetShowState(true); + __pInfoPanel->SetShowState(true); + __pListview->SetBounds(__pListview->GetX(), __pListview->GetY(), __pListview->GetWidth(), GetClientAreaBounds().height - __pCheckButton->GetHeight() - __pInfoPanel->GetHeight()); + __pInfoLabel->SetBounds(__pInfoLabel->GetX(),__pInfoLabel->GetY(), GetClientAreaBounds().width,__pInfoLabel->GetHeight()); + __pInfoLabel->Invalidate(true); + } + __pCheckButton->Invalidate(true); + + itemCount = __pListview->GetItemCount(); + + for (int count = 0;count < itemCount ; count++) + { + + if (__pListview->IsItemChecked(count)) + { + pCheckedItems->Add(* new Integer(count)); + } + } + +// __pListview->UpdateList(); + + for (int count = 0;count < itemCount ;count++) + { + if (pCheckedItems->Contains(* new Integer(count)) == true) + { + __pListview->SetItemChecked(count, true); + } + } + if ( pCheckedItems != NULL ) + { + pCheckedItems->RemoveAll(true); + delete pCheckedItems; + } + Invalidate(true); + } +} + +void +EditBookmarkListForm::OnTimerExpired(Timer& timer) +{ + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if ( pSceneManager != NULL) + { + result r = pSceneManager->GoBackward(BackwardSceneTransition()); + if(IsFailed(r)) + { + AppLogDebug("EditBookmarkListForm::OnTimerExpired GoBackward failed %s",GetErrorMessage(r)); + } + } +} + +void +EditBookmarkListForm::OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs) +{ + AppLog("receiving userevent for appcontrol %d",requestId); + if (requestId == APPCONTROL_LAUNCH_MAX_LIMIT_REACHED) + { + AppLog("receiving userevent for appcontrol %d ",requestId); + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + } +} diff --git a/src/IntEditHistoryListForm.cpp b/src/IntEditHistoryListForm.cpp new file mode 100644 index 0000000..6e24801 --- /dev/null +++ b/src/IntEditHistoryListForm.cpp @@ -0,0 +1,1274 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntEditHistoryListForm + *@brief: This class defines EditHistoryListForm used to edit the history scene + * + */ + +#include +#include +#include "IntCommonLib.h" +#include "IntEditHistoryListForm.h" +#include "IntFaviconManager.h" +#include "IntHistoryPresentationModel.h" +#include "IntSceneRegister.h" +#include "IntTypes.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Locales; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; +using namespace Tizen::System; + +const int EditHistoryListForm::IDA_TABBAR_ITEM_1 = 101; +const int EditHistoryListForm::IDA_TABBAR_ITEM_2 = 102; +const int EditHistoryListForm::IDA_BUTTON_NEXT_FORM = 103; +const int EditHistoryListForm::IDA_FORMAT_ICON = 104; +const int EditHistoryListForm::IDA_FORMAT_TITLE = 105; +const int EditHistoryListForm::IDA_FORMAT_URL = 106; +const int EditHistoryListForm::IDA_SELECT_ALL_CHECKED = 107; +const int EditHistoryListForm::IDA_SELECT_ALL_UNCHECKED = 108; +const int EditHistoryListForm::IDA_DELETE_HISTORY = 109; +const int EditHistoryListForm::IDA_CANCEL = 110; + + +EditHistoryListForm::EditHistoryListForm(void) +:__pListView(null) +,__pGroupData(null) +,__pTimer(null) +,__pSelectAllCheck(null) +,__pSelectedLabel(null) +,__selectedCount(0) +,__isNoHistoryPresent(true) +,__fontSize(44) +,__pConfirmationPopup(null) +,__pNotification(null) +{ +} + +EditHistoryListForm::~EditHistoryListForm(void) +{ + AppLog("EditHistoryListForm::~EditHistoryListForm called"); + + if (__pGroupData != null) + { + AppLog("removing __pGroupData"); + __pGroupData->RemoveAll(false); + delete __pGroupData; + } +} + +bool +EditHistoryListForm::Initialize(void) +{ + Construct(L"IDL_EDIT_HISTORY_LIST"); + + return true; +} + +result +EditHistoryListForm::OnInitializing(void) +{ + result r = E_SUCCESS; + + SetFormBackEventListener(this); + + AppLogDebug("EditHistoryListForm::OnInitializing"); +// SetFormStyle(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_HEADER | FORM_STYLE_FOOTER); + + __fontSize = CommonUtil::GetFontSize(); + + Header* pHeader = GetHeader(); + + if (pHeader == NULL) + { + return E_FAILURE; + } + + pHeader->SetTitleText(CommonUtil::GetString("IDS_BR_SK_DELETE_ABB")); + + GetFooter()->AddActionEventListener(*this); + AddOrientationEventListener(*this); + + SceneManager::GetInstance()->AddSceneEventListener(IDSCN_EDIT_HISTORY_LIST, *this); + __pSelectedLabel = static_cast< Label* >(GetControl(L"IDC_LABEL1")); + + if (__pSelectedLabel == null) + { + return E_FAILURE; + } + String selectedText; + //selectedText.Append(L"\x200E"); // LEFT-TO-RIGHT MARK + //selectedText.Append(L"(0)"); + selectedText.Format(25, CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED").GetPointer() , 0); + + __pSelectedLabel->SetText(selectedText); + + __pSelectAllCheck = static_cast< CheckButton* >(GetControl(L"IDC_SELECT_ALL",true)); + + if (__pSelectAllCheck != null) + { + __pSelectAllCheck->SetActionId(IDA_SELECT_ALL_CHECKED, IDA_SELECT_ALL_UNCHECKED); + __pSelectAllCheck->AddActionEventListener(*this); + } + else + { + return E_FAILURE; + } + + __pListView = static_cast< GroupedListView* >(GetControl(L"IDC_GROUPEDLISTVIEW1")); + if( __pListView != NULL) + { + __pListView->SetItemProvider(*this); + __pListView->AddGroupedListViewItemEventListener(*this); + } + else + { + return E_FAILURE; + } + + __pTimer = new (std::nothrow) Timer(); + r = __pTimer->Construct(*this); + + return r; +} + +result +EditHistoryListForm::OnTerminating(void) +{ + result r = E_SUCCESS; + + return r; +} + +void +EditHistoryListForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId) +{ + String selectedText; + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager == null) + { + return; + } + + switch (actionId) + { + case IDA_TABBAR_ITEM_1: + { + result r = pSceneManager->GoBackward(BackwardSceneTransition()); + if (IsFailed(r)) + { + AppLogDebug("EditHistoryListForm::OnActionPerformed Failed to GoBackward %s",GetErrorMessage(r)); + return; + } + } + + break; + case IDA_SELECT_ALL_CHECKED: + { + int selectedCount = 0; + for (int groupIndex = 0 ; __pGroupData != null && groupIndex < __pGroupData->GetCount() ; groupIndex ++) + { + GroupItemClass* pGClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + if(pGClass == null) + { + continue; + } + for (int itemIndex = 0 ; itemIndex < pGClass->__pData->GetCount() ; itemIndex ++) + { + selectedCount++; + __pListView->SetItemChecked(groupIndex,itemIndex,true); + } + } + /*selectedText.Append(L"\x200E"); // LEFT-TO-RIGHT MARK + selectedText.Append(L"("); + selectedText.Append(selectedCount); + selectedText.Append(L")");*/ + + if (selectedCount >1) + { + selectedText.Format(25, CommonUtil::GetString(L"IDS_BR_POP_PD_ITEMS_SELECTED").GetPointer() , selectedCount); + } + else + { + selectedText.Format(25, CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED").GetPointer() , selectedCount); + } + + __selectedCount = selectedCount; + + __pSelectedLabel->SetText(selectedText); + __pSelectedLabel->Invalidate(true); + + if(__selectedCount > 0) + { + GetFooter()->SetItemEnabled(1, true); + GetFooter()->Invalidate(true); + } + + __pListView->Invalidate(true); + + } + break; + case IDA_SELECT_ALL_UNCHECKED: + { + for (int groupIndex = 0 ; __pGroupData != null && groupIndex < __pGroupData->GetCount() ; groupIndex ++) + { + GroupItemClass* pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + if(pGroupItemClass == null) + { + continue; + } + for (int itemIndex = 0 ; itemIndex < pGroupItemClass->__pData->GetCount() ; itemIndex ++) + { + __pListView->SetItemChecked(groupIndex,itemIndex,false); + } + } + //selectedText.Append(L"\x200E"); // LEFT-TO-RIGHT MARK + //selectedText.Append(L"(0)"); + selectedText.Format(25, CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED").GetPointer() , 0); + + __pSelectedLabel->SetText(selectedText); + __selectedCount = 0; + __pSelectedLabel->Invalidate(true); + + GetFooter()->SetItemEnabled(1, false); + GetFooter()->Invalidate(true); + + __pListView->Invalidate(true); + } + break; + case IDA_DELETE_HISTORY: + if(__pConfirmationPopup) + { + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + + if (!__pConfirmationPopup) + { + String closeWarning = CommonUtil::GetString(L"IDS_BR_SK3_DELETE"); + __pConfirmationPopup = new(std::nothrow) ConfirmationPopup(); + __pConfirmationPopup->Initialize(); + + __pConfirmationPopup->RemoveActionListener(*this); + __pConfirmationPopup->AddActionListener(*this); + __pConfirmationPopup->setMessage(closeWarning); + __pConfirmationPopup->Show(); + } + break; + case IDA_BUTTON_NO: + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + break; + case IDA_BUTTON_YES: + { + ArrayList* pArrayList = new(std::nothrow) ArrayList(); + int itemCount = 0; + int count = 0; + int groupCount = 0; + int counter = 0; + pArrayList->Construct(); + for (int groupIndex = 0 ; __pGroupData != null && groupIndex < __pGroupData->GetCount() ; groupIndex ++) + { + GroupItemClass* pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + + if (pGroupItemClass == null || pGroupItemClass->__pData == null) + { + AppLogDebug(" pGroupItemClass || __pData is null"); + continue; + } + itemCount = pGroupItemClass->__pData->GetCount(); + for (int itemIndex = 0 ; itemIndex < itemCount ; itemIndex++) + { + bool ret = __pListView->IsItemChecked(groupIndex,itemIndex); + if (ret == false) + { + continue; + } + AppLog("deleting history for groupId %d, item %d",groupIndex,itemIndex); + int hisId = -1; + History* pHistory = dynamic_cast< History* >(pGroupItemClass->__pData->GetAt(itemIndex)); + if(pHistory == null) + { + continue; + } + pArrayList->Add(*new(std::nothrow) String(pHistory->GetHistoryId())); + + } + } + + HistoryPresentationModel::GetInstance()->DeleteMultipleHistory(pArrayList); + + if (pArrayList != null) + { + pArrayList->RemoveAll(true); + delete pArrayList; + } + + if(__pGroupData != null) + { + groupCount = __pGroupData->GetCount(); + + for(int groupIndex = 0 ; groupIndex < groupCount ; groupIndex ++ ) + { + counter = __pListView->GetItemCountAt(groupIndex); + + for(int index = 0 ; index < counter ; index++) + { + if(__pListView->IsItemChecked( groupIndex,index ) == true) + { + __pListView->SetItemChecked(groupIndex,index,false); + } + } + } + } + + __pSelectAllCheck->SetSelected(false); + + GetFooter()->SetItemEnabled(1,false); + GetFooter()->Invalidate(true); + //selectedText.Append(L"\x200E"); // LEFT-TO-RIGHT MARK + // selectedText.Append(L"(0)"); + selectedText.Format(25, CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED").GetPointer() , 0); + __pSelectedLabel->SetText(selectedText); + __selectedCount = 0; + __pSelectedLabel->Invalidate(true); + if (__pListView != null) + { + __pListView->UpdateList(); + } + + __pNotification = new (std::nothrow) NotificationPanel(*this); + String notification = CommonUtil::GetString(L"IDS_BR_POP_DELETED"); + __pNotification->SetText(notification); + __pNotification->ShowNotification(); + if(__pConfirmationPopup) + { + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + + } + break; + case IDA_CANCEL: + { + if( __pTimer != NULL) + { + __pTimer->Cancel(); + } + result r = pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_HISTORY_LIST, SCENE_TRANSITION_ANIMATION_TYPE_RIGHT)); + if (IsFailed(r)) + { + AppLogDebug("EditHistoryListForm::OnActionPerformed Failed to GoBackward %s",GetErrorMessage(r)); + return; + } + } + break; + + default: + break; + } +} + +void +EditHistoryListForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source) +{ + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager == null) + { + return; + } + + if( __pTimer != NULL) + { + __pTimer->Cancel(); + } + result r = pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_HISTORY_LIST, SCENE_TRANSITION_ANIMATION_TYPE_RIGHT)); + if (IsFailed(r)) + { + AppLogDebug("EditHistoryListForm::OnFormBackRequested Failed to GoBackward %s",GetErrorMessage(r)); + return; + } +} + +GroupItem* +EditHistoryListForm::CreateGroupItem(int groupIndex, int itemWidth) +{ + AppLogDebug("EditHistoryListForm::CreateGroupItem"); + result r = E_FAILURE; + + int strMonth = 0; + String text; + GroupItem* pItem = null; + int count = 0; + + GroupItemClass* pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + if(pGroupItemClass == null) + return null; + pItem = new(std::nothrow) GroupItem(); + + if (pItem == null) + { + return null; + } + + if ( pGroupItemClass->__pData == null || pGroupItemClass->__pData->GetCount() == 0) + { + r = pItem->Construct(Dimension(itemWidth, 0)); + __pListView->SetItemEnabled(groupIndex, -1, false); + } + else + { + r = pItem->Construct(Dimension(itemWidth, 48)); + } + + text = pGroupItemClass->__titleText; + text.Append(L" ("); + + int dayOfWeek = 0 ; + if (pGroupItemClass->__titleText == CommonUtil::GetString(L"IDS_COM_BODY_TODAY") || pGroupItemClass->__titleText == CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY")) + { + Calendar* pGregorianCalendar = Calendar::CreateInstanceN(CALENDAR_GREGORIAN); + if (pGregorianCalendar != NULL) + { + pGregorianCalendar->SetTimeField(TIME_FIELD_YEAR, pGroupItemClass->__startTime.GetYear()); + pGregorianCalendar->SetTimeField(TIME_FIELD_MONTH, pGroupItemClass->__startTime.GetMonth()); + pGregorianCalendar->SetTimeField(TIME_FIELD_DAY_OF_MONTH, pGroupItemClass->__startTime.GetDay()); + dayOfWeek = pGregorianCalendar->GetTimeField(TIME_FIELD_DAY_OF_WEEK); + + if (pGregorianCalendar != NULL) + { + delete pGregorianCalendar; + } + } + } + switch(dayOfWeek) + { + case 1: + r = text.Append(CommonUtil::GetString(L"IDS_COM_BODY_SUN")); + AppLog("dayOfWeek Append Result %s",GetErrorMessage(r)); + text.Append(L", "); + break; + case 2: + r = text.Append(CommonUtil::GetString(L"IDS_COM_BODY_MON")); + AppLog("dayOfWeek Append Result %s",GetErrorMessage(r)); + text.Append(L", "); + break; + case 3: + r = text.Append(CommonUtil::GetString(L"IDS_COM_BODY_TUE")); + AppLog("dayOfWeek Append Result %s",GetErrorMessage(r)); + text.Append(L", "); + break; + case 4: + r = text.Append(CommonUtil::GetString(L"IDS_COM_BODY_WED")); + AppLog("dayOfWeek Append Result %s",GetErrorMessage(r)); + text.Append(L", "); + break; + case 5: + AppLog("dayOfWeek Append Result yoyo"); + r = text.Append(CommonUtil::GetString(L"IDS_COM_BODY_THU")); + AppLog("dayOfWeek Append Result %s",GetErrorMessage(r)); + text.Append(L", "); + break; + case 6: + text.Append(CommonUtil::GetString(L"IDS_COM_BODY_FRI")); + text.Append(L", "); + break; + case 7: + text.Append(CommonUtil::GetString(L"IDS_COM_BODY_SAT")); + text.Append(L", "); + break; + default: + break; + } + + + String month = L""; + + if (pGroupItemClass->__titleText != L"Older") + { + text.Append(pGroupItemClass->__startTime.GetDay()); + text.Append(L" "); + strMonth = pGroupItemClass->__startTime.GetMonth(); + month = GetMonth(strMonth); + text.Append(month); + } + else + { + text.Append(L"~ "); + } + + if (pGroupItemClass->__titleText == L"Last week" || pGroupItemClass->__titleText == L"Two weeks ago" || pGroupItemClass->__titleText == L"Three weeks ago" || pGroupItemClass->__titleText == L"Four weeks ago" || pGroupItemClass->__titleText == L"Last month" || pGroupItemClass->__titleText == L"Older") + { + text.Append(L" - "); + text.Append(pGroupItemClass->__endTime.GetDay()); + text.Append(L" "); + strMonth = pGroupItemClass->__endTime.GetMonth(); + month = GetMonth(strMonth); + text.Append(month); + } + + text.Append(L")"); + AppLogDebug("startTime day = %d month = %d year = %d",pGroupItemClass->__startTime.GetDay(),pGroupItemClass->__startTime.GetMonth(),pGroupItemClass->__startTime.GetYear()); + + pItem->SetElement(text, null); + pItem->SetTextSize(32); + + return pItem; +} + +ListItemBase* +EditHistoryListForm::CreateItem(int groupIndex, int itemIndex, int itemWidth) +{ + AppLogDebug("EditHistoryListForm::CreateItem groupIndex %d, itemIndex %d",groupIndex,itemIndex); + result r = E_FAILURE; + const int bookmarkBtnWidth = 64; + String bitmapId; + if (__pGroupData == null) + { + return null; + } + + CustomItem* pItem = new(std::nothrow) CustomItem(); + if ( pItem == NULL) + { + return null ; + } + GroupItemClass* pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + + if (pGroupItemClass == null) + { + delete pItem; + return null; + } + + History* pHistory = dynamic_cast< History* >(pGroupItemClass->__pData->GetAt(itemIndex)); + if ( pHistory == NULL ) + { + delete pItem; + return null; + } + Bitmap* pBitmap = null; + + r = pItem->Construct(Tizen::Graphics::Dimension(itemWidth, 128 + (__fontSize - 44)), LIST_ANNEX_STYLE_MARK); + + + + pBitmap = pHistory->GetFavIconBitmap(); + if (pBitmap == null) + { + pBitmap = FaviconManager::GetInstance()->GetDefaultFaviconN(); + } + + if (pBitmap != null) + { + pItem->AddElement(Rectangle(16, 26 + (__fontSize - 44)/2, 60, 60), IDA_FORMAT_ICON, *pBitmap, null); + delete pBitmap; + } + r = pItem->AddElement(Rectangle(92, 4, GetClientAreaBounds().width - 96 - 32 -64 -32, 60 + (__fontSize - 44)), IDA_FORMAT_TITLE, pHistory->GetHistoryTitle(), __fontSize,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,true); + if (IsFailed(r)) + { + delete pItem; + AppLogException("CreateItem failed with %s", GetErrorMessage(r)); + return null; + } + + pItem->AddElement(Rectangle(92, 68 + (__fontSize - 44), GetClientAreaBounds().width - 108 - 32 - bookmarkBtnWidth - 32, 52), IDA_FORMAT_URL, pHistory->GetHistoryUrl(),32,CUSTOM_COLOR_GREY,CUSTOM_COLOR_LISTVIEW_TEXT,CUSTOM_COLOR_LISTVIEW_TEXT,true); + + return pItem; +} + +bool +EditHistoryListForm::DeleteGroupItem(int groupIndex, GroupItem* pItem, int itemWidth) +{ + + AppLogDebug("EditHistoryListForm::DeleteGroupItem"); + + if (__pGroupData == null) + { + return false; + } + + delete pItem; + pItem = null; + + return true; + +} + +bool +EditHistoryListForm::DeleteItem(int groupIndex, int itemIndex, ListItemBase* pItem, int itemWidth) +{ + + if (__pGroupData == null) + { + return false; + } + + GroupItemClass* pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + if (pGroupItemClass == null) + { + return false; + } + + delete pItem; + pItem = null; + return true; +} + +int +EditHistoryListForm::GetGroupCount(void) +{ + result r = E_FAILURE; + AppLogDebug("EditHistoryListForm::GetGroupCount"); + + __isNoHistoryPresent = true; + + CreateGroupItems(); + + int count = 0; + //HistoryPresentationModel::GetInstance()->GetHistoryCount(count); + + DateTime startTime; + startTime.SetValue(0, 1, 1, 0, 0, 0); + DateTime endTime; + SystemTime::GetCurrentTime(endTime); + endTime.SetValue(endTime.GetYear(), endTime.GetMonth(), endTime.GetDay(), 23,59,59); + + r = HistoryPresentationModel::GetInstance()->GetHistoryCountWithTimeRange(startTime ,endTime, count); + + if(count == 0) + { + __isNoHistoryPresent = false; + AppLogDebug("the value of isNoHistoryPresent %d",__isNoHistoryPresent); + __pTimer->Start(1000); + __pSelectAllCheck->SetShowState(false); + __pSelectedLabel->SetShowState(false); + } + else + { + __isNoHistoryPresent = true; + __pSelectAllCheck->SetShowState(true); + __pSelectedLabel->SetShowState(true); + } + __pSelectAllCheck->Invalidate(true); + __pSelectedLabel->Invalidate(false); + GetFooter()->Invalidate(true); + + if (__pGroupData != null) + { + AppLogDebug("GetGroupCount returning %d",__pGroupData->GetCount()); + count = __pGroupData->GetCount(); + } + else + { + AppLogDebug("GetGroupCount returning 0"); + count = 0; + } + + return count; +} + +int +EditHistoryListForm::GetItemCount(int groupIndex) +{ + AppLogDebug("EditHistoryListForm::GetItemCount"); + result r = E_FAILURE; + int count = 0; + + if (__pGroupData == null) + { + AppLogDebug("EditHistoryListForm::GetItemCount returning 0"); + return 0; + } + + GroupItemClass* pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + + if (pGroupItemClass == null) + { + AppLogDebug("EditHistoryListForm::GetItemCount returning 0"); + return 0; + } + + + r = HistoryPresentationModel::GetInstance()->GetHistoryCountWithTimeRange(pGroupItemClass->__startTime,pGroupItemClass->__endTime,count); + + if ( r != E_SUCCESS) + { + AppLogDebug("EditHistoryListForm::GetItemCount returning 0"); + return 0; + } + + if (pGroupItemClass->__pData != null) + { + pGroupItemClass->__pData->RemoveAll(false); + delete pGroupItemClass->__pData; + } + pGroupItemClass->__pData = new(std::nothrow) Collection::ArrayList(); + pGroupItemClass->__pData->Construct(); + AppLog("Starttime %ls endtime %ls",pGroupItemClass->__startTime.ToString().GetPointer(),pGroupItemClass->__endTime.ToString().GetPointer()); + HistoryPresentationModel::GetInstance()->GetHistoryWithTimeRange(pGroupItemClass->__startTime,pGroupItemClass->__endTime, 0, count, *pGroupItemClass->__pData); + AppLogDebug("Count = %d ", count); + + if (__pGroupData == null) + { + AppLogDebug("EditHistoryListForm::GetItemCount returning 0"); + return 0; + } + + + + if (pGroupItemClass == null || pGroupItemClass->__pData == null) + { + AppLogDebug("EditHistoryListForm::GetItemCount returning 0"); + return 0; + } + else + { + AppLogDebug("EditHistoryListForm::GetItemCount returning %d for %d title %ls",pGroupItemClass->__pData->GetCount(),groupIndex,pGroupItemClass->__titleText.GetPointer()); + return pGroupItemClass->__pData->GetCount(); + } +} + +void +EditHistoryListForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, + const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs) +{ + AppLogDebug("EditHistoryListForm::OnSceneActivatedN"); + int groupCount = 0; + int count = 0; + String selectedText = L""; + + if(__pGroupData != null) + { + groupCount = __pGroupData->GetCount(); + + for(int groupIndex = 0 ; groupIndex < groupCount ; groupIndex ++ ) + { + count = __pListView->GetItemCountAt(groupIndex); + + for(int index = 0 ; index < count ; index++) + { + if(__pListView->IsItemChecked( groupIndex,index ) == true) + { + __pListView->SetItemChecked(groupIndex,index,false); + } + } + } + } + if (__pListView != null) + { + __pListView->UpdateList(); + } + __pSelectAllCheck->SetSelected(false); + __selectedCount = 0; + selectedText.Format(25, CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED").GetPointer() , __selectedCount); + __pSelectedLabel->SetText(selectedText); + __pSelectedLabel->Invalidate(true); + GetFooter()->SetItemEnabled(1, false); + Invalidate(true); +} + +void +EditHistoryListForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, + const Tizen::Ui::Scenes::SceneId& nextSceneId) +{ + AppLogDebug("EditHistoryListForm::OnSceneDeactivated"); +} + +void +EditHistoryListForm::OnGroupedListViewContextItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListContextItemStatus status) +{ + +} + +void +EditHistoryListForm::OnGroupedListViewItemStateChanged(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, int elementId, Tizen::Ui::Controls::ListItemStatus status) +{ + AppLogDebug("EditHistoryListForm::OnGroupedListViewItemStateChanged entered"); + String selectedText; + bool flag = false; + + if (status == LIST_ITEM_STATUS_UNCHECKED) + { + __selectedCount--; + } + else + { + __selectedCount++; + } + + if (__selectedCount == 0) + { + GetFooter()->SetItemEnabled(1,false); + } + else + { + GetFooter()->SetItemEnabled(1,true); + } + GetFooter()->Invalidate(true); + + + if (__selectedCount >1) + { + selectedText.Format(25, CommonUtil::GetString(L"IDS_BR_POP_PD_ITEMS_SELECTED").GetPointer() , __selectedCount); + } + else + { + selectedText.Format(25, CommonUtil::GetString(L"IDS_BR_BODY_PD_ITEM_SELECTED").GetPointer() , __selectedCount); + } + + __pSelectedLabel->SetText(selectedText); + __pSelectedLabel->Invalidate(true); + + if (status == LIST_ITEM_STATUS_UNCHECKED) + { + __pSelectAllCheck->SetSelected(false); + } + else if (status == LIST_ITEM_STATUS_CHECKED && __pSelectAllCheck->IsSelected() == false && __pGroupData != null) + { + int itemCount = __pGroupData->GetCount(); + for (int groupIndex = 0 ; groupIndex < itemCount ; groupIndex ++) + { + GroupItemClass* pGClass = (dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex))); + if(pGClass == null) + { + continue; + } + for (int itemIndex = 0 ; itemIndex < pGClass->__pData->GetCount() ; itemIndex ++) + { + bool ret = __pListView->IsItemChecked(groupIndex,itemIndex); + + if (ret == false) + { + __pSelectAllCheck->SetSelected(false); + return; + } + } + } + __pSelectAllCheck->SetSelected(true); + } + +} + +void +EditHistoryListForm::OnGroupedListViewItemSwept(Tizen::Ui::Controls::GroupedListView& listView, int groupIndex, int itemIndex, Tizen::Ui::Controls::SweepDirection direction) +{ + +} + +String +EditHistoryListForm::GetMonth(int month) +{ + String monthValue; + switch (month) + { + case 1: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_JAN"));; + break; + case 2: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_FEB"));; + break; + case 3: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_MAR"));; + break; + case 4: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_APRIL"));; + break; + case 5: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_MAY"));; + break; + case 6: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_JUNE"));; + break; + case 7: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_JUL"));; + break; + case 8: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_AUG"));; + break; + case 9: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_SEP"));; + break; + case 10: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_OCT"));; + break; + case 11: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_NOV"));; + break; + case 12: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_DEC"));; + break; + default: + break; + } + + return monthValue; +} + +void +EditHistoryListForm::CreateGroupItems(void) +{ + AppLogDebug("EditHistoryListForm::createGroupItems entered"); + if (__pGroupData != null) + { + __pGroupData->RemoveAll(true); + delete __pGroupData; + __pGroupData = null; + } + + if (__pGroupData == null) + { + __pGroupData = new(std::nothrow) Collection::ArrayList(); + __pGroupData->Construct(); + } + + DateTime currentTime; + + HistoryPresentationModel::GetCurrentDateTime(currentTime); + GroupItemClass* pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_TODAY"); + pGroupItemClass->__endTime = currentTime; + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + __pGroupData->Add(*pGroupItemClass); + int dayOfWeek = 0; + Calendar* pGregorianCalendar = Calendar::CreateInstanceN(CALENDAR_GREGORIAN); + + if (pGregorianCalendar != NULL) + { + pGregorianCalendar->SetTimeField(TIME_FIELD_YEAR, currentTime.GetYear()); + pGregorianCalendar->SetTimeField(TIME_FIELD_MONTH, currentTime.GetMonth()); + pGregorianCalendar->SetTimeField(TIME_FIELD_DAY_OF_MONTH, currentTime.GetDay()); + dayOfWeek = pGregorianCalendar->GetTimeField(TIME_FIELD_DAY_OF_WEEK); + delete pGregorianCalendar; + } + + + switch(dayOfWeek) + { + case SUNDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 6 - 1); + __pGroupData->Add(*pGroupItemClass); + break; + + case MONDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 7 - 1); + __pGroupData->Add(*pGroupItemClass); + break; + + case TUESDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 1 - 1); + __pGroupData->Add(*pGroupItemClass); + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 8 - 1); + __pGroupData->Add(*pGroupItemClass); + break; + + case WEDNESDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 1 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_MON"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 2 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 9 - 1); + __pGroupData->Add(*pGroupItemClass); + break; + + case THURSDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 1 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_TUE"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 2 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_MON"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 3 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 3 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 10 - 1); + __pGroupData->Add(*pGroupItemClass); + break; + + case FRIDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 1 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_WED"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 2 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_TUE"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 3 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_MON"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 3 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 4 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 4 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 11 - 1); + __pGroupData->Add(*pGroupItemClass); + break; + + case SATURDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 1 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_THU"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 2 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_WED"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 3 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_TUE"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 3 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 4 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_COM_BODY_MON"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 4 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 5 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 5 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 12 - 1); + __pGroupData->Add(*pGroupItemClass); + break; + + default: + break; + } + int day = currentTime.GetDay(); + switch(day/7) + { + case 2: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = L"Two weeks ago"; + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 7 - dayOfWeek + 2 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 14 - dayOfWeek + 2 - 1); + __pGroupData->Add(*pGroupItemClass); + break; + + case 3: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = L"Two weeks ago"; + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 7 - dayOfWeek + 2 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 14 - dayOfWeek + 2 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = L"Three weeks ago"; + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 14 - dayOfWeek + 2 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 21 - dayOfWeek + 2 - 1); + __pGroupData->Add(*pGroupItemClass); + break; + + case 4: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = L"Two weeks ago"; + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 7 - dayOfWeek + 2 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 14 - dayOfWeek + 2 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = L"Three weeks ago"; + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 14 - dayOfWeek + 2 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__startTime.AddDays(currentTime.GetDay() - 21 - dayOfWeek + 2 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_BR_EARLIER_THIS_MONTH"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(currentTime.GetDay() - 21 - dayOfWeek + 2 - 1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + __pGroupData->Add(*pGroupItemClass); + break; + default: + break; + } + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_MONTH"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + pGroupItemClass->__endTime.AddDays(-1); + pGroupItemClass->__startTime.SetValue(currentTime.GetYear(), 1, 1); + pGroupItemClass->__startTime.AddMonths(currentTime.GetMonth() - 1 - 1); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + pGroupItemClass->__titleText = CommonUtil::GetString(L"IDS_BR_BODY_OLDER"); + pGroupItemClass->__endTime.SetValue(currentTime.GetYear(),1, 1); + pGroupItemClass->__endTime.AddMonths(currentTime.GetMonth() - 2); + pGroupItemClass->__endTime.AddDays(-1); + pGroupItemClass->__startTime.SetValue(0, 0, 0); + __pGroupData->Add(*pGroupItemClass); +} + +void EditHistoryListForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus) +{ + if (__pListView != null) + { + __pListView->UpdateList(); + } + + if(__pNotification) + __pNotification->SetShowState(false); +} + +void +EditHistoryListForm::OnTimerExpired(Timer& timer) +{ + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if ( pSceneManager != NULL) + { + pSceneManager->GoBackward(BackwardSceneTransition()); + } +} + +void +EditHistoryListForm::OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs) +{ + AppLog("receiving userevent for appcontrol %d",requestId); + if (requestId == APPCONTROL_LAUNCH_MAX_LIMIT_REACHED) + { + AppLog("receiving userevent for appcontrol %d ",requestId); + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + } +} diff --git a/src/IntEditHomePageForm.cpp b/src/IntEditHomePageForm.cpp new file mode 100644 index 0000000..3d528b3 --- /dev/null +++ b/src/IntEditHomePageForm.cpp @@ -0,0 +1,299 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet EditHomePageForm class +/*@file: EditHomePageForm.h + *@brief: Allow user to set any page as Home page. + * + */ + +#include +#include + +#include "IntBookmarkData.h" +#include "IntCommonLib.h" +#include "IntEditHomePageForm.h" +#include "IntMultipleWindowPresentationModel.h" +#include "IntSceneRegister.h" +#include "IntSettingPresentationModel.h" + + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Utility; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + +const int EditHomePageForm::IDA_BUTTON_DONE = 101; +const int EditHomePageForm::IDA_BUTTON_CANCEL = 102; + +EditHomePageForm::EditHomePageForm(void) +:__pUrlEditField(null) +, __pMsgBox(null) +, __modalMsgBoxResult(0) +{ + +} + +EditHomePageForm::~EditHomePageForm(void) +{ + +} + +bool +EditHomePageForm::Initialize(void) +{ + Construct(L"IDL_EDIT_HOME_PAGE"); + SetOrientation(ORIENTATION_AUTOMATIC); + return true; +} + +result +EditHomePageForm::OnInitializing(void) +{ + result r = E_SUCCESS; + SetFormBackEventListener(this); + SceneManager* pSceneManager = SceneManager::GetInstance(); + AppAssert(pSceneManager); + pSceneManager->AddSceneEventListener(IDSCN_EDIT_HOMEPAGE_VIEW, *this); + + GetHeader()->AddActionEventListener(*this); + + __pUrlEditField = static_cast(GetControl(L"IDC_EDITFIELD")); + if (__pUrlEditField != null) + { + __pUrlEditField->AddTextEventListener(*this); + __pUrlEditField->SetOverlayKeypadCommandButtonVisible(false); + AppLog("width of editfield edithomepage %d",__pUrlEditField->GetWidth()); + } + + return r; +} + +result +EditHomePageForm::OnTerminating(void) +{ + result r = E_SUCCESS; + return r; +} + +void +EditHomePageForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs) +{ + if (__pUrlEditField != null) + { + String favURL = SettingPresentationModel::GetInstance()->GetFavoriteUrl(); + AppLogDebug("EditHomePageForm::OnSceneActivatedN favURL %ls",favURL.GetPointer()); + __pUrlEditField->SetText(SettingPresentationModel::GetInstance()->GetFavoriteUrl()); + __pUrlEditField->SetFocus(); + __pUrlEditField->SetCursorPosition(__pUrlEditField->GetTextLength()); + __pUrlEditField->ShowKeypad(); + __pUrlEditField->Invalidate(true); + } + + Invalidate(true); + + return; +} + +void +EditHomePageForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + +} + +void +EditHomePageForm::OnFormBackRequested(Form& source) +{ + ArrayList* pArgList = null; + pArgList = new(std::nothrow) ArrayList(); + pArgList->Construct(); + pArgList->Add(*new(std::nothrow) String(CommonUtil::GetString(L"IDS_BR_SK_CANCEL"))); + SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(), pArgList); + +} + +void +EditHomePageForm::OnActionPerformed(const Control& source, int actionId) +{ + ArrayList* pArgList = null; + pArgList = new(std::nothrow) ArrayList(); + pArgList->Construct(); + switch(actionId) + { + case IDA_BUTTON_DONE: + { + pArgList->Add(*new(std::nothrow) String(CommonUtil::GetString(L"IDS_BR_SK_DONE"))); + String urlText = __pUrlEditField->GetText(); + urlText.Trim(); + AppLogDebug("set url text is %ls",urlText.GetPointer()); + + bool ret = false; + bool flag = false; + String firstPattern(L"((ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)");//[\w\d:#@%/;$()~_?\+-=\\\.&]* + String secondPattern(L"^[A-Za-z0-9\.\+-:#@%/;$~?]+\\.[A-Za-z0-9 !\+-=:#@%/;$~()_?\\\.&]{2,}$"); // URL of type abc.com (i.e without protocol in front of it) + RegularExpression firstRegex; + RegularExpression secondRegex; + + firstRegex.Construct(firstPattern, REGEX_CASELESS); + secondRegex.Construct(secondPattern, REGEX_CASELESS); + +// Uri uri; +// uri.SetUri(urlText); +// urlText = uri.GetEncodedString(); + + // Match + ret = firstRegex.Match(urlText, false); // This returns true value + flag = secondRegex.Match(urlText, false); // Checks whether URL typed is of type abc.com (i.e without protocol in front of it) + + + if (ret == true) + { + //valid Url + SettingPresentationModel::GetInstance()->SetHomepage(urlText); + SettingPresentationModel::GetInstance()->SetFavoriteValue(urlText); + result r = SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(), pArgList); + TryCatch(!IsFailed(r), "EditHomePageForm::OnActionPerformed Failed to GoBackward %s",GetErrorMessage(r)); + } + else + { + if (flag == true) + { + String validUrl; + if((urlText.Contains("http://") == true) || (urlText.Contains("https://") == true)) + { + validUrl.Append(urlText); + } + else + { + validUrl = L"http://"; + validUrl.Append(urlText); + } + + // save Url + SettingPresentationModel::GetInstance()->SetHomepage(validUrl); + SettingPresentationModel::GetInstance()->SetFavoriteValue(validUrl); + result r = SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(), pArgList); + TryCatch(!IsFailed(r), "EditHomePageForm::OnActionPerformed Failed to GoBackward %s",GetErrorMessage(r)); + } + else + { + // show pop up , not a valid URL + String msg = CommonUtil::GetString(L"IDS_COM_POP_INVALID_URL"); + CreateMessage(msg); + } + } + + break; + } + case IDA_BUTTON_CANCEL: + { + pArgList->Add(*new(std::nothrow) String(CommonUtil::GetString(L"IDS_BR_SK_CANCEL"))); + result r = SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(), pArgList); + TryCatch(!IsFailed(r), "EditHomePageForm::OnActionPerformed Failed to GoBackward %s",GetErrorMessage(r)); + break; + } + default: + break; + } + + CATCH: + pArgList->RemoveAll(true); + delete pArgList; + return; +} + +void +EditHomePageForm::OnTextValueChanged(const Control& source) +{ + String title ; + Header* pHeader = GetHeader(); + + if (pHeader == NULL) + { + return; + } + + if (__pUrlEditField == NULL) + { + return; + } + + title = __pUrlEditField->GetText(); + title.Trim(); + + // To disable done button when folder title edit-field is empty + if (__pUrlEditField && title.IsEmpty() == true) + { + pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, false); + } + else + { + pHeader->SetButtonEnabled(BUTTON_POSITION_RIGHT, true); + } + pHeader->Invalidate(true); + return; +} + +void +EditHomePageForm::OnTextValueChangeCanceled(const Control& source) +{ + return; +} + +void +EditHomePageForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus) +{ + return; +} + +void +EditHomePageForm::CreateMessage(String& message) +{ + + if (__pMsgBox != null) + { + delete __pMsgBox; + __pMsgBox = null; + __modalMsgBoxResult = 0; + } + + __pMsgBox = new(std::nothrow) MessageBox; + if (__pMsgBox != null) + { + __pMsgBox->Construct(L"", message, MSGBOX_STYLE_OK, 3000); + } + + if (__pMsgBox != null) + { + __pMsgBox->ShowAndWait(__modalMsgBoxResult); + if (__modalMsgBoxResult == MSGBOX_RESULT_OK) + { + if (__pMsgBox != null) + { + delete __pMsgBox; + __pMsgBox = null; + } + } + __modalMsgBoxResult = 0; + } + + return; +} diff --git a/src/IntFaviconManager.cpp b/src/IntFaviconManager.cpp new file mode 100644 index 0000000..b4104dc --- /dev/null +++ b/src/IntFaviconManager.cpp @@ -0,0 +1,332 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntFaviconManager.cpp + *@brief: Provides functionalities to handle/maintain Browser Favicon. + */ + +#include +#include "IntTypes.h" +#include "IntFaviconManager.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Utility; +using namespace Tizen::Graphics; +using namespace Tizen::Io; +using namespace Tizen::Media; + +const wchar_t* FAVICON_DATA_TABLE = L"FaviconData"; +static const wchar_t* IDB_ICON_DEFAULT_FAVICON = L"I01_icon_default_favicon.png"; +FaviconManager* FaviconManager::__pFaviconManagerInstance = null; + +Bitmap* FaviconManager::__pDefaultBitmap = null; + +FaviconManager::FaviconManager(void) +{ + +} + +FaviconManager::~FaviconManager(void) +{ + +} + +FaviconManager::FaviconManager(const FaviconManager& settingModelObj) +{ + +} + +FaviconManager& FaviconManager::operator=(const FaviconManager& settingModelObj) +{ + return *this; +} + +result +FaviconManager::Construct(void) +{ + result r = E_SUCCESS; + r = PresentationModelBase::Initialize(); + TryCatch( !IsFailed(r),,"FaviconManager::Initialize failed %s",GetErrorMessage(r)); + + CATCH: return r; +} + +void +FaviconManager::CreateInstance(void) +{ + if (__pFaviconManagerInstance == null) + __pFaviconManagerInstance = new(std::nothrow) FaviconManager(); + result r = __pFaviconManagerInstance->Construct(); + if (IsFailed(r)) + { + delete __pFaviconManagerInstance; + __pFaviconManagerInstance = null; + return; + } + std::atexit(DestroyInstance); +} + +void FaviconManager::DestroyInstance(void) +{ + if (__pFaviconManagerInstance) + { + __pFaviconManagerInstance->UnInitialize(); + delete __pFaviconManagerInstance; + __pFaviconManagerInstance = null; + } +} + + +FaviconManager* +FaviconManager::GetInstance(void) +{ + if (__pFaviconManagerInstance == null) + { + CreateInstance(); + } + return __pFaviconManagerInstance; + +} + + +String +FaviconManager::GenerateFileName(void) +{ + AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry(); + String keyCount("FileCount"); + String fileName = UiApp::GetInstance()->GetAppRootPath() + "data/favicons/"; + result r = E_SUCCESS; + int keyValue = 1; + if ( pAppRegistry == NULL ) + { + return NULL; + } + r = pAppRegistry->Get(keyCount, keyValue); + + if (r == E_KEY_NOT_FOUND) + { + keyValue = 1; + pAppRegistry->Add(keyCount, keyValue); + } + else + { + keyValue++; + pAppRegistry->Set(keyCount, keyValue); + } + + fileName.Append(keyValue); + pAppRegistry->Save(); + + return fileName; +} + +void +FaviconManager::SaveBitmapToFile(Bitmap& bitmap, String& filePath) +{ + + result r; + Image image; + + image.Construct(); + r = image.EncodeToFile(bitmap, Tizen::Media::IMG_FORMAT_PNG, filePath, true); + + TryCatch( !IsFailed(r),,"FaviconManager::SaveBitmapToFile %s",GetErrorMessage(r)); + + CATCH: return ; +} + +String +FaviconManager::SaveFavicon(Tizen::Graphics::Bitmap& bitmap, String& url) +{ + AppLogDebug("FaviconManager::SaveFavicon"); + + result r = E_FAILURE; + String faviconTable = FAVICON_DATA_TABLE; + String query; + String columnNames; + String attachment; + int resultCount = -1; + int length = -1; + DateTime dt; + int faviconID = -1; + String faviconId; + String filePath ; + bool nextRowPresent = false; + + columnNames.Append(L"URL, "); + columnNames.Append(L"FILE_PATH"); + + //strQuery.Append(L"SELECT FILE_PATH FROM strFaviconTable WHERE URL= 'strURL'"); + query.Clear(); + //strQuery.Format(MAX_DB_QUERY_SIZE, L"SELECT COUNT(ID) FROM %ls WHERE NOTEBOOK_ID = %ls", strTable.GetPointer(),notebookId.GetPointer()); + query.Append(L"SELECT ID, FILE_PATH FROM "); + query.Append(faviconTable); + query.Append(" WHERE URL LIKE "); + query.Append("'"); + query.Append(url); + query.Append("'"); + r = PresentationModelBase::ExecuteQuery(query, resultCount); + AppLogDebug("FaviconManager: nResultCount %d",resultCount); + + if (resultCount < 1) + { + filePath = GenerateFileName(); + if (url.EndsWith(L".gif")) + { + filePath.Append(L".gif"); + } + else if (url.EndsWith(L".ico")) + { + filePath.Append(L".ico"); + } + else if (url.EndsWith(L".png")) + { + filePath.Append(L".png"); + } + query.Clear(); + //@Append() is replaced with Format() for improving performance + //strQuery.Format(MAX_DB_QUERY_SIZE, L"INSERT INTO %ls(%ls) VALUES('%ls', '%ls', '%ls', %ls, '%ls', '%ls', %d, %d, '%ls')", strNoteTable.GetPointer(),strColumnNames.GetPointer(), note.GetNoteTitle().GetPointer(), notePlaintext.GetPointer(), noteEncodedHtml.GetPointer(), note.GetNotebookId().GetPointer(), dt.ToString().GetPointer(), dt.ToString().GetPointer(), note.IsFavorite(), note.IsLocked(), strAttachment.GetPointer()); + query.Append(L"INSERT INTO "); + query.Append(faviconTable); + query.Append("("); + query.Append(columnNames); + query.Append(") "); + query.Append("VALUES("); + query.Append("'"); + query.Append(url); + query.Append("'"); + query.Append(", "); + query.Append("'"); + query.Append(filePath); + query.Append("')"); + + r = PresentationModelBase::ExecuteQuery(query, resultCount); + TryCatch( r == E_SUCCESS,,"FaviconManager::SaveFavicon query failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::CommitDb(); + TryCatch( r == E_SUCCESS,,"FaviconManager::SaveFavicon CommitDb failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::GetLastInsertedId(faviconTable, faviconID); + TryCatch( r == E_SUCCESS,,"FaviconManager::SaveFavicon GetLastInsertedId failed %s",GetErrorMessage(r)); + + faviconId.Append(faviconID); + + if (faviconId.GetLength() < 0) + { + AppLogDebug("FaviconManager::length is less than 0"); + } + + } + else + { + r = PresentationModelBase::DbIsNextRowPresent(nextRowPresent); + TryCatch( r == E_SUCCESS,,"FaviconManager::SaveFavicon DbIsNextRowPresent failed %s",GetErrorMessage(r)); + + if (nextRowPresent == true) + { + r = PresentationModelBase::GetColumn(0, faviconID); + TryCatch( r == E_SUCCESS,,"FaviconManager::SaveFavicon GetColumn failed %s",GetErrorMessage(r)); + + faviconId.Append(faviconID); + + if (faviconId.GetLength() < 0) + { + AppLogDebug("FaviconManager::length is less than 0"); + } + r = PresentationModelBase::GetColumn(1, filePath); + TryCatch( r == E_SUCCESS,,"FaviconManager::SaveFavicon GetColumn failed %s",GetErrorMessage(r)); + } + + } + + SaveBitmapToFile(bitmap,filePath); + AppLogDebug("FaviconManager::SaveFavicon: %ls, %ls , %ls", url.GetPointer(),filePath.GetPointer(), faviconId.GetPointer()); + + CATCH: return faviconId; + } + +Bitmap* +FaviconManager::GetFaviconN(Tizen::Base::String& favicon_Id) +{ + int count = -1; + int length = -1; + String query; + String table = FAVICON_DATA_TABLE; + result r = E_FAILURE; + bool nextRowPresent = false; + String fileName ; + Image image; + Bitmap* pFaviconBitmap = null; + + image.Construct(); + + //query.Format(MAX_DB_QUERY_SIZE, L"SELECT * FROM %ls WHERE NOTEBOOK_ID = %ls", strTable.GetPointer(),notebookId.GetPointer()); + query.Append(L"SELECT FILE_PATH FROM "); + query.Append(table); + query.Append(L" WHERE ID= "); + query.Append("'"); + query.Append(favicon_Id); + query.Append("'"); + + r = PresentationModelBase::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"FaviconManager::GetFavicon ExecuteQuery failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::DbIsNextRowPresent(nextRowPresent); + TryCatch( r == E_SUCCESS,,"FaviconManager::GetFavicon DbIsNextRowPresent failed %s",GetErrorMessage(r)); + + if (nextRowPresent == true) + { + r = PresentationModelBase::GetColumn(0, fileName); + TryCatch( r == E_SUCCESS,,"FaviconManager::GetFavicon GetColumn failed %s",GetErrorMessage(r)); + + } + + if (fileName.EndsWith(L".gif")) + { + pFaviconBitmap = image.DecodeN(fileName, BITMAP_PIXEL_FORMAT_ARGB8888); + } + else if (fileName.EndsWith(L".ico")) + { + pFaviconBitmap = image.DecodeN(fileName, BITMAP_PIXEL_FORMAT_ARGB8888); + } + else if (fileName.EndsWith(L".png")) + { + pFaviconBitmap = image.DecodeN(fileName, BITMAP_PIXEL_FORMAT_R8G8B8A8); + } + + return pFaviconBitmap; + + CATCH: return null; +} + +Bitmap* +FaviconManager::GetDefaultFaviconN() +{ + AppResource* pAppResource = Application::GetInstance()->GetAppResource(); + + if ( pAppResource == NULL ) + { + return null; + } + + __pDefaultBitmap = pAppResource->GetBitmapN(IDB_ICON_DEFAULT_FAVICON); + return __pDefaultBitmap; +} + diff --git a/src/IntFontManager.cpp b/src/IntFontManager.cpp new file mode 100644 index 0000000..dfa6d5a --- /dev/null +++ b/src/IntFontManager.cpp @@ -0,0 +1,170 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntFontManager.cpp + *@brief: This header file contains the definitions of the FontManager class. + */ + +#include "IntFontManager.h" + +using namespace Tizen::Base; +using namespace Tizen::Graphics; + +FontTable fontTable[] = { + //FONT_GT34 + { + NULL, L"Global" /*L"GT_Latin"*/, FONT_STYLE_PLAIN, 34 + }, + //FONT_GT32 + { + NULL, L"Global" /*L"GT_Latin"*/, FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 32 + }, + //FONT_GT30 + { + NULL, L"Global" /*L"GT_Latin"*/, FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 30 + }, + //FONT_GT26 + { + NULL, L"Global" /*L"GT_Latin"*/, FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 26 + }, + //FONT_GT20 + { + NULL, L"Global" /*L"GT_Latin"*/, FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 20 + }, + //FONT_GT14 + { + NULL, L"Global" /*L"GT_Latin"*/, FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 14 + }, + + //FONT_GP40 + { + NULL, L"Global" /*L"GP_Latin"*/, FONT_STYLE_PLAIN, 40 + }, + //FONT_GP38 + { + NULL, L"Global" /*L"GP_Latin"*/, FONT_STYLE_PLAIN, 38 + }, + //FONT_GP36 + { + NULL, L"Global" /*L"GP_Latin"*/, FONT_STYLE_PLAIN, 36 + }, + //FONT_GP34 + { + NULL, L"Global" /*L"GP_Latin"*/, FONT_STYLE_PLAIN, 34 + }, + //FONT_GP30 + { + NULL, L"Global" /*L"GP_Latin"*/, FONT_STYLE_PLAIN, 30 + }, + //FONT_GP26 + { + NULL, L"Global" /*L"GP_Latin"*/, FONT_STYLE_PLAIN, 26 + }, + //FONT_GP24 + { + NULL, L"Global" /*L"GP_Latin"*/, FONT_STYLE_PLAIN, 24 + }, + //FONT_GP18 + { + NULL, L"Global" /*L"GP_Latin"*/, FONT_STYLE_PLAIN, 18 + }, + + //FONT_GS30 + { + NULL, L"Global" /*L"GS_Latin"*/, FONT_STYLE_PLAIN, 30 + }, + //FONT_GS34 + { + NULL, L"Global" /*L"GS_Latin"*/, FONT_STYLE_PLAIN, 34 + }, + + // end of font table ---------- + { + NULL, L"", FONT_STYLE_PLAIN, 0 + } +}; + +void +FontManager::CreateFont(FontId fontValue) +{ + Font* pFont = null; + if (fontValue < 0 || fontValue >= MAX_FONT) + { + return; + } + + if (fontTable[fontValue].pInstance) + { + return; + } + + if (fontTable[fontValue].fontName.GetLength() <= 0) + { + return; + } + + pFont = new(std::nothrow) Font(); + // If pFont is null then return + if (pFont == NULL) + { + return; + } + + pFont->Construct( /*g_FontTable[fontid].fontName,*/ + fontTable[fontValue].fontStyle, + fontTable[fontValue].fontSize); + + fontTable[fontValue].pInstance = pFont; + return; +} + +Font* +FontManager::GetFont(FontId fontValue) +{ + if (fontValue < 0 || fontValue >= MAX_FONT) + { + return NULL; + } + + //Check for the existence of fontValue in fontTable and if its not null then call CreateFont(fontValue) + + if (fontTable[fontValue].pInstance == null) + { + CreateFont(fontValue); + } + + return fontTable[fontValue].pInstance; + +} + +void +FontManager::ReleaseFonts(void) +{ + int maxCount = 0; + + for (maxCount = 0; maxCount < MAX_FONT; maxCount++) + { + //delete if instance exists in fontTable + if (fontTable[maxCount].pInstance) + { + delete fontTable[maxCount].pInstance; + fontTable[maxCount].pInstance = NULL; + } + } + return; +} diff --git a/src/IntFormFactory.cpp b/src/IntFormFactory.cpp new file mode 100644 index 0000000..436d95a --- /dev/null +++ b/src/IntFormFactory.cpp @@ -0,0 +1,320 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntFormFactory.cpp + *@brief: FormFactory class helps in creating appropriate forms with a specified form ID. + * It Should be derived from Tizen::Ui::Scenes::IFormFactory class + */ + +#include "IntAddBookmarkForm.h" +#include "IntArticleReaderForm.h" +#include "IntBookmarkListForm.h" +#include "IntBrightnessForm.h" +#include "IntCommonLib.h" +#include "IntCreateBookmarkFolderForm.h" +#include "IntEditBookmarkListForm.h" +#include "IntEditHistoryListForm.h" +#include "IntEditHomePageForm.h" +#include "IntHistoryListForm.h" +#include "IntMainForm.h" +#include "IntMultipleWindowForm.h" +#include "IntReaderFontSizeForm.h" +#include "IntFormFactory.h" +#include "IntSettingForm.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + +const wchar_t* IDL_FORM_MAIN_VIEW_SCENE = L"FormMainMenu"; +const wchar_t* IDL_FORM_BOOKMARK_LIST_SCENE = L"BooKmarkList"; +const wchar_t* IDL_FORM_HISTORY_LIST_SCENE = L"HistoryList"; +const wchar_t* IDL_FORM_EDIT_HISTORY_LIST_SCENE = L"EditHistoryList"; +const wchar_t* IDL_FORM_SETTINGS_CLEAR_PRIVATE_DATA_SCENE = L"SettingsClearPrivateData"; +const wchar_t* IDL_FORM_MULTIPLE_WINDOW_SCENE = L"MultipleWindow"; +const wchar_t* IDL_FORM_SETTINGS_SCENE = L"Settings"; +const wchar_t* IDL_FORM_ADD_BOOKMARK_SCENE = L"AddBookmark"; +const wchar_t* IDL_FORM_ARTICLE_READER_SCENE = L"ArticleReader"; +const wchar_t* IDL_FORM_EDIT_BOOKMARK_LIST_SCENE = L"EditBookmarkList"; +const wchar_t* IDL_FORM_FIND_WORD_SCENE = L"FindWord"; +const wchar_t* IDL_FORM_CREATE_BOOKMARK_FOLDER_SCENE = L"CreateBookmarkFolder"; +const wchar_t* IDL_FORM_FONT_SIZE_SCENE = L"FontSize"; +const wchar_t* IDL_FORM_EDIT_HOME_PAGE_SCENE = L"EditHomePage"; +const wchar_t* IDL_FORM_BRIGHTNESS_SCENE = L"Brightness"; + + +FormFactory::FormFactory(void) +{ + +} + +FormFactory::~FormFactory(void) +{ + +} + +Form* +FormFactory::CreateFormN(const String& formId, const SceneId& sceneId) +{ + AppLog("FormFactory createForm"); + + Tizen::Ui::Controls::Form* pNewForm = null; + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if ( pSceneManager == null) + { + return null; + } + + if (formId.Contains(IDL_FORM_MAIN_VIEW_SCENE) == true) + { + MainForm* pForm = new(std::nothrow) MainForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pSceneManager->AddSceneEventListener(sceneId, *pForm); + pNewForm = pForm; + } + else if (formId == IDL_FORM_BOOKMARK_LIST_SCENE) + { + BookmarkListForm* pForm = new(std::nothrow) BookmarkListForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + else if (formId == IDL_FORM_HISTORY_LIST_SCENE) + { + HistoryListForm* pForm = new(std::nothrow) HistoryListForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + else if (formId == IDL_FORM_EDIT_HISTORY_LIST_SCENE) + { + EditHistoryListForm* pForm = new(std::nothrow) EditHistoryListForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + + else if (formId == IDL_FORM_MULTIPLE_WINDOW_SCENE) + { + MultipleWindowForm* pForm = new(std::nothrow) MultipleWindowForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + else if (formId == IDL_FORM_SETTINGS_SCENE) + { + SettingForm* pForm = new(std::nothrow) SettingForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + else if (formId == IDL_FORM_ADD_BOOKMARK_SCENE) + { + AddBookmarkForm* pForm = new(std::nothrow) AddBookmarkForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + else if (formId == IDL_FORM_ARTICLE_READER_SCENE) + { + ArticleReaderForm* pForm = new(std::nothrow) ArticleReaderForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + else if (formId == IDL_FORM_EDIT_BOOKMARK_LIST_SCENE) + { + EditBookmarkListForm* pForm = new(std::nothrow) EditBookmarkListForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + + else if (formId == IDL_FORM_CREATE_BOOKMARK_FOLDER_SCENE) + { + CreateBookmarkFolderForm* pForm = new(std::nothrow) CreateBookmarkFolderForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + + else if (formId == IDL_FORM_FONT_SIZE_SCENE) + { + ReaderFontSizeForm* pForm = new(std::nothrow) ReaderFontSizeForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + else if (formId == IDL_FORM_EDIT_HOME_PAGE_SCENE) + { + EditHomePageForm* pForm = new(std::nothrow) EditHomePageForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + else if (formId == IDL_FORM_BRIGHTNESS_SCENE) + { + BrightnessForm* pForm = new(std::nothrow) BrightnessForm(); + if (pForm == null) + { + return null; + } + pForm->Initialize(); + pNewForm = pForm; + } + AppLogDebug("FormFactory createForm exit"); +// pSceneManager->AddSceneEventListener(sceneId, *this); + return pNewForm; +} + + +void +FormFactory::SetFontSize(Container& container, int font) +{ + IList* pControls = container.GetControls(); + if(pControls == null) + { + return; + } + for(int count = 0; count < pControls->GetCount(); count++) + { + //Check if the control is again an container + Container *pContainer = dynamic_cast(pControls->GetAt(count)); + if(pContainer != null) + { + SetFontSize(*pContainer, font); + } + else //Check if it is a button + { + Button *pButton = dynamic_cast(pControls->GetAt(count)); + if(pButton != null) + { + pButton->SetTextSize(font); + } + else //Check if a label + { + Label *pLabel = dynamic_cast(pControls->GetAt(count)); + if(pLabel != null) + { + pLabel->SetTextConfig(font, pLabel->GetTextStyle()); + } + else //Check if a EditField + { + EditField *pEditField = dynamic_cast(pControls->GetAt(count)); + if(pEditField != null) + { + pEditField->SetTextSize(font); + } + else //Check if a EditArea + { + EditArea *pEditArea = dynamic_cast(pControls->GetAt(count)); + if(pEditArea != null) + { + pEditArea->SetTextSize(font); + } + else //Check if a ExpandableEditArea + { + ExpandableEditArea *pExpandableEditArea = dynamic_cast(pControls->GetAt(count)); + if(pExpandableEditArea != null) + { + pExpandableEditArea->SetTextSize(font); + } + else //Check if a TextBox + { + TextBox *pTextBox = dynamic_cast(pControls->GetAt(count)); + if(pTextBox != null) + { + pTextBox->SetTextSize(font); + } + else //Check if a SearchBar + { + SearchBar *pSearchBar = dynamic_cast(pControls->GetAt(count)); + if(pSearchBar != null) + { + pSearchBar->SetSearchFieldTextSize(font); + } + else //Check if a List + { + + } + } + } + } + } + } + } + } + } +} + +void +FormFactory::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs) +{ + AppLog("FormFactory::OnSceneActivatedN"); + Form *pForm = UiApp::GetInstance()->GetFrameAt(0)->GetCurrentForm(); + + if(pForm != null) + { + String fontSizeStr = ""; + int fontSize = CommonUtil::GetFontSize(); + AppLog("Font sizeStr: %ls, fontsize:%d", fontSizeStr.GetPointer(), fontSize); + SetFontSize(*pForm, fontSize); + pForm->Invalidate(true); + } +} diff --git a/src/IntHistory.cpp b/src/IntHistory.cpp new file mode 100644 index 0000000..a62ad5a --- /dev/null +++ b/src/IntHistory.cpp @@ -0,0 +1,287 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntHistory.cpp + *@brief: Used to define History + */ + +#include "IntHistoryData.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Utility; +using namespace Tizen::Content; +using namespace Tizen::Graphics; +using namespace Tizen::Io; +using namespace Tizen::System; +using namespace Tizen::Locales; +using namespace Tizen::Media; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; + +History::History(void) + : __historyId("") + , __historyTitle("") + , __historyUrl("") + , __iconPath("") + ,__bookmarkId(L"") + ,__faviconId(L"") + , __visitedCount(0) + , __pThumbnail(null) + , __thumbnailPath("") + ,__pFavIconData(null) + ,__favIconHeight(0) + ,__favIconWidth(0) +{ + AppLog("History::History(void)"); + __visitedTime.SetValue(0,0,0); +} + +History::History(const History& hs) +{ + AppLog("History::History(const History& hs)"); + __historyId = hs.__historyId; + __historyTitle = hs.__historyTitle; + __historyUrl = hs.__historyUrl; +} + +History::~History(void) +{ + if (__pThumbnail != null) + { + delete __pThumbnail; //TODO To get this reviewed + } + if (__pFavIconData) + { + delete __pFavIconData; + } + AppLog("History::~History()"); +} + +History& +History::operator =(const History& rhs) +{ + if (this != &rhs) + { + __historyId = rhs.__historyId; + __historyTitle = rhs.__historyTitle; + __historyUrl = rhs.__historyUrl; + } + return *this; +} + +String +History::GetHistoryId(void) const +{ + return __historyId; +} + +String +History::GetHistoryTitle(void) const +{ + return __historyTitle; +} + +String +History::GetHistoryUrl(void) const +{ + return __historyUrl; +} + +DateTime +History::GetVisitedTime(void) const +{ + return __visitedTime; +} + +String +History::GetHistoryIconPath(void) const +{ + return __iconPath; +} + +String +History::GetFaviconId(void) const +{ + return __faviconId; +} + +String +History::GetBookmarkId(void) const +{ + return __bookmarkId; +} + +int +History::GetVisitedCount(void) const +{ + return __visitedCount; +} + +Bitmap* +History::GetThumbnail(void) const +{ + return __pThumbnail; +} + +String +History::GetThumbnailPath(void) const +{ + return __thumbnailPath; +} + +void +History::SetHistoryId(const String& strHistoryId) +{ + __historyId = strHistoryId; + return; +} + +void +History::SetHistoryTitle(String& strHistoryTitle) +{ + strHistoryTitle.Trim(); + __historyTitle = strHistoryTitle; + return; +} + +void +History::SetHistoryUrl(const String& strHistoryUrl) +{ + __historyUrl = strHistoryUrl; + return; +} + +void +History::SetVisitedTime(const DateTime& strVisitedTime) +{ + __visitedTime = strVisitedTime; + return; +} + +void +History::SetIconPath(const String& strFilePath) +{ + __iconPath = strFilePath; + return; +} + +void +History::SetFaviconId(const String& strFaviconId) +{ + __faviconId = strFaviconId; +} + +void +History::SetBookmarkId(const String& bookmarkId) +{ + __bookmarkId = bookmarkId; +} + +void +History::SetVisitedCount(int& visitedCount) +{ + __visitedCount = visitedCount; +} + +void +History::SetThumbnail(Bitmap* thumbnail) +{ + //TODO To get this reviewed + if(__pThumbnail != thumbnail && __pThumbnail != null) { + delete __pThumbnail; + } + __pThumbnail = thumbnail; +} + +void +History::SetThumbnailPath(String& thumbnailPath) +{ + __thumbnailPath = thumbnailPath; +} + +void +History::SetFavIconBitmap(Tizen::Graphics::Bitmap& favIconImage) +{ + Image* pImage = null; + pImage = new Image(); + pImage->Construct(); + if (__pFavIconData != null) + { + delete __pFavIconData; + __pFavIconData = null; + } + __pFavIconData = pImage->EncodeToBufferN(favIconImage,Tizen::Media::IMG_FORMAT_PNG); + + __favIconWidth = favIconImage.GetWidth(); + __favIconHeight = favIconImage.GetHeight(); + + delete pImage; +} + +void +History::SetFavIconBuffer(Tizen::Base::ByteBuffer& favIconBuffer) +{ + __pFavIconData = &favIconBuffer; +} + +ByteBuffer* +History::GetFavIconBuffer() +{ + return __pFavIconData; +} + +Bitmap* +History::GetFavIconBitmap() +{ + Bitmap *pBitmap = null; + + if (__pFavIconData != null) + { + Image *pImage = new(std::nothrow) Image(); + pImage->Construct(); + pBitmap = pImage->DecodeN(*__pFavIconData, IMG_FORMAT_PNG, BITMAP_PIXEL_FORMAT_ARGB8888); + delete pImage; + } + return pBitmap; +} + +int +History::GetFavIconWidth() +{ + return __favIconWidth; +} + +int +History::GetFavIconHeight() +{ + return __favIconHeight; +} + +void +History::SetFavIconWidth(int width) +{ + __favIconWidth = width; +} + +void +History::SetFavIconHeight(int height) +{ + __favIconHeight = height; +} diff --git a/src/IntHistoryListForm.cpp b/src/IntHistoryListForm.cpp new file mode 100644 index 0000000..28d19a8 --- /dev/null +++ b/src/IntHistoryListForm.cpp @@ -0,0 +1,2005 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet HistoryListForm class +/*@file: HistoryListForm.cpp + *@brief: This class defines HistoryListForm used define history + * + */ + +#include +#include +#include "IntBookmarkData.h" +#include "IntBookmarkPresentationModel.h" +#include "IntCommonLib.h" +#include "IntFaviconManager.h" +#include "IntHistoryListForm.h" +#include "IntHistoryPresentationModel.h" +#include "IntMultipleWindowPresentationModel.h" +#include "IntSceneRegister.h" +#include "IntTypes.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Graphics; +using namespace Tizen::Locales; +using namespace Tizen::Media; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; +using namespace Tizen::System; + +static const wchar_t* IDB_TAB_ICON_BOOKMARKS = L"I01_search_list_icon_favorite.png"; +static const wchar_t* IDB_TAB_ICON_HISTORY =L"I01_search_list_icon_history.png"; +static const wchar_t* IDB_ICON_BOOKMARK_ON_TEMP = L"00_icon_favorite_on_74x74.png"; +static const wchar_t* IDB_ICON_BOOKMARK_OFF_TEMP = L"00_icon_favorite_off_74x74.png"; + + +const int HistoryListForm::IDA_TABBAR_ITEM_1 = 101; +const int HistoryListForm::IDA_TABBAR_ITEM_2 = 102; +const int HistoryListForm::IDA_EDIT_HISTORY_LIST_FORM = 103; +const int HistoryListForm::IDA_FORMAT_ICON = 104; +const int HistoryListForm::IDA_FORMAT_TITLE = 105; +const int HistoryListForm::IDA_FORMAT_URL = 106; +const int HistoryListForm::IDA_FORMAT_BOOKMARK = 107; + + +HistoryListForm::HistoryListForm(void) +{ + __pBookmarkList = null; + __pGroupedListView =null; + __pSearchListView = null; + __pSearchBar = null; + __pGroupData = null; + __pSearchedData = null ; + __searchHistory = false; + __isNoHistoryPresent = true; + __searchText = L""; + __previousSceneId = L""; +} + +HistoryListForm::~HistoryListForm(void) +{ + if (__pGroupData != null) + { + __pGroupData->RemoveAll(false); + delete __pGroupData; + } + if(__pBookmarkList != null) + { + __pBookmarkList->RemoveAll(false); + delete __pBookmarkList; + } + if (__pSearchListView) + { + delete __pSearchListView; + __pSearchListView = null; + } +} + +bool +HistoryListForm::Initialize(void) +{ + Construct(L"IDL_HISTORY_LIST"); + + return true; +} + +result +HistoryListForm::OnInitializing(void) +{ + AppLog("HistoryListForm::OnInitializing"); + result r = E_SUCCESS; + SceneManager* pSceneManager = null; + HeaderItem bookmark; + HeaderItem history; + Header *pHeader = GetHeader(); + Bitmap *pIconBitmap = null; + AppResource* pAppResource = UiApp::GetInstance()->GetAppResource(); + const Color brown = Color(32, 32, 32, 0xFF); +// bool isHwBackButtonExist = false; +// Tizen::System::SystemInfo::GetValue(L"http:://tizen.org/feature/input.back.key",isHwBackButtonExist); +// +// SetFormStyle(FORM_STYLE_INDICATOR | FORM_STYLE_HEADER | FORM_STYLE_FOOTER); + // Setup back event listener + SetFormBackEventListener(this); + + GetHeader()->AddActionEventListener(*this); + GetFooter()->AddActionEventListener(*this); + +// if(isHwBackButtonExist) +// { +// GetFooter()->SetBackButtonEnabled(false); +// } + AddOrientationEventListener(*this); + SettingInfo::AddSettingEventListener(*this); + + pSceneManager = SceneManager::GetInstance(); + if (pSceneManager != null) + { + pSceneManager->AddSceneEventListener(IDSCN_HISTORY_LIST, *this); + } + + __fontSize = CommonUtil::GetFontSize(); + if (pAppResource == null) + { + return E_FAILURE; + } + + __pGroupedListView = static_cast< GroupedListView* >(GetControl(L"IDC_GROUPEDLISTVIEW1")); + if (__pGroupedListView == null) + { + return E_FAILURE; + } + + r = __pGroupedListView->SetItemProvider(*this); + if (IsFailed(r)) + { + return r; + } + + + __pSearchBar = static_cast< SearchBar* >(GetControl(L"IDC_SEARCHBAR1")); + if (__pSearchBar == null) + { + return E_FAILURE; + } + __pSearchBar->AddFocusEventListener(*this); + __pSearchListView = new(std::nothrow) GroupedListView(); + if (__pSearchListView == null) + { + return E_FAILURE; + } + + __pGroupedListView->AddGroupedListViewItemEventListener(*this); + r = __pGroupedListView->SetBounds(Rectangle(0,__pGroupedListView->GetY(),GetClientAreaBounds().width,GetClientAreaBounds().height - __pSearchBar->GetHeight() - __pSearchBar->GetY())); + if (IsFailed(r)) + { + return r; + } + r = __pSearchListView->Construct(Rectangle(0,0, GetClientAreaBounds().width, GetClientAreaBounds().height -__pSearchBar->GetHeight() - __pSearchBar->GetY()), GROUPED_LIST_VIEW_STYLE_INDEXED, true, false); + if (IsFailed(r)) + { + return r; + } + r = __pSearchListView->SetItemProvider(*this); + if (IsFailed(r)) + { + return r; + } + r = __pSearchListView->SetTextOfEmptyList(CommonUtil::GetString(L"IDS_BR_BODY_NO_RESULTS_FOUND")); + + if (IsFailed(r)) + { + return r; + } + + __pSearchListView->SetBackgroundColor(GetBackgroundColor()); + __pSearchListView->SetTextColorOfEmptyList(Color::GetColor(COLOR_ID_BLACK)); + __pSearchListView->AddGroupedListViewItemEventListener(*this); + r = __pSearchListView->SetShowState(false); + if (IsFailed(r)) + { + return r; + } + + + __pSearchBar->AddSearchBarEventListener(*this); + __pSearchBar->AddKeypadEventListener(*this); + r = __pSearchBar->SetContent(__pSearchListView); + + if (pHeader != null) + { + pHeader->SetStyle(HEADER_STYLE_TAB); + bookmark.Construct(IDA_TABBAR_ITEM_1); + String strbookmark; + pAppResource->GetString(L"IDS_BR_TAB_BOOKMARKS", strbookmark); + bookmark.SetText(strbookmark); + pIconBitmap = pAppResource->GetBitmapN(IDB_TAB_ICON_BOOKMARKS); + bookmark.SetIcon(HEADER_ITEM_STATUS_NORMAL, pIconBitmap); + bookmark.SetIcon(HEADER_ITEM_STATUS_PRESSED, pIconBitmap); + pHeader->AddItem(bookmark); + + if (pIconBitmap) + { + delete pIconBitmap; + } + + + history.Construct(IDA_TABBAR_ITEM_2); + String strhistory; + pAppResource->GetString(L"IDS_BR_TAB_HISTORY", strhistory); + history.SetText(strhistory); + pIconBitmap = pAppResource->GetBitmapN(IDB_TAB_ICON_HISTORY); + history.SetIcon(HEADER_ITEM_STATUS_NORMAL, pIconBitmap); + history.SetIcon(HEADER_ITEM_STATUS_PRESSED, pIconBitmap); + pHeader->AddItem(history); + pHeader->SetItemSelected(1); + pHeader->SetTabEditModeEnabled(false); + + if (pIconBitmap != NULL) + { + delete pIconBitmap; + } + } + + __pBookmarkList = new(std::nothrow) Collection::ArrayList(); + __pBookmarkList->Construct(); + BookmarkPresentationModel::GetInstance()->GetBookmarkForHistory(0,*__pBookmarkList); + return r; +} + +result +HistoryListForm::OnTerminating(void) +{ + result r = E_SUCCESS; + + SettingInfo::RemoveSettingEventListener(*this); + return r; +} + +void +HistoryListForm::OnActionPerformed(const Control& source, int actionId) +{ + AppLog("HistoryListForm::OnActionPerformed"); + result r = E_FAILURE; + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return; + } + switch (actionId) + { + case IDA_EDIT_HISTORY_LIST_FORM: + { + AppLog("ID_EDIT_HISTORY_LIST_FORM entered"); + r = pSceneManager->GoForward(ForwardSceneTransition(IDSCN_EDIT_HISTORY_LIST, SCENE_TRANSITION_ANIMATION_TYPE_LEFT)); + if (IsFailed(r)) + { + return; + } + } + break; + case IDA_TABBAR_ITEM_1: + { + // result r = GetHeader()->SetItemSelected(1); + // AppLog("SetItemSelected result %s",GetErrorMessage(r)); + // GetHeader()->Invalidate(true); + + if (pSceneManager != null) + { + if(__previousSceneId.CompareTo(IDSCN_BOOKMARK_VIEW) != 0) + { + if(pSceneManager->GoForward(ForwardSceneTransition(IDSCN_BOOKMARK_VIEW, SCENE_TRANSITION_ANIMATION_TYPE_LEFT)) != E_SUCCESS) + { + AppLogDebug("BookmarkListForm::OnActionPerformed GoForward failed"); + return; + } + } + else + { + if(pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT))!= E_SUCCESS) + { + AppLogDebug("BookmarkListForm::OnActionPerformed GoBackward failed"); + return; + } + } + } + + } + break; + default: + break; + } +} + +void +HistoryListForm::OnFocusGained(const Tizen::Ui::Control& source) +{ + __pSearchListView->SetEnabled(false); +} + +void +HistoryListForm::OnFocusLost(const Tizen::Ui::Control& source) +{ + __pSearchListView->SetEnabled(true); + __searchHistory = false; +} +void +HistoryListForm::OnFormBackRequested(Form& source) +{ + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return; + } + result r = E_FAILURE; + if(__previousSceneId.CompareTo(IDSCN_BOOKMARK_VIEW) != 0) + { + r = pSceneManager->GoBackward(BackwardSceneTransition()); + } + else + { + r = pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT)); + } + if(IsFailed(r)) + { + AppLogDebug("HistoryListForm::OnFormBackRequested GoForward failed %s",GetErrorMessage(r)); + } +} + +GroupItem* +HistoryListForm::CreateGroupItem(int groupIndex, int itemWidth) +{ + result r = E_FAILURE; + int strMonth = 0; + String text(L""); + DateTime endTime; + DateTime startTime; + int count = 0; + GroupItem* pItem = null; + GroupItemClass* pGroupItemClass = null; + + String weeksAgo2 = L""; + weeksAgo2.Format(25,CommonUtil::GetString(L"IDS_EMAIL_BODY_PD_WEEKS_AGO").GetPointer(),2); + + String weeksAgo3 = L""; + weeksAgo3.Format(25,CommonUtil::GetString(L"IDS_EMAIL_BODY_PD_WEEKS_AGO").GetPointer(),3); + + String weeksAgo4 = L""; + weeksAgo4.Format(25,CommonUtil::GetString(L"IDS_EMAIL_BODY_PD_WEEKS_AGO").GetPointer(),4); + + pItem = new(std::nothrow) GroupItem(); + if (pItem == null) + { + return null; + } + pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + + if (pGroupItemClass == null || pGroupItemClass->GetHistoryData() == null || pGroupItemClass->GetHistoryData()->GetCount() == 0) + { + AppLog("CreateGroupItem :: if history is null"); + r = pItem->Construct(Dimension(itemWidth, 0)); + __pGroupedListView->SetItemEnabled(groupIndex, -1, false); + return pItem; + } + else + { + r = pItem->Construct(Dimension(itemWidth, 48)); + } + text = pGroupItemClass->GetTitleText(); + + if (__searchHistory == false) + { + String month = L""; + text.Append(L" ("); + if (pGroupItemClass->GetTitleText() == CommonUtil::GetString(L"IDS_COM_BODY_TODAY") || pGroupItemClass->GetTitleText() == CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY")) + { + int dayOfWeek = 0; + Calendar* pGregorianCalendar = Calendar::CreateInstanceN(CALENDAR_GREGORIAN); + if ( pGregorianCalendar != NULL) + { + r = pGregorianCalendar->SetTimeField(TIME_FIELD_YEAR, pGroupItemClass->GetStartTime().GetYear()); + if (IsFailed(r)) + { + if( pItem != null) + { + delete pItem; + } + delete pGregorianCalendar; + return null; + } + r = pGregorianCalendar->SetTimeField(TIME_FIELD_MONTH, pGroupItemClass->GetStartTime().GetMonth()); + if (IsFailed(r)) + { + if( pItem != null) + { + delete pItem; + } + delete pGregorianCalendar; + return null; + } + r = pGregorianCalendar->SetTimeField(TIME_FIELD_DAY_OF_MONTH, pGroupItemClass->GetStartTime().GetDay()); + if (IsFailed(r)) + { + if( pItem != null) + { + delete pItem; + } + delete pGregorianCalendar; + return null; + } + dayOfWeek = pGregorianCalendar->GetTimeField(TIME_FIELD_DAY_OF_WEEK); + if (pGregorianCalendar != NULL) + { + delete pGregorianCalendar; + } + + } + switch(dayOfWeek) + { + case SUNDAY: + text.Append(CommonUtil::GetString(L"IDS_COM_BODY_SUN")); + break; + case MONDAY: + text.Append(CommonUtil::GetString(L"IDS_COM_BODY_MON")); + break; + case TUESDAY: + text.Append(CommonUtil::GetString(L"IDS_COM_BODY_TUE")); + break; + case WEDNESDAY: + text.Append(CommonUtil::GetString(L"IDS_COM_BODY_WED")); + break; + case THURSDAY: + text.Append(CommonUtil::GetString(L"IDS_COM_BODY_THU")); + break; + case FRIDAY: + text.Append(CommonUtil::GetString(L"IDS_COM_BODY_FRI")); + break; + case SATURDAY: + text.Append(CommonUtil::GetString(L"IDS_COM_BODY_SAT")); + break; + default: + break; + } + text.Append(L", "); + } + + if (pGroupItemClass->GetTitleText() != CommonUtil::GetString(L"IDS_BR_BODY_OLDER")) + { + text.Append(pGroupItemClass->GetStartTime().GetDay()); + text.Append(L" "); + strMonth = pGroupItemClass->GetStartTime().GetMonth(); + month = GetMonth(strMonth); + text.Append(month); + } + else + { + text.Append(L"~ "); + } + + + + if (pGroupItemClass->GetTitleText() == CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK") || pGroupItemClass->GetTitleText() == weeksAgo2 + || pGroupItemClass->GetTitleText() == weeksAgo3 || pGroupItemClass->GetTitleText() == weeksAgo4 || pGroupItemClass->GetTitleText() == CommonUtil::GetString(L"IDS_BR_EARLIER_THIS_MONTH") || pGroupItemClass->GetTitleText() == CommonUtil::GetString(L"IDS_BR_BODY_LAST_MONTH") || pGroupItemClass->GetTitleText() == CommonUtil::GetString(L"IDS_BR_BODY_OLDER")) + { + text.Append(L" - "); + text.Append(pGroupItemClass->GetEndTime().GetDay()); + text.Append(L" "); + strMonth = pGroupItemClass->GetEndTime().GetMonth(); + month = GetMonth(strMonth); + text.Append(month); + } + text.Append(L")"); + } + + r = pItem->SetElement(text, null); + if (IsFailed(r)) + { + delete pItem; + AppLogDebug("Failed with %s", GetErrorMessage(r)); + return null; + } + r = pItem->SetTextSize(32); + if (IsFailed(r)) + { + delete pItem; + return null; + } + __pGroupedListView->SetItemEnabled(groupIndex, -1, false); + + return pItem; +} + +ListItemBase* +HistoryListForm::CreateItem(int groupIndex, int itemIndex, int itemWidth) +{ + AppLog("HistoryListForm::CreateItem"); + result r = E_FAILURE; + History* pHistory = null; + Bitmap* pBitmap = null; + Bitmap* pBookmarkBitmap = null; + GroupItemClass* pGroupItemClass = null; + CustomItem* pItem = new(std::nothrow) CustomItem(); + int bookmarkBtnWidth = 0; + String bitmapId; + + Image* pImage = null; + pImage = new Image(); + pImage->Construct(); + + if(__pGroupData == null) + { + delete pItem; + delete pImage; + return null; + } + + if (pItem == null) + { + delete pImage; + return null; + } + pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + if (pGroupItemClass == null) + { + delete pItem; + delete pImage; + return null; + } + if (pGroupItemClass->GetHistoryData() == null) + { + delete pItem; + delete pImage; + return null; + } + pHistory = dynamic_cast< History* >(pGroupItemClass->GetHistoryData()->GetAt(itemIndex)); + if (pHistory == null) + { + delete pItem; + delete pImage; + return null; + } + r = pItem->Construct(Dimension(itemWidth, 128 - 44 + __fontSize), LIST_ANNEX_STYLE_NORMAL); + if (IsFailed(r)) + { + delete pItem; + delete pImage; + return null; + } + + ByteBuffer* pFavIconBuffer = null; + pFavIconBuffer = pHistory->GetFavIconBuffer(); + + AppLog("BookmarkListForm::CreateItem check 0"); + + if (pFavIconBuffer != null) + { + AppLog("BookmarkListForm::CreateItem pFavIconBuffer is not null"); + } + else + { + AppLog("BookmarkListForm::CreateItem pFavIconBuffer is null"); + } + + pBitmap = pImage->DecodeN(*pFavIconBuffer, IMG_FORMAT_PNG, BITMAP_PIXEL_FORMAT_ARGB8888); + + AppLog("BookmarkListForm::CreateItem check 1"); + + //bitmapId = pHistory->GetFaviconId() ; + //pBitmap = pHistory->GetFavIconBitmap(); + + if (pBitmap == null) + { + pBitmap = FaviconManager::GetInstance()->GetDefaultFaviconN(); + } + if (pBitmap != null) + { + AppLog("rrrr:: width %d height %d of the faviconbitmap",pBitmap->GetWidth(),pBitmap->GetHeight()); + r = pItem->AddElement(Rectangle(16, 28 + (__fontSize - 44)/2,72, 72), IDA_FORMAT_ICON, *pBitmap, null); + delete pBitmap; + if (IsFailed(r)) + { + delete pItem; + delete pImage; + AppLogException("CreateItem failed with %s", GetErrorMessage(r)); + return null; + } + } + bool urlFoundInBookmark = false; +// +// if(__pBookmarkList != null) +// { +// for (int i = 0; i < __pBookmarkList->GetCount();i++) +// { +// BookmarkData* pBookMark = dynamic_cast< BookmarkData* >(__pBookmarkList->GetAt(i)); +// if(pBookMark != null && pHistory->GetHistoryUrl().CompareTo(pBookMark->GetUrl()) == 0) +// { +// urlFoundInBookmark = true; +// break; +// } +// } +// } + BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(pHistory->GetHistoryUrl(),urlFoundInBookmark); + if (urlFoundInBookmark == true) + { + pBookmarkBitmap = AppResource::GetInstance()->GetBitmapN(IDB_ICON_BOOKMARK_ON_TEMP); + } + else + { + pBookmarkBitmap = AppResource::GetInstance()->GetBitmapN(IDB_ICON_BOOKMARK_OFF_TEMP); + } + bookmarkBtnWidth = 74; + + + r = pItem->AddElement(Rectangle(104, 10, GetClientAreaBounds().width - 108 - 32 - bookmarkBtnWidth - 32, 60 - 44 + __fontSize), IDA_FORMAT_TITLE, pHistory->GetHistoryTitle(), __fontSize,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,true); + TryCatch(!IsFailed(r), "CreateItem failed with %s",GetErrorMessage(r)); + +// if(__pSearchBar->GetMode() == SEARCH_BAR_MODE_INPUT) +// r = pItem->AddElement(Rectangle(104, 70, GetClientAreaBounds().width - 108 - 32 - bookmarkBtnWidth - 32, 48), IDA_FORMAT_URL, pHistory->GetHistoryUrl(),32,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,CUSTOM_COLOR_TRANSPARENT,true); +// else + r = pItem->AddElement(Rectangle(104, 70 - 44 +__fontSize, GetClientAreaBounds().width - 108 - 32 - bookmarkBtnWidth - 32, 48), IDA_FORMAT_URL, pHistory->GetHistoryUrl(),32,CUSTOM_COLOR_GREY,CUSTOM_COLOR_LISTVIEW_TEXT,CUSTOM_COLOR_LISTVIEW_TEXT,true); + TryCatch(!IsFailed(r), "CreateItem failed with %s",GetErrorMessage(r)); + if ( pBookmarkBitmap != null) + { + r = pItem->AddElement(Rectangle(GetClientAreaBounds().width - bookmarkBtnWidth - 16, (128 - pBookmarkBitmap->GetHeight())/2 +(__fontSize - 44)/2, bookmarkBtnWidth, bookmarkBtnWidth), IDA_FORMAT_BOOKMARK, *pBookmarkBitmap); + TryCatch(!IsFailed(r), "CreateItem failed with %s",GetErrorMessage(r)); + delete pBookmarkBitmap; + } + delete pImage; + return pItem; + + CATCH: + delete pItem; + delete pImage; + return null; +} + +bool +HistoryListForm::DeleteGroupItem(int groupIndex, GroupItem* pItem, int itemWidth) +{ + + // delete pItem; + // pItem = null; + return false; +} + +bool +HistoryListForm::DeleteItem(int groupIndex, int itemIndex, ListItemBase* pItem, int itemWidth) +{ + AppLog("HistoryListForm::DeleteItem"); + result r = E_FAILURE; + GroupItemClass* pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + if (pGroupItemClass == null) + { + return false; + } + + // if (pGroupItemClass->__pData != null) + // { + // r = pGroupItemClass->__pData->RemoveAt(itemIndex); + // if (IsFailed(r)) + // { + // return false; + // } + // } + + delete pItem; + pItem = null; + return true; +} + +int +HistoryListForm::GetGroupCount(void) +{ + __isNoHistoryPresent = true; + CreateGroupItems(); + if (__pGroupData != null) + { + if (__searchHistory == false) + { + int count = 0; + DateTime startTime; + DateTime endTime; + HistoryPresentationModel::GetCurrentDateTime(endTime); + + startTime.SetValue(0,0,0); + + HistoryPresentationModel::GetInstance()->GetHistoryCountWithTimeRange(startTime,endTime,count); + if (count == 0) + { + return 0; + } + return __pGroupData->GetCount(); + } + else + { + int count = 0; + if (__searchText.GetLength() > 0) + { + __searchText.Replace(L"%", L"/%"); + __searchText.Replace(L"_", L"/_"); + } + // String searchText = __pSearchBar->GetText(); + result r = HistoryPresentationModel::GetInstance()->GetSearchHistoryCount(count, __searchText); + if(count) + return 1; + else + return 0; + } + } + else + { + return 0; + } +} + +int +HistoryListForm::GetItemCount(int groupIndex) +{ + result r = E_FAILURE; + int count = 0; + DateTime endTime; + DateTime startTime; + String text; + + GroupItemClass* pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + if (pGroupItemClass == null) + { + return null; + } + if (__searchHistory == false) + { + startTime = pGroupItemClass->GetStartTime(); + endTime = pGroupItemClass->GetEndTime(); + r = HistoryPresentationModel::GetInstance()->GetHistoryCountWithTimeRange(startTime,endTime,count); + } + else + { + //text = __pSearchBar->GetText(); + r = HistoryPresentationModel::GetInstance()->GetSearchHistoryCount(count,__searchText); + if(count == 0) + { + return count; + } + } + if (IsFailed(r)) + { + return 0; + } + + ArrayList* pData = new(std::nothrow) ArrayList(); + if (pData == null) + { + return 0; + } + r = pData->Construct(); + + if (IsFailed(r)) + { + delete pData; + return 0; + } + + if (__searchHistory == false) + { + startTime = pGroupItemClass->GetStartTime(); + endTime = pGroupItemClass->GetEndTime(); + AppLog("Starttime %ls endtime %ls",startTime.ToString().GetPointer(),endTime.ToString().GetPointer()); + r = HistoryPresentationModel::GetInstance()->GetHistoryWithTimeRange(startTime,endTime, 0, count, *pData); + } + else + { + //text = __pSearchBar->GetText() ; + r = HistoryPresentationModel::GetInstance()->GetSearchHistory(0, count, *pData,__searchText ); + } + if (IsFailed(r)) + { + delete pData; + return 0; + } + pGroupItemClass->SetHistoryData(pData); + + + if (__isNoHistoryPresent == true && count == 0) + { + __isNoHistoryPresent = true; + GetFooter()->SetItemEnabled(0, false); + } + else + { + __isNoHistoryPresent = false; + GetFooter()->SetItemEnabled(0, true); + } + // pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + if (pGroupItemClass == null || pGroupItemClass->GetHistoryData() == null) + { + delete pData; + return 0; + } + else + { + AppLogDebug("HistoryListForm::GetItemCount returning %d for %d title %ls",pGroupItemClass->GetHistoryData()->GetCount(),groupIndex,pGroupItemClass->GetTitleText().GetPointer()); + return pGroupItemClass->GetHistoryData()->GetCount(); + } +} + +void +HistoryListForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs) +{ + AppLog("HistoryListForm::OnSceneActivatedN called"); + + GetHeader()->SetItemSelected(1); +// __previousSceneId = previousSceneId; + ArrayListT * pList = dynamic_cast* >(SceneManager::GetInstance()->GetSceneHistoryN()); + if(pList != null) + { + pList->GetAt(pList->GetCount()-1,__previousSceneId); + } + + if(__pBookmarkList != null) + { + __pBookmarkList->RemoveAll(false); + } + + BookmarkPresentationModel::GetInstance()->GetBookmarkForHistory(0,*__pBookmarkList); + + AppLog("HistoryListForm::OnSceneActivatedN called"); + //GetHeader()->Invalidate(true); + if (__pGroupData == null) + { + __pGroupData = new(std::nothrow) ArrayList(); + __pGroupData->Construct(); + } + if (__pGroupedListView != null) + { + __pGroupedListView->UpdateList(); + } + if (__isNoHistoryPresent == true) + { + GetFooter()->SetItemEnabled(0, false); + } + else + { + GetFooter()->SetItemEnabled(0, true); + } + + int count = 0; + DateTime startTime; + DateTime endTime; + HistoryPresentationModel::GetCurrentDateTime(endTime);; + + startTime.SetValue(0,0,0); + HistoryPresentationModel::GetInstance()->GetHistoryCountWithTimeRange(startTime,endTime,count); + if (count == 0) + { + __pSearchBar->SetShowState(false); + __pSearchBar->Invalidate(true); + } + else + { + __pSearchBar->SetShowState(true); + __pSearchBar->Invalidate(true); + } + + // if (__isNoHistoryPresent == true) + // { + // // __pGroupedListView->SetBitmapOfEmptyList(AppResource::GetInstance()->GetBitmapN(L"I01_Nocontents_Bookmarks.png")); + // __pGroupedListView->UpdateList(); + // } + + result r = GetHeader()->SetItemSelected(1); + if (IsFailed(r)) + { + AppLog("HistoryListForm::OnSceneActivatedN header failed %s", GetErrorMessage(r)); + return; + } + + + + Invalidate(true); + +} + +void +HistoryListForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + AppLog("HistoryListForm::OnSceneDeactivated"); + __pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL); +} + +void +HistoryListForm::OnGroupedListViewContextItemStateChanged(GroupedListView& listView, int groupIndex, int itemIndex, int elementId, ListContextItemStatus status) +{ + +} + +void +HistoryListForm::OnGroupedListViewItemStateChanged(GroupedListView& listView, int groupIndex, int itemIndex, int elementId, ListItemStatus status) +{ + GroupItemClass* pGroupItemClass = null; + History* pHistory = null; + AppLog("int groupIndex %d, int itemIndex %d, int elementId %d, ListItemStatus status %d",groupIndex,itemIndex,elementId,status); + if (elementId == IDA_FORMAT_BOOKMARK) + { + String toggledUrl = L""; + AppLog("BookMarkStatusChanged ID_FORMAT_BOOKMARK"); + pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + if (pGroupItemClass == null) + { + return; + } + pHistory = dynamic_cast< History* >(pGroupItemClass->GetHistoryData()->GetAt(itemIndex)); + if (pHistory == null) + { + return; + } + toggledUrl = pHistory->GetHistoryUrl(); + + AppLog("History's Bookmark ID %ls ToggledUrl %ls",pHistory->GetBookmarkId().GetPointer(),toggledUrl.GetPointer()); + + bool bookmarkFound = false; + BookmarkData* pBookMark = null; +// if(__pBookmarkList != null) +// { +// for (int i = 0; i < __pBookmarkList->GetCount(); i++) +// { +// pBookMark = dynamic_cast< BookmarkData* >(__pBookmarkList->GetAt(i)); +// if (pBookMark != null && toggledUrl.CompareTo(pBookMark->GetUrl()) == 0) +// { +// bookmarkFound = true; +// break; +// } +// } +// } + BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(toggledUrl,bookmarkFound); + if(bookmarkFound == false) + { + // Add the history in bookmark database + result r = E_FAILURE; + BookmarkData bookmark; + + String bookmarkTitle = pHistory->GetHistoryTitle(); + + bookmark.SetBookmarkTitle(bookmarkTitle); + bookmark.SetUrl(pHistory->GetHistoryUrl()); + bookmark.SetFaviconId(pHistory->GetFaviconId()); + if(pHistory->GetFavIconBuffer()) + { + ByteBuffer *pBuffer = new ByteBuffer(); + + pBuffer->Construct(*pHistory->GetFavIconBuffer()); + bookmark.SetFavIconBuffer(*pBuffer); + } + //r = BookmarkPresentationModel::GetInstance()->SaveBookmark(pBookmark); + r = BookmarkPresentationModel::GetInstance()->SaveTempBookmark(bookmark); + } + else + { + // remove the history from bookmark database + BookmarkPresentationModel::GetInstance()->DeleteBookmark(toggledUrl); + } + + if(__pBookmarkList != null) + { + __pBookmarkList->RemoveAll(false); + BookmarkPresentationModel::GetInstance()->GetBookmarkForHistory(0,*__pBookmarkList); + } + listView.RefreshList(groupIndex,itemIndex,LIST_REFRESH_TYPE_ITEM_MODIFY); + listView.UpdateList(); + } + else + { + AppLog("vinay :: __pGroupData->getcount %d",__pGroupData->GetCount()); + pGroupItemClass = dynamic_cast< GroupItemClass* >(__pGroupData->GetAt(groupIndex)); + if (pGroupItemClass == null) + { + return; + } + + AppLog("vinay :: __pGroupData->getcount %d",pGroupItemClass->GetHistoryData()->GetCount()); + History* pHistory1 = dynamic_cast< History* >(pGroupItemClass->GetHistoryData()->GetAt(itemIndex)); + if (pHistory1 == null) + { + return; + } + SceneManager* pSceneManager = SceneManager::GetInstance(); + ArrayList *pArgList = null; + result r = E_SUCCESS; + pArgList = new(std::nothrow) ArrayList(); + if (pArgList != null) + { + r = pArgList->Construct(); + if (IsFailed(r)) + { + delete pArgList; + return; + } + + r = pArgList->Add(*MultipleWindowPresentationModel::GetInstance()->GetActiveWindowInfo()); + r = pArgList->Add(*new(std::nothrow) String(pHistory1->GetHistoryUrl())); + if (IsFailed(r)) + { + delete pArgList; + return; + } + + + } + + String scneId = L""; + MultipleWindowPresentationModel::GetInstance()->GetCurrentSceneId(scneId); + + if (pSceneManager != null) + { + AppLog("pSceneManager exists"); + r = SceneManager::GetInstance()->GoForward(ForwardSceneTransition(scneId), pArgList); + if(pArgList) + { + pArgList->RemoveAll(false); + delete pArgList; + } + if (IsFailed(r)) + { + return; + } + } + } + +} + +void +HistoryListForm::OnGroupedListViewItemSwept(GroupedListView& listView, int groupIndex, int itemIndex, SweepDirection direction) +{ + +} + +void +HistoryListForm::OnSearchBarModeChanged(SearchBar& source, SearchBarMode mode) +{ + result r = E_FAILURE; + if(__pSearchBar) + __pSearchListView->SetBounds(__pSearchListView->GetX(), __pSearchListView->GetY(), __pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight()); + __pSearchListView->Invalidate(false); + + if (mode == SEARCH_BAR_MODE_NORMAL) + { + if ( Clipboard::GetInstance()->IsPopupVisible() == false && __searchHistory == false) + { + __pSearchListView->SetEnabled(true); + } + + r = __pSearchListView->SetShowState(false); + if (IsFailed(r)) + { + return; + } + r = __pGroupedListView->SetShowState(true); + if (IsFailed(r)) + { + return; + } + + __pSearchListView->SetEnabled(true); + if(__pSearchBar != null) + __pGroupedListView->SetBounds(0, __pSearchBar->GetY() + __pSearchBar->GetHeight(), GetClientAreaBounds().width, GetClientAreaBounds().height - __pSearchBar->GetHeight()); + Invalidate(true); + __searchHistory = false; + r = __pGroupedListView->UpdateList();//needed to update the value of __pGroupData + if (__isNoHistoryPresent == true) + { + GetFooter()->SetItemEnabled(0, false); + } + else + { + GetFooter()->SetItemEnabled(0, true); + } + if(__pSearchBar != null) + { + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), __pSearchListView->GetHeight())); + } + if (IsFailed(r)) + { + return; + } + } + else + { + + // __pSearchListView->SetEnabled(false); + r = __pSearchListView->SetShowState(true); + if (IsFailed(r)) + { + return; + } + __pSearchListView->SetEnabled(false); + r = __pSearchListView->UpdateList(); + if (IsFailed(r)) + { + return; + } + r = __pGroupedListView->SetShowState(false); + if (IsFailed(r)) + { + return; + } + if(__pSearchBar != null) + { + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), __pSearchListView->GetHeight())); + } + } +} + +String +HistoryListForm::GetMonth(int month) +{ + String monthValue = L""; + switch (month) + { + case JANUARY: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_JAN")); + break; + case FEBRUARY: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_FEB")); + break; + case MARCH: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_MAR")); + break; + case APRIL: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_APRIL")); + break; + case MAY: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_MAY")); + break; + case JUNE: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_JUNE")); + break; + case JULY: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_JUL")); + break; + case AUGUST: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_AUG")); + break; + case SEPTEMBER: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_SEP")); + break; + case OCTOBER: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_OCT")); + break; + case NOVEMBER: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_NOV")); + break; + case DECEMBER: + monthValue.Append(CommonUtil::GetString(L"IDS_COM_BODY_DEC")); + break; + default: + break; + } + + + return monthValue; +} + +void +HistoryListForm::OnKeypadActionPerformed(Control &source, KeypadAction keypadAction) +{ + result r = E_FAILURE; + if (__pSearchBar != null) + { + __pSearchBar->HideKeypad(); + } + + if (__pSearchBar != null && keypadAction == KEYPAD_ACTION_SEARCH) + { + __pSearchListView->SetEnabled(true); + __searchHistory = true; + __searchText =__pSearchBar->GetText(); + AppLog("SearchTextHistory %S errormsg %s",__searchText.GetPointer(),GetErrorMessage(GetLastResult())); + + r = __pGroupedListView->SetShowState(false); + if (IsFailed(r)) + { + return; + } + r = __pSearchListView->SetShowState(true); + if (IsFailed(r)) + { + return; + } + r= __pSearchListView->UpdateList(); + if (__isNoHistoryPresent == true) + { + GetFooter()->SetItemEnabled(0, false); + } + else + { + GetFooter()->SetItemEnabled(0, true); + } + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), __pSearchListView->GetHeight())); + + if (IsFailed(r)) + { + return; + } + } + else + { + __searchHistory = false; + } + Invalidate(true); +} + +void +HistoryListForm::OnKeypadBoundsChanged(Tizen::Ui::Control& source) +{ + FloatRectangle clientRect; + clientRect = GetClientAreaBoundsF(); + AppLogDebug("SearchBarForm::OnKeypadBoundsChanged ClientBounds(%f, %f, %f, %f)",clientRect.x, clientRect.y, clientRect.width, clientRect.height); + __pSearchBar->SetContentAreaSize(FloatDimension(clientRect.width, clientRect.height - __pSearchBar->GetHeightF())); + __pSearchListView->SetSize(FloatDimension(clientRect.width, clientRect.height - __pSearchBar->GetHeightF())); + __pGroupedListView->SetSize(FloatDimension(clientRect.width, clientRect.height - __pSearchBar->GetHeightF())); +// __pGroupedListView->SetEnabled(false); + Invalidate(true); +} + +void +HistoryListForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus) +{ + result r = E_FAILURE; + if (__pGroupedListView != null) + { + if(__pSearchBar != null &&__pSearchBar->GetShowState()) + r = __pGroupedListView->SetBounds(Rectangle(0,__pSearchBar->GetY() + __pSearchBar->GetHeight()/*72 + 30*/,GetClientAreaBounds().width,GetClientAreaBounds().height - __pSearchBar->GetHeight() - __pSearchBar->GetY())); + else if(__pSearchBar != null) + r = __pGroupedListView->SetBounds(Rectangle(0,0,GetClientAreaBounds().width,GetClientAreaBounds().height - __pSearchBar->GetHeight() - __pSearchBar->GetY())); + if (IsFailed(r)) + { + return; + } + //__pGroupedListView->UpdateList(); + if (__pSearchListView != null) + { + r = __pSearchListView->SetBounds(Rectangle(0, 0, GetClientAreaBounds().width, __pGroupedListView->GetHeight())); + if (IsFailed(r)) + { + return; + } + + __pSearchListView->UpdateList(); + + if(__pSearchBar != null) + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), __pSearchListView->GetHeight())); + } + + __pGroupedListView->UpdateList();//this change is as suggested by platform team for issue N_SE-52111 +// if(__pGroupData != NULL) +// { +// for (int groupIndex = 0; groupIndex < __pGroupData->GetCount(); groupIndex++) +// { +// for (int itemIndex = 0; itemIndex < __pGroupedListView->GetItemCountAt(groupIndex); itemIndex++) +// { +// __pGroupedListView->RefreshList(groupIndex, itemIndex,LIST_REFRESH_TYPE_ITEM_MODIFY); +// } +// } +// } + } + + if (__isNoHistoryPresent == true) + { + GetFooter()->SetItemEnabled(0, false); + } + else + { + GetFooter()->SetItemEnabled(0, true); + } +} + +void +HistoryListForm::OnKeypadWillOpen(Control& source) +{ + GetFooter()->SetShowState(false); + __pSearchListView->SetBounds(__pSearchListView->GetX(), __pSearchListView->GetY(), GetClientAreaBounds().width, GetClientAreaBounds().height - __pSearchBar->GetHeight()); + __pSearchListView->SetEnabled(false); + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), __pSearchListView->GetHeight())); + Invalidate(true); + +} + +void +HistoryListForm::OnKeypadOpened(Control& source) +{ + // this is added because some time footer is shown when key pad is opened, do not remove + GetFooter()->SetShowState(false); + GetFooter()->Invalidate(true); + __pSearchListView->SetBounds(__pSearchListView->GetX(), __pSearchListView->GetY(), __pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight()); +} + +void +HistoryListForm::OnKeypadClosed(Control& source) +{ +// if(Clipboard::GetInstance()->IsPopupVisible() == true) +// { +// return; +// } + GetFooter()->SetShowState(true); + __pSearchListView->SetBounds(__pSearchListView->GetX(), __pSearchListView->GetY(), __pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight()); + __pSearchListView->Invalidate(false); + __pSearchBar->SetContentAreaSize(Dimension(__pSearchListView->GetWidth(), GetClientAreaBounds().height - __pSearchBar->GetHeight())); + __pGroupedListView->SetBounds(0, __pSearchBar->GetY() + __pSearchBar->GetHeight(), GetClientAreaBounds().width, GetClientAreaBounds().height - __pSearchBar->GetHeight()); + Invalidate(true); +} + +void +HistoryListForm::CreateGroupItems() +{ + result r = E_FAILURE; + DateTime currentTime; + DateTime dateTime; + GroupItemClass* pGroupItemClass = null; + String titleText; + + String weeksAgo2 = L""; + weeksAgo2.Format(25,CommonUtil::GetString(L"IDS_EMAIL_BODY_PD_WEEKS_AGO").GetPointer(),2); + + String weeksAgo3 = L""; + weeksAgo3.Format(25,CommonUtil::GetString(L"IDS_EMAIL_BODY_PD_WEEKS_AGO").GetPointer(),3); + + if (__pGroupData != null) + { + __pGroupData->RemoveAll(false); + delete __pGroupData; + __pGroupData = null; + } + __pGroupData = new(std::nothrow) ArrayList(); + if (__pGroupData == null) + { + return; + } + r = __pGroupData->Construct(); + if (IsFailed(r)) + { + delete __pGroupData; + __pGroupData = null; + return; + } + if (__searchHistory == true) + { + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_BODY_SEARCH"); + pGroupItemClass->SetTitleText(titleText); + r = __pGroupData->Add(*pGroupItemClass); + if (IsFailed(r)) + { + return; + } + } + else + { + Calendar* pGregorianCalendar = null; + int dayOfWeek = 0; + int day = 0; + HistoryPresentationModel::GetCurrentDateTime(currentTime); + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_TODAY"); + pGroupItemClass->SetTitleText(titleText); + pGroupItemClass->SetEndTime(currentTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + + pGregorianCalendar = Calendar::CreateInstanceN(CALENDAR_GREGORIAN); + if ( pGregorianCalendar != NULL ) + { + pGregorianCalendar->SetTimeField(TIME_FIELD_YEAR, currentTime.GetYear()); + pGregorianCalendar->SetTimeField(TIME_FIELD_MONTH, currentTime.GetMonth()); + pGregorianCalendar->SetTimeField(TIME_FIELD_DAY_OF_MONTH, currentTime.GetDay()); + dayOfWeek = pGregorianCalendar->GetTimeField(TIME_FIELD_DAY_OF_WEEK); + delete pGregorianCalendar; + } + switch(dayOfWeek) + { + case SUNDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 6 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + break; + case MONDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 7 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + break; + case TUESDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 8 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + break; + case WEDNESDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_MON"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 9 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + break; + case THURSDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_TUE"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_MON"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 3 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 3 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 10 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + break; + case FRIDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_WED"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_TUE"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 3 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_MON"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 3 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 4 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 4 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 11 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + break; + case SATURDAY: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_YESTERDAY"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay()); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_THU"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 1 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_WED"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 3 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_TUE"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 3 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 4 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_COM_BODY_MON"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 4 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 5 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_WEEK"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 5 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 12 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + break; + + default: + break; + } + day = currentTime.GetDay(); + switch(day/7) + { + case 2: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + + pGroupItemClass->SetTitleText(weeksAgo2); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 7 - dayOfWeek + 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 14 - dayOfWeek + 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + if (pGroupItemClass->GetStartTime().GetDay() > 1 && pGroupItemClass->GetStartTime().GetDay() < 8) + { + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + String weeksAgo3 = L""; + weeksAgo3.Format(25,CommonUtil::GetString(L"IDS_EMAIL_BODY_PD_WEEKS_AGO").GetPointer(),3); + pGroupItemClass->SetTitleText(weeksAgo3); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 14 - dayOfWeek + 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 21 - dayOfWeek + 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + } + break; + case 3: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + pGroupItemClass->SetTitleText(weeksAgo2); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 7 - dayOfWeek + 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 14 - dayOfWeek + 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + + pGroupItemClass->SetTitleText(weeksAgo3); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 14 - dayOfWeek + 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 21 - dayOfWeek + 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + if (pGroupItemClass->GetStartTime().GetDay() > 1 && pGroupItemClass->GetStartTime().GetDay() < 8) + { + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_EARLIER_THIS_MONTH"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 21 - dayOfWeek + 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + //dateTime.AddDays(currentTime.GetDay() - 28 - dayOfWeek + 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + } + break; + case 4: + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + pGroupItemClass->SetTitleText(weeksAgo2); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 7 - dayOfWeek + 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 14 - dayOfWeek + 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + pGroupItemClass->SetTitleText(weeksAgo3); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 14 - dayOfWeek + 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 21 - dayOfWeek + 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + if (pGroupItemClass->GetStartTime().GetDay() > 1 && pGroupItemClass->GetStartTime().GetDay() < 8) + { + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_EARLIER_THIS_MONTH"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(currentTime.GetDay() - 21 - dayOfWeek + 2 - 1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + //dateTime.AddDays(currentTime.GetDay() - 28 - dayOfWeek + 2 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + } + break; + default: + break; + } + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_BODY_LAST_MONTH"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),currentTime.GetMonth(), 1); + dateTime.AddDays(-1); + pGroupItemClass->SetEndTime(dateTime); + dateTime.SetValue(currentTime.GetYear(), 1, 1); + dateTime.AddMonths(currentTime.GetMonth() - 1 - 1); + pGroupItemClass->SetStartTime(dateTime); + __pGroupData->Add(*pGroupItemClass); + + pGroupItemClass = new(std::nothrow) GroupItemClass(); + if (pGroupItemClass == null) + { + return; + } + titleText = CommonUtil::GetString(L"IDS_BR_BODY_OLDER"); + pGroupItemClass->SetTitleText(titleText); + dateTime.SetValue(currentTime.GetYear(),1, 1); + dateTime.AddMonths(currentTime.GetMonth() - 2); + dateTime.AddDays(-1); + pGroupItemClass->SetEndTime(dateTime); + DateTime dateTime2; + dateTime2.SetValue(0, 0, 0); + pGroupItemClass->SetStartTime(dateTime2); + __pGroupData->Add(*pGroupItemClass); + } +} + +GroupItemClass::GroupItemClass() +{ + __pData = null; +} + +GroupItemClass& +GroupItemClass::operator =(const GroupItemClass& rhs) +{ + if (this != &rhs) + { + __pData = rhs.__pData; + } + return *this; +} + +GroupItemClass::GroupItemClass(const GroupItemClass& groupItem) +{ + __pData = groupItem.__pData; +} + +GroupItemClass::~GroupItemClass() +{ + if (__pData) + { + __pData->RemoveAll(true); + delete __pData; + } +} + +void +GroupItemClass::SetStartTime(DateTime& startTime) +{ + __startTime = startTime; +} + +void +GroupItemClass::SetEndTime(DateTime& endTime) +{ + __endTime = endTime; +} + +void +GroupItemClass::SetTitleText(String& titleText) +{ + __titleText = titleText; +} + +void +GroupItemClass::SetHistoryData(ArrayList* pData) +{ + __pData = pData; +} + +DateTime +GroupItemClass::GetStartTime(void) +{ + return __startTime; +} + +DateTime +GroupItemClass::GetEndTime(void) +{ + return __endTime; +} + +String +GroupItemClass::GetTitleText(void) +{ + return __titleText; +} + +ArrayList* +GroupItemClass::GetHistoryData(void) +{ + return __pData; +} + +void +HistoryListForm::OnSettingChanged(Tizen::Base::String& key) +{ + if (__pGroupedListView) + { + __pGroupedListView->UpdateList(); + } + if (__isNoHistoryPresent == true ) + { + if(__pSearchBar) + __pSearchBar->SetShowState(false); + GetFooter()->SetItemEnabled(0, false); + } + else + { + if(__pSearchBar) + __pSearchBar->SetShowState(true); + GetFooter()->SetItemEnabled(0, true); + } + GetFooter()->Invalidate(true); +} diff --git a/src/IntHistoryPresentationModel.cpp b/src/IntHistoryPresentationModel.cpp new file mode 100644 index 0000000..03f8f21 --- /dev/null +++ b/src/IntHistoryPresentationModel.cpp @@ -0,0 +1,1262 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + + +//!Internet +/*@file: IntHistoryPresentationModel.cpp + *@brief: Provides functionalities to handle/maintain Browser History. + */ + +#include +#include "IntHistoryData.h" +#include "IntHistoryPresentationModel.h" +#include "IntTypes.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Utility; +using namespace Tizen::Graphics; +using namespace Tizen::Io; +using namespace Tizen::Locales; +using namespace Tizen::Media; +using namespace Tizen::System; + +extern const wchar_t* HISTORY_DATA_TABLE; +extern const wchar_t* BOOKMARK_URL_TABLE; + +HistoryPresentationModel* HistoryPresentationModel::__pHistoryPresentationModel = null; + +void HistoryPresentationModel::CreateInstance(void) +{ + if (__pHistoryPresentationModel == null) + __pHistoryPresentationModel = new(std::nothrow) HistoryPresentationModel(); + result r = __pHistoryPresentationModel->Construct(); + if (IsFailed(r)) + { + delete __pHistoryPresentationModel; + __pHistoryPresentationModel = null; + return; + } + std::atexit(DestroyInstance); +} + + +HistoryPresentationModel* HistoryPresentationModel::GetInstance(void) +{ + if (__pHistoryPresentationModel == null) + { + CreateInstance(); + } + return __pHistoryPresentationModel; + +} + +void HistoryPresentationModel::DestroyInstance(void) +{ + if (__pHistoryPresentationModel) + { + __pHistoryPresentationModel->UnInitialize(); + delete __pHistoryPresentationModel; + __pHistoryPresentationModel = null; + } +} + +HistoryPresentationModel::HistoryPresentationModel(void) +{ + __pDataList = null; +} + +HistoryPresentationModel::~HistoryPresentationModel(void) +{ + +} + +HistoryPresentationModel::HistoryPresentationModel(const HistoryPresentationModel& historyModelObj) +{ + +} + +HistoryPresentationModel& HistoryPresentationModel::operator=(const HistoryPresentationModel& historyModelObj) +{ + return *this; +} + +result +HistoryPresentationModel::Construct(void) +{ + result r = E_SUCCESS; + DB_FILE_PATH = L"/opt/usr/dbspace/.browser-history.db"; + r = PresentationModelBase::Initialize(); + TryCatch( !IsFailed(r),,"Failed to initialize HistoryPresentationModel Model %s",GetErrorMessage(r)); + + CATCH: return r; + +} + +result +HistoryPresentationModel::SaveHistory(History& history) +{ + AppLog("HistoryPresentationModel::saveHistory"); + result r = E_FAILURE; + String historyTable(HISTORY_DATA_TABLE); + String query; + String columnNames; + String attachment; + int resultCount = -1; + int rowId = -1; + DateTime date; + String historyId; + int urlCount = 0; + ArrayList* pMostVisitedSites = null; + bool isAlreadyExist = false; + bool isEligibleForMostVisitedSites = true; + int count; + String thumbnailPath; + int todaysCount = 0; + DateTime todayStart; + DateTime todayEnd; + SystemTime::GetCurrentTime(todayStart); + SystemTime::GetCurrentTime(todayEnd); + todayStart.SetValue(todayStart.GetYear(), todayStart.GetMonth(), todayStart.GetDay(), 0,0,0); + todayEnd.SetValue(todayStart.GetYear(), todayStart.GetMonth(), todayStart.GetDay(), 23,59,59); + + ArrayList* pTodaysList = new(std::nothrow) ArrayList(); + pTodaysList->Construct(); + GetHistoryCountWithTimeRange(todayStart, todayEnd, todaysCount); + GetHistoryWithTimeRange(todayStart, todayEnd, 0, todaysCount, *pTodaysList); + + for (int count = 0; count < todaysCount; count++) + { + History *pHistoryItem = dynamic_cast(pTodaysList->GetAt(count)); + + if (pHistoryItem != null && pHistoryItem->GetHistoryUrl().CompareTo(history.GetHistoryUrl()) == 0) + { + AppLog("SaveHistory pHistoryItem url is %ls",pHistoryItem->GetHistoryUrl().GetPointer()); + AppLog("SaveHistory history url is %ls",history.GetHistoryUrl().GetPointer()); + history.SetHistoryId(pHistoryItem->GetHistoryId()); + AppLog("HistoryPresentationModel::saveHistory pHistoryItem history is %ls",pHistoryItem->GetHistoryId().GetPointer()); + break; + } + } + + pMostVisitedSites = new(std::nothrow) ArrayList(); + pMostVisitedSites->Construct(); + String historyTitle = history.GetHistoryTitle(); + historyTitle.Replace(L"'", L"''"); + + String historyUrl = history.GetHistoryUrl(); + historyUrl.Replace(L"'", L"''"); + + PresentationModelBase::GetCurrentDateTime(date); + GetMostVisitedSites(*pMostVisitedSites); + GetUrlCount(historyUrl, urlCount); + for (count = 0; count < pMostVisitedSites->GetCount(); count++) + { + History* pHistory = static_cast< History* >(pMostVisitedSites->GetAt(count)); + if (pHistory != null && pHistory->GetHistoryUrl().CompareTo(historyUrl) == 0) + { + AppLog("HistoryPresentationModel::saveHistory isalreadyexist true"); + isAlreadyExist = true; + break; + } + if ( pHistory != null && urlCount >= pHistory->GetVisitedCount()) + { + isEligibleForMostVisitedSites = true; + } + else + { + isEligibleForMostVisitedSites = false; + } + } + + if (pMostVisitedSites->GetCount() < 9 || (isAlreadyExist == false && isEligibleForMostVisitedSites == true && history.GetThumbnail() != null)) + { + AppLog("HistoryPresentationModel::SaveHistory coming here"); + + thumbnailPath = GenerateFileName(); + AppLog("generating file path and url %ls, %ls",thumbnailPath.GetPointer(),historyUrl.GetPointer()); + Image* pImage = new(std::nothrow) Image(); + pImage->Construct(); + result r = pImage->EncodeToFile(*history.GetThumbnail(), IMG_FORMAT_JPG, thumbnailPath, true); + delete pImage; + if(IsFailed(r)) + { + AppLogDebug("PresentationModelBase::saveHistory -(%s)\n", GetErrorMessage(r)); + return r; + } + } + delete pMostVisitedSites; + pMostVisitedSites = NULL ; + + String pFavArray; + ByteBuffer* pFavBuffer = history.GetFavIconBuffer(); + if(pFavBuffer != null) + { + AppLog("Buffer found"); + pFavBuffer->Flip(); + + wchar_t value; + + AppLog("BookmarkPresentationModel::SaveBookmark 0 "); + + while(pFavBuffer->HasRemaining()) + { + pFavBuffer->GetWchar(value); + pFavArray.Append(value); + } + } + + if (history.GetHistoryId() == "") + { + AppLog("HistoryPresentationModel::saveHistory GetHistoryId is blank"); + + columnNames.Append(L"ADDRESS, "); + columnNames.Append(L"TITLE, "); + columnNames.Append(L"VISITDATE, "); + columnNames.Append(L"FAVICON, "); + columnNames.Append(L"FAVICON_W, "); + columnNames.Append(L"FAVICON_H"); + + query.Append(L"INSERT INTO "); + query.Append(historyTable); + query.Append("("); + query.Append(columnNames); + query.Append(") "); + query.Append("VALUES("); + query.Append("'"); + query.Append(historyUrl); + query.Append("'"); + query.Append(", "); + query.Append("'"); + query.Append(historyTitle); + query.Append("', "); + query.Append("DateTime("); + query.Append("'"); + query.Append(GetStringFromDate(date)); + query.Append(")', "); + query.Append("'"); + query.Append(pFavArray); + query.Append("', "); + query.Append(history.GetFavIconWidth()); + query.Append(", "); + query.Append(history.GetFavIconHeight()); + query.Append(")"); + } + else + { + query.Append(L"UPDATE "); + query.Append(historyTable); + query.Append(" SET ADDRESS = "); + query.Append("'"); + query.Append(historyUrl); + query.Append("'"); + query.Append(", TITLE = "); + query.Append("'"); + query.Append(historyTitle); + query.Append("'"); + query.Append(", VISITED_TIME = "); + query.Append("DateTime("); + query.Append("'"); + query.Append(GetStringFromDate(date)); + query.Append("')"); + query.Append("', "); + query.Append("'"); + query.Append(pFavArray); + query.Append("', "); + query.Append(history.GetFavIconWidth()); + query.Append(", "); + query.Append(history.GetFavIconHeight()); + query.Append(" WHERE ID = "); + query.Append(history.GetHistoryId()); + + } + + AppLog("HistoryPresentationModel::SaveHistory query is %S",query.GetPointer()); + + r = PresentationModelBase::ExecuteQuery(query, resultCount); + if (r == E_SUCCESS) + { + AppLog("HistoryPresentationModel::SaveHistory result is success"); + } + else + { + AppLog("HistoryPresentationModel::SaveHistory result is failure"); + } + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::SaveHistory query failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::CommitDb(); + + r = GetLastInsertedId(historyTable, rowId); + if (IsFailed(r)) + { + AppLogDebug("PresentationModelBase::saveHistory -(%s)\n", GetErrorMessage(r)); + return r; + } + if (rowId < 0) + return E_FAILURE; + + historyId.Append(rowId); + if (historyId.GetLength() < 0) + { + return E_FAILURE; + } + //Set the generated ID to History + history.SetHistoryId(historyId); + + CATCH: return r; +} + +void HistoryPresentationModel::UpdateHistoryFavIcon(History& history, Tizen::Graphics::Bitmap& favIconImage) +{ + result r = E_FAILURE; + String historyTable(HISTORY_DATA_TABLE); + String query; + String columnNames; + int resultCount = -1; + + Image* pImage = null; + pImage = new Image(); + pImage->Construct(); + + Tizen::Base::ByteBuffer* pFavBuffer = pImage->EncodeToBufferN(favIconImage, IMG_FORMAT_PNG); + // added because conversion may fail + if (GetLastResult() != E_SUCCESS) + { + delete pImage; + return; + } + delete pFavBuffer; + history.SetFavIconBitmap(favIconImage); + + delete pImage; + + query.Append(L"UPDATE "); + query.Append(historyTable); + query.Append(" SET FAVICON = "); + query.Append("?"); + query.Append(", FAVICON_W = "); + query.Append("?"); + query.Append(", FAVICON_H = "); + query.Append("?"); + query.Append(" WHERE ID = "); + query.Append("?"); + + AppLog("query is %ls", query.GetPointer()); + + r = PresentationModelBase::ExecuteUpdateHistoryFavIconQuery(query, resultCount, history); + if (r == E_SUCCESS) + { + AppLog("HistoryPresentationModel::SaveHistory result is success"); + } + else + { + AppLog("HistoryPresentationModel::SaveHistory result is failure"); + } + r = PresentationModelBase::CommitDb(); + +} + +result +HistoryPresentationModel::SaveTempHistory(History& history) +{ + AppLog("HistoryPresentationModel::saveHistory"); + result r = E_FAILURE; + String historyTable(HISTORY_DATA_TABLE); + String query; + String columnNames; + String attachment; + int resultCount = -1; + int rowId = -1; + DateTime date; + String historyId; + int urlCount = 0; + ArrayList* pMostVisitedSites = null; + bool isAlreadyExist = false; + bool isEligibleForMostVisitedSites = true; + int i; + String thumbnailPath; + int todaysCount = 0; + DateTime todayStart; + DateTime todayEnd; + SystemTime::GetCurrentTime(todayStart); + SystemTime::GetCurrentTime(todayEnd); + todayStart.SetValue(todayStart.GetYear(), todayStart.GetMonth(), todayStart.GetDay(), 0,0,0); + todayEnd.SetValue(todayStart.GetYear(), todayStart.GetMonth(), todayStart.GetDay(), 23,59,59); + + ArrayList* pTodaysList = new(std::nothrow) ArrayList(); + pTodaysList->Construct(); + GetHistoryCountWithTimeRange(todayStart, todayEnd, todaysCount); + GetHistoryWithTimeRange(todayStart, todayEnd, 0, todaysCount, *pTodaysList); + + for(int count = 0; count < todaysCount; count++) + { + History *pHistoryItem = dynamic_cast(pTodaysList->GetAt(count)); + AppLog("SaveHistory history url is %ls",history.GetHistoryUrl().GetPointer()); + + if(pHistoryItem != null && pHistoryItem->GetHistoryUrl().CompareTo(history.GetHistoryUrl()) == 0) + { + history.SetHistoryId(pHistoryItem->GetHistoryId()); + AppLog("HistoryPresentationModel::saveHistory pHistoryItem history is %ls",pHistoryItem->GetHistoryId().GetPointer()); + break; + } + } + + if (pTodaysList) + { + pTodaysList->RemoveAll(); + delete pTodaysList; + } + + pMostVisitedSites = new(std::nothrow) ArrayList(); + pMostVisitedSites->Construct(); + String historyTitle = history.GetHistoryTitle(); + historyTitle.Replace(L"'", L"''"); + + String historyUrl = history.GetHistoryUrl(); + historyUrl.Replace(L"'", L"''"); + + PresentationModelBase::GetCurrentDateTime(date); + GetMostVisitedSites(*pMostVisitedSites); + GetUrlCount(historyUrl, urlCount); + for (i = 0; i < pMostVisitedSites->GetCount(); i++) + { + History* pHistory = static_cast< History* >(pMostVisitedSites->GetAt(i)); + if (pHistory != null && pHistory->GetHistoryUrl().CompareTo(historyUrl) == 0) + { + AppLog("HistoryPresentationModel::saveHistory isalreadyexist true"); + isAlreadyExist = true; + break; + } + if ( pHistory != null && urlCount >= pHistory->GetVisitedCount()) + { + isEligibleForMostVisitedSites = true; + } + else + { + isEligibleForMostVisitedSites = false; + } + } + + if (pMostVisitedSites->GetCount() < 9 || (isAlreadyExist == false && isEligibleForMostVisitedSites == true && history.GetThumbnail() != null)) + { + AppLog("HistoryPresentationModel::SaveHistory coming here"); + + thumbnailPath = GenerateFileName(); + AppLog("generating file path and url %ls, %ls",thumbnailPath.GetPointer(),historyUrl.GetPointer()); + Image* pImage = new(std::nothrow) Image(); + pImage->Construct(); + result r = pImage->EncodeToFile(*history.GetThumbnail(), IMG_FORMAT_JPG, thumbnailPath, true); + delete pImage; + if(IsFailed(r)) + { + AppLogDebug("PresentationModelBase::saveHistory -(%s)\n", GetErrorMessage(r)); + return r; + } + } + delete pMostVisitedSites; + pMostVisitedSites = NULL ; + + if (history.GetHistoryId() == "") + { + AppLog("HistoryPresentationModel::saveHistory GetHistoryId is blank"); + + columnNames.Append(L"ADDRESS, "); + columnNames.Append(L"TITLE, "); + columnNames.Append(L"VISITDATE, "); + columnNames.Append(L"FAVICON, "); + columnNames.Append(L"FAVICON_W, "); + columnNames.Append(L"FAVICON_H"); + + query.Append(L"INSERT INTO "); + query.Append(historyTable); + query.Append("("); + query.Append(columnNames); + query.Append(") "); + query.Append("VALUES"); + query.Append(" (?,?,?,?,?,?)"); + } + else + { + query.Append(L"UPDATE "); + query.Append(historyTable); + query.Append(" SET ADDRESS = "); + query.Append("'"); + query.Append(historyUrl); + query.Append("'"); + query.Append(", TITLE = "); + query.Append("'"); + query.Append(historyTitle); + query.Append("'"); + query.Append(", VISITED_TIME = "); + query.Append("DateTime("); + query.Append("'"); + query.Append(GetStringFromDate(date)); + query.Append("')"); + query.Append("'"); + query.Append(" WHERE ID = "); + query.Append(history.GetHistoryId()); + } + + AppLog("HistoryPresentationModel::SaveHistory query is %S",query.GetPointer()); + + r = PresentationModelBase::ExecuteHistoryQuery(query, resultCount, history); + if (r == E_SUCCESS) + { + AppLog("HistoryPresentationModel::SaveHistory result is success"); + } + else + { + AppLog("HistoryPresentationModel::SaveHistory result is failure"); + } + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::SaveHistory query failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::CommitDb(); + + r = GetLastInsertedId(historyTable, rowId); + if (IsFailed(r)) + { + AppLogDebug("PresentationModelBase::saveHistory -(%s)\n", GetErrorMessage(r)); + return r; + } + if (rowId < 0) + return E_FAILURE; + + historyId.Append(rowId); + if (historyId.GetLength() < 0) + { + return E_FAILURE; + } + //Set the generated ID to History + history.SetHistoryId(historyId); + + if(__pDataList) + { + delete __pDataList; + __pDataList = null; + } + + CATCH: return r; + +} + +result +HistoryPresentationModel::DeleteMultipleHistory(ArrayList* pHistoryIdList) +{ + result r = E_FAILURE; + String query; + String historyTable = HISTORY_DATA_TABLE; + int resultCount = -1; + + if (pHistoryIdList == null) + { + return E_FAILURE; + } + + query.Append(L"DELETE FROM "); + query.Append(historyTable); + query.Append(" WHERE"); + for(int index = 0; index <= pHistoryIdList->GetCount()-2; index++) + { + query.Append(" ID = "); + String* hisId = static_cast(pHistoryIdList->GetAt(index)); + query.Append(*hisId); + query.Append(" OR "); + } + query.Append(" ID = "); + String* hisId = static_cast(pHistoryIdList->GetAt(pHistoryIdList->GetCount()-1)); + if(hisId == null) + { + return E_FAILURE; + } + query.Append(*hisId); + + r = PresentationModelBase::ExecuteQuery(query, resultCount); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::DeleteHistory GetLastInsertedId failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::CommitDb(); + + if(__pDataList) + { + delete __pDataList; + __pDataList = null; + } + + CATCH: return r; +} + +result +HistoryPresentationModel::DeleteHistory(const int historyId) +{ + result r = E_FAILURE; + String query; + String historyTable = HISTORY_DATA_TABLE; + int resultCount = -1; + + if (historyId < 1) + { + return E_INVALID_ARG; + } + + query.Append(L"DELETE FROM "); + query.Append(historyTable); + query.Append(" WHERE ID = "); + query.Append(historyId); + + r = PresentationModelBase::ExecuteQuery(query, resultCount); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::DeleteHistory GetLastInsertedId failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::CommitDb(); + + if(__pDataList) + { + delete __pDataList; + __pDataList = null; + } + + CATCH: return r; +} + +result +HistoryPresentationModel::DeleteHistory(String& historyUrl) +{ + result r = E_FAILURE; + String query; + String historyTable = HISTORY_DATA_TABLE; + int resultCount = -1; + + query.Append(L"DELETE FROM "); + query.Append(historyTable); + query.Append(" WHERE ADDRESS = '"); + query.Append(historyUrl); + query.Append("'"); + + r = PresentationModelBase::ExecuteQuery(query, resultCount); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::DeleteHistory GetLastInsertedId failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::CommitDb(); + + if(__pDataList) + { + delete __pDataList; + __pDataList = null; + } + + CATCH: return r; +} + +result +HistoryPresentationModel::ClearHistory(void) +{ + result r = E_FAILURE; + String query; + String historyTable = HISTORY_DATA_TABLE; + int resultCount = -1; + + query.Append(L"DELETE FROM "); + query.Append(historyTable); + + r = PresentationModelBase::ExecuteQuery(query, resultCount); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::ClearHistory GetLastInsertedId failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::CommitDb(); + + CATCH: return r; +} + +result +HistoryPresentationModel::GetHistoryCount(int& historyCount) +{ + int count = -1; + int intVal = -1; + String query; + String historyTable(HISTORY_DATA_TABLE); + result r = E_FAILURE; + bool nextRowPresent = false; + + query.Append(L"SELECT COUNT(ID) FROM "); + query.Append(historyTable); + + r = PresentationModelBase::ExecuteQuery(query, count); + AppLog("the count is %d", count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetHistoryCount query failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::DbIsNextRowPresent(nextRowPresent); + if (IsFailed(r) != null) + return r; + if (nextRowPresent == true) + { + r = PresentationModelBase::GetColumn(0, intVal); + if (IsFailed(r) != null) + { + AppLogDebug("Error:PresentationModelBase::GetColumn:%s", GetErrorMessage(r)); + return r; + } + } + historyCount = intVal; + + CATCH: return r; +} + +result +HistoryPresentationModel::GetHistoryCountWithTimeRange(Tizen::Base::DateTime& startTime, Tizen::Base::DateTime& endTime, int& historyCount) +{ + int count = 0; + result r = E_SUCCESS; + + if(__pDataList != null) + { + delete __pDataList; + __pDataList = null; + } + + //if(__pDataList == null) + //{ + __pDataList = new(std::nothrow) ArrayList(); + __pDataList->Construct(); + + r = GetHistoryCount(count); + if(IsFailed(r)) + { + return r; + } + if(count > 0) + { + r = GetHistory(0, count, *__pDataList); + if (IsFailed(r)) + { + delete __pDataList; + __pDataList = null; + return r; + } + } + //} + //else + //{ + count = __pDataList->GetCount(); + //} + + for (int counter = 0 ; counter < count; counter++) + { + History *pHistory = dynamic_cast(__pDataList->GetAt(counter)); + + if(pHistory != null && pHistory->GetVisitedTime().CompareTo(startTime) > 0 && pHistory->GetVisitedTime().CompareTo(endTime) < 0) + { + historyCount++; + } + } + return r; +} + +result +HistoryPresentationModel::GetHistory(const int startIndex,const int limit, ArrayList& pHistoryList) +{ + + int count = -1; + String query; + String historyTable(HISTORY_DATA_TABLE); + result r = E_FAILURE; + + query.Append(L"SELECT * from "); + query.Append(historyTable); + query.Append(" ORDER BY VISITDATE DESC"); + + + //Append LIMIT + if (limit > 0) + { + query.Append(" LIMIT "); + query.Append(limit); + + //Append OFFESET + if (startIndex >= 0) + { + query.Append(" OFFSET "); + query.Append(startIndex); + } + } + + r = PresentationModelBase::ExecuteQuery(query, count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetHistory query failed %s",GetErrorMessage(r)); + + r = CreateHistoryList(count, pHistoryList); + if (IsFailed(r)) + { + AppLogDebug("Error:CreateNoteList:failed:%s", GetErrorMessage(r)); + } + CATCH: return r; +} + +result +HistoryPresentationModel::CreateHistoryList(int historyCount, ArrayList& historyList, int maxCount) +{ + + History* pHistory = null; + int intVal = -1; + String stringVal; + DateTime dateVal; + result r = E_FAILURE; + String historyId; + String faviconId; + String bookmarkId; + int visitedCount; + DateTime visitedTime; + String iconPath; + String thumbnailPath; + bool nextRowPresent = false; + Image image; + Bitmap* pThumnailBitmap = null; + ByteBuffer *pFavIconBuffer; + + image.Construct(); + if (historyCount < 1) + { + return E_SUCCESS; + } + + for (int Count = 0; (maxCount == -1 && Count < historyCount ) || (maxCount != -1 && Count < maxCount && Count < historyCount); Count++) + { + r = PresentationModelBase::DbIsNextRowPresent(nextRowPresent); + if (IsFailed(r)) + { + return E_SUCCESS; + } + if (nextRowPresent == true) + { + pHistory = new(std::nothrow) History; + if (pHistory) + { + for (int columnCount = 0; columnCount < MAX_NOTE_TABLE_COLUMN; columnCount++) + { + + switch (columnCount) + { + case HISTORY_ID: + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal > 0) + { + historyId.Clear(); + historyId.Append(intVal); + if (historyId.GetLength() > 0) + { + pHistory->SetHistoryId(historyId); + } + } + + } + break; + case HISTORY_URL: + r = PresentationModelBase::GetColumn(columnCount, stringVal); + if (!IsFailed(r)) + { + pHistory->SetHistoryUrl(stringVal); + } + break; + case HISTORY_TITLE: + r = PresentationModelBase::GetColumn(columnCount, stringVal); + if (!IsFailed(r)) + { + pHistory->SetHistoryTitle(stringVal); + } + break; + + case HISTORY_VISITED_TIME: + r = PresentationModelBase::GetColumn(columnCount, dateVal); + if (!IsFailed(r)) + { + visitedTime = dateVal; + pHistory->SetVisitedTime(visitedTime); + } + break; + + case HISTORY_FAVICON: + { + pFavIconBuffer = new ByteBuffer(); + r = PresentationModelBase::GetColumn(columnCount, *pFavIconBuffer); + if (!IsFailed(r) && pFavIconBuffer->GetCapacity() > 0) + { + pHistory->SetFavIconBuffer(*pFavIconBuffer); + } + } + break; + case HISTORY_FAVICON_LENGTH: + { + + } + break; + case HISTORY_FAVICON_W: + { + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal > 0) + { + pHistory->SetFavIconWidth(intVal); + } + } + } + break; + case HISTORY_FAVICON_H: + { + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal > 0) + { + pHistory->SetFavIconHeight(intVal); + } + } + } + break; + + case HISTORY_VISITED_COUNT: + r = PresentationModelBase::GetColumn(columnCount, intVal); + if (!IsFailed(r)) + { + if (intVal > 0) + { + pHistory->SetVisitedCount(intVal); + + } + } + break; + + default: + break; + } + + } + r = historyList.Add(*pHistory); + + if (IsFailed(r)) + { + delete pHistory; + return r; + } + } + } + } + return E_SUCCESS; +} + +result +HistoryPresentationModel::GetSearchHistory(const int startIndex,const int limit, ArrayList& pHistoryList, String& text) +{ + DateTime endTime; + SystemTime::GetCurrentTime(endTime); + + text.Replace(L"'", L"''"); + + int count = -1; + String query; + String historyTable(HISTORY_DATA_TABLE); + result r = E_FAILURE; + + query.Append(L"SELECT "); + query.Append(historyTable); + query.Append(L".* "); + query.Append(L"FROM "); + query.Append(historyTable); + query.Append(L" WHERE ("); + query.Append(historyTable); + query.Append(L".TITLE LIKE '%"); + query.Append(text); + query.Append("%' ESCAPE '/')"); + query.Append(" OR "); + query.Append(L"("); + query.Append(historyTable); + query.Append(L".ADDRESS LIKE '%"); + query.Append(text); + query.Append("%' ESCAPE '/')"); + query.Append(" ORDER BY VISITDATE DESC"); + + + r = HistoryPresentationModel::ExecuteQuery(query, count); +// TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetSearchHistory query failed %s",GetErrorMessage(r)); + + ArrayList pAllSearchList; + + r = CreateHistoryList(count, pAllSearchList); + + int itemsFoundIndex = -1; + for (int counter = 0 ; counter < count; counter++) + { + History *pHistory = dynamic_cast(pAllSearchList.GetAt(counter)); + if(pHistory != null && pHistory->GetVisitedTime().CompareTo(endTime) < 0) + { + itemsFoundIndex++; + if(itemsFoundIndex >= startIndex && itemsFoundIndex < (limit + startIndex)) + { + pHistoryList.Add(*pHistory); + } + else if(itemsFoundIndex > (limit + startIndex)) + { + break; + } + } + } + + + if (IsFailed(r)) + { + AppLogDebug("Error:CreateNoteList:failed:%s", GetErrorMessage(r)); + } + CATCH: return r; +} + +result +HistoryPresentationModel::GetSearchHistoryCount(int& historyCount, String& text) +{ + DateTime endTime; + SystemTime::GetCurrentTime(endTime); + text.Replace(L"'", L"''"); + + int count = -1; + String query; + String historyTable(HISTORY_DATA_TABLE); + result r = E_FAILURE; + + query.Append(L"SELECT "); + query.Append(historyTable); + query.Append(L".* "); + query.Append(L"FROM "); + query.Append(historyTable); + query.Append(L" WHERE ("); + query.Append(historyTable); + query.Append(L".TITLE LIKE '%"); + query.Append(text); + query.Append("%'ESCAPE '/')"); + query.Append(" OR "); + query.Append(L"("); + query.Append(historyTable); + query.Append(L".ADDRESS LIKE '%"); + query.Append(text); + query.Append("%' ESCAPE '/')"); + query.Append(" ORDER BY VISITDATE DESC"); + + r = HistoryPresentationModel::ExecuteQuery(query, count); +// TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetSearchHistory query failed %s",GetErrorMessage(r)); + + ArrayList pAllSearchList; + + r = CreateHistoryList(count, pAllSearchList); + + historyCount = 0; + for (int counter = 0 ; counter < count; counter++) + { + History *pHistory = dynamic_cast(pAllSearchList.GetAt(counter)); + if(pHistory != null && pHistory->GetVisitedTime().CompareTo(endTime) < 0) + { + historyCount++; + } + } + + + if (IsFailed(r)) + { + AppLogDebug("Error:CreateNoteList:failed:%s", GetErrorMessage(r)); + } + CATCH: return r; +} + +result +HistoryPresentationModel::GetHistoryWithTimeRange(Tizen::Base::DateTime& startTime, Tizen::Base::DateTime& endTime,const int startIndex,const int limit, ArrayList& pHistoryList) +{ + int count = 0; + result r = E_SUCCESS; + if(__pDataList == null) + { + __pDataList = new(std::nothrow) ArrayList(); + __pDataList->Construct(); + + r = GetHistoryCount(count); + if(IsFailed(r)) + { + return r; + } + if(count > 0) + { + r = GetHistory(0, count, *__pDataList); + if(IsFailed(r)) + { + delete __pDataList; + __pDataList = null; + return r; + } + } + } + else + { + count = __pDataList->GetCount(); + } + int itemsFoundIndex = -1; + for (int counter = 0 ; counter < count; counter++) + { + History *pHistory = dynamic_cast(__pDataList->GetAt(counter)); + if(pHistory != null && pHistory->GetVisitedTime().CompareTo(startTime) > 0 && pHistory->GetVisitedTime().CompareTo(endTime) < 0) + { + itemsFoundIndex++; + if(itemsFoundIndex >= startIndex && itemsFoundIndex < (limit + startIndex)) + { + pHistoryList.Add(*pHistory); + } + else if(itemsFoundIndex > (limit + startIndex)) + { + break; + } + } + } + return r; +} + +result +HistoryPresentationModel::GetMostVisitedSites(ArrayList& pHistoryList) +{ + + int count = -1; + String query; + String historyTable(HISTORY_DATA_TABLE); + result r = E_FAILURE; + + + //query = L"SELECT *, COUNT(URL) AS NOS FROM HistoryData GROUP BY URL ORDER BY NOS DESC"; + query = L"SELECT History.*, COUNT(History.ADDRESS) AS NOS FROM History WHERE History.ADDRESS != '' GROUP BY History.ADDRESS ORDER BY NOS DESC"; + + r = HistoryPresentationModel::ExecuteQuery(query, count); + AppLog("the count is %d",count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetHistoryWithTimeRange query failed %s",GetErrorMessage(r)); + + r = CreateHistoryList(count, pHistoryList, 9); + if (IsFailed(r)) + { + AppLogDebug("Error:CreateNoteList:failed:%s", GetErrorMessage(r)); + } + + CATCH: return r; +} + +result +HistoryPresentationModel::GetUrlCount(const String& Url, int& historyCount) +{ + int count = -1; + int intVal = -1; + String query; + String historyTable(HISTORY_DATA_TABLE); + result r = E_FAILURE; + bool nextRowPresent = false; + + query.Append(L"SELECT COUNT(ADDRESS) FROM "); + query.Append(historyTable); + query.Append(L" WHERE ADDRESS = "); + query.Append("'"); + query.Append(Url); + query.Append("'"); + + r = PresentationModelBase::ExecuteQuery(query, count); + AppLog("the count is %d", count); + TryCatch( r == E_SUCCESS,,"BookmarkPresentationModel::GetHistoryCount query failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::DbIsNextRowPresent(nextRowPresent); + if (IsFailed(r)) + return r; + if (nextRowPresent == true) + { + r = PresentationModelBase::GetColumn(0, intVal); + if (IsFailed(r)) + { + AppLogDebug("Error:PresentationModelBase::GetColumn:%s", GetErrorMessage(r)); + return r; + } + } + historyCount = intVal; + + CATCH: return r; +} + +String +HistoryPresentationModel::GenerateFileName(void) +{ + AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry(); + if ( pAppRegistry == NULL ) + { + return NULL ; + } + String keyCount("ThumbnailCount"); + String fileName = UiApp::GetInstance()->GetAppRootPath() + "/data/Thumbnail"; + result r = E_SUCCESS; + int keyValue = 1; + + fileName.Append(L"/thumbnails"); + r = pAppRegistry->Get(keyCount, keyValue); + + if (r == E_KEY_NOT_FOUND) + { + keyValue = 1; + pAppRegistry->Add(keyCount, keyValue); + } + else + { + keyValue++; + pAppRegistry->Set(keyCount, keyValue); + } + + fileName.Append(keyValue); + fileName.Append(".jpg"); + pAppRegistry->Save(); + + return fileName; +} + +String +HistoryPresentationModel::GetStringFromDate(DateTime& date) +{ + String dateFormat = L""; + dateFormat.Append(date.GetYear()); + dateFormat.Append('-'); + if(date.GetMonth() < 10) + { + dateFormat.Append('0'); + } + dateFormat.Append(date.GetMonth()); + dateFormat.Append('-'); + if(date.GetDay() < 10) + { + dateFormat.Append('0'); + } + dateFormat.Append(date.GetDay()); + dateFormat.Append(' '); + if(date.GetHour() < 10) + { + dateFormat.Append('0'); + } + dateFormat.Append(date.GetHour()); + dateFormat.Append(':'); + if(date.GetMinute() < 10) + { + dateFormat.Append('0'); + } + dateFormat.Append(date.GetMinute()); + dateFormat.Append(':'); + if(date.GetSecond() < 10) + { + dateFormat.Append('0'); + } + dateFormat.Append(date.GetSecond()); + return dateFormat; +} diff --git a/src/IntInternetApp.cpp b/src/IntInternetApp.cpp new file mode 100644 index 0000000..b792ace --- /dev/null +++ b/src/IntInternetApp.cpp @@ -0,0 +1,558 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: Internet.cpp + *@brief: provides basic features necessary to define an UiApp. + */ + +#include "IntBookmarkData.h" +#include "IntBookmarkPresentationModel.h" +#include "IntCommonLib.h" +#include "IntFaviconManager.h" +#include "IntHistoryPresentationModel.h" +#include "IntInternetApp.h" +#include "IntMainFrame.h" +#include "IntMainForm.h" +#include "IntMultipleWindowPresentationModel.h" +#include "IntSceneRegister.h" +#include "IntSettingPresentationModel.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::System; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + +static const wchar_t* APPCONTROL_SELECT_KEY_IMAGE = L"http://tizen.org/appcontrol/data/image/crop_mode"; +static const wchar_t* APPCONTROL_SELECT_VALUE_IMAGE = L"fit_to_screen"; +static const wchar_t* APPCONTROL_PROVIDER_ID_IMAGE_VIEWER = L"tizen.imageviewer"; +static const wchar_t* APPCONTROL_OPERATION_ID_IMAGE_VIEWER = L"http://tizen.org/appcontrol/operation/view"; +const int MIN_MEMORY_NEEDED = 1048576; + +InternetApp::InternetApp(void) +: __pMultiWindowManager(NULL),__pNewWindowInfo(null),pSceneManagementFrame(null),__value(null),__isShowMsg(false),__pAc(null) +{ +} + +InternetApp::~InternetApp(void) +{ + if (__pNewWindowInfo != NULL) + { + delete __pNewWindowInfo; + __pNewWindowInfo = NULL; + } +} + +UiApp* +InternetApp::CreateInstance(void) +{ + // Create the instance through the constructor. + return new(std::nothrow) InternetApp(); +} + +void +InternetApp::ShowPopup(String& pTitle, String& pText) +{ + MessageBox messageBox; + messageBox.Construct(pTitle, pText,MSGBOX_STYLE_OK,3000); + int modalResult = 0; + + messageBox.ShowAndWait(modalResult); + switch (modalResult) + { + case MSGBOX_RESULT_OK: + { + + } + break; + default: + break; + } +} + +bool +InternetApp::OnAppInitializing(AppRegistry& appRegistry) +{ + AppLog("ABC::Internet::OnAppInitializing entered"); + AppControlProviderManager* pAppMgr = AppControlProviderManager::GetInstance(); + if (pAppMgr != null) + { + result r = pAppMgr->SetAppControlProviderEventListener(this); + AppLogDebug("SetAppControlProviderEventListener result %s",GetErrorMessage(r)); + } + return true; +} + +bool +InternetApp::OnAppInitialized(void) +{ + result r = E_SUCCESS; + + long long mem = GetAvailableMemory(); + AppLogDebug("%lld",mem); + if(mem < MIN_MEMORY_NEEDED) + { + MessageBox LowMemory; + String msg = L""; + LowMemory.Construct(CommonUtil::GetString(L"IDS_COM_POP_NOT_ENOUGH_MEMORY"), CommonUtil::GetString(L"IDS_COM_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"), MSGBOX_STYLE_NONE,1000); + int modalResult = 0; + // Calls ShowAndWait() : Draws and Shows itself and processes events + LowMemory.ShowAndWait(modalResult); + + return false; + + } + String title1 = L"URL1"; + String title2 = L"URL2"; + String folder1 = L"Folder 1"; + String strSite1 = "Site 1"; + + BookmarkPresentationModel::GetInstance(); + HistoryPresentationModel::GetInstance(); + FaviconManager::GetInstance(); + SettingPresentationModel::GetInstance(); + +// MultipleWindowPresentationModel::GetInstance(); + + SettingInfo::AddSettingEventListener(*this); + __pMultiWindowManager = MultipleWindowPresentationModel::GetInstance(); + AppLogDebug("window count %d",__pMultiWindowManager->GetAllWindowArrayList()->GetCount()); + + + + // Create a Frame + pSceneManagementFrame = new(std::nothrow) MainFrame(); + pSceneManagementFrame->Construct(); + pSceneManagementFrame->SetName(L"SceneManagement"); + AddFrame(*pSceneManagementFrame); + pSceneManagementFrame->Show(); + // Goto the first scene. + + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + AppLogDebug("pSceneManager is null returning"); + return false; + } + + String homePage = SettingPresentationModel::GetInstance()->GetHomepage(); + if (homePage == (L"IDS_BR_BODY_MOST_VISITED_SITES") || homePage == (L"IDS_BR_BODY_BLANK_PAGE")) + { + homePage = L""; + } + else if (homePage == CommonUtil::GetString(L"IDS_BR_BODY_USER_HOMEPAGE")) + { + AppLog("InternetApp::OnAppInitialized homaepage = userhomepage"); + homePage = SettingPresentationModel::GetInstance()->GetFavoriteUrl(); + AppLog("InternetApp::OnAppInitialized fav URL = %ls ",homePage.GetPointer()); + } + + if (__pNewWindowInfo == null)//if the application is launched normally + { + __pNewWindowInfo = MultipleWindowPresentationModel::GetInstance()->CreateNewMainViewSceneN(homePage); + } + + if (__pNewWindowInfo == null) + { + return false; + } + + if (__operationId.CompareTo(L"http://tizen.org/appcontrol/operation/main") == 0) + { + if(__pAc) + { + r =__pAc->Stop(); + AppLog("AppControl Stop Result %s",GetErrorMessage(r)); + delete __pAc; + __pAc = null; + } + __pAc = AppManager::FindAppControlN(APPCONTROL_PROVIDER_ID_IMAGE_VIEWER, + APPCONTROL_OPERATION_ID_IMAGE_VIEWER); + if (__pAc && __value && __value->GetLength() > 0) + { + AppLog("17jul __value is %S", __value->GetPointer()); + if (__pAc->Start(__value, null, null, null) == E_SUCCESS) + { +// delete pAc; + } + delete __value; + __value = null; + } + } + + ArrayList* pArgList = new(std::nothrow) ArrayList(); + pArgList->Construct(); + pArgList->Add(*__pNewWindowInfo); + /* + * The GoForward call cannot be moved into the MainFrame::OnInitializing + * because when the application is launched from the appcontol, the data(URL) + * is not available for Mainframe, and we cannot pass the url information to + * the Mainframe because logically MainFrame should not know the URL information. + */ + if (E_SUCCESS != pSceneManager->GoForward(ForwardSceneTransition(__pNewWindowInfo->sceneID, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList)) + { + AppLogDebug("CustomAppControl::OnAppInitializing Result = %s", GetLastResult()); + delete pArgList; + __pNewWindowInfo = null; + return false; + } + + delete pArgList; + pArgList = null; + __pNewWindowInfo = null; + + return true; +} + +bool +InternetApp::OnAppWillTerminate(void) +{ + return true; +} + + +bool +InternetApp::OnAppTerminating(AppRegistry& appRegistry, bool forcedTermination) +{ + AppLogDebug("Internet::OnAppTerminating"); + + SettingInfo::RemoveSettingEventListener(*this); + + return true; +} + +void +InternetApp::OnForeground(void) +{ + UiApp* pApp = null; + pApp = UiApp::GetInstance(); + if (pApp != null && pSceneManagementFrame != null && pApp->GetFrameAt(0)->GetShowMode() != FRAME_SHOW_MODE_FULL_SCREEN) + { + pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_FULL_SCREEN); + } + AppLog("InternetApp::OnForeground called"); + + AppLog("InternetApp::OnForeground"); + + AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry(); + String sliderKey("SliderValue"); + + int sliderValue = 10; + + + result r = pAppRegistry->Get(sliderKey, sliderValue); + r = PowerManager::SetScreenBrightness(sliderValue); +// r = PowerManager::RestoreScreenBrightness(); + + AppLog("Settingscreenbrightness to %d result %s",sliderValue , GetErrorMessage(r)); + + Form* pCurrentForm = null; + if(SceneManager::GetInstance()->GetCurrentScene() != null) + pCurrentForm = (SceneManager::GetInstance()->GetCurrentScene()->GetForm()); + if (pCurrentForm) + { + pCurrentForm->SendUserEvent(FORE_GROUND_APP_EVENT, NULL); + } + Frame* pCurrentFrame = null; + pCurrentFrame = Application::GetInstance()->GetAppFrame()->GetFrame(); + + if (pCurrentFrame != null) + { + pCurrentFrame->SetEnabled(true); + pCurrentFrame->Invalidate(true); + } + + if ( __isShowMsg == true ) + { + __isShowMsg = false; + SendUserEvent(FORE_GROUND_APP_EVENT, NULL); + } +} + +void +InternetApp::OnBackground(void) +{ + AppLog("InternetApp::OnBackground"); + Form* pCurrentForm = null; + if(SceneManager::GetInstance()->GetCurrentScene() != null) + pCurrentForm = (SceneManager::GetInstance()->GetCurrentScene()->GetForm()); + if(pCurrentForm) + { + pCurrentForm->SendUserEvent(BACK_GROUND_APP_EVENT, NULL); + } +} + +void +InternetApp::OnLowMemory(void) +{ + +} + +void +InternetApp::OnBatteryLevelChanged(BatteryLevel batteryLevel) +{ + +} + +void +InternetApp::OnScreenOn(void) +{ + +} + +void +InternetApp::OnScreenOff(void) +{ + // TODO: + // Unless there is a strong reason to do otherwise, release resources (such as 3D, media, and sensors) to allow the device + // to enter the sleep mode to save the battery. + // Invoking a lengthy asynchronous method within this listener method can be risky, because it is not guaranteed to invoke a + // callback before the device enters the sleep mode. + // Similarly, do not perform lengthy operations in this listener method. Any operation must be a quick one. +} + +void +InternetApp::OnSettingChanged(Tizen::Base::String& key) +{ + AppLog("InternetApp::OnSettingChanged: %ls", key.GetPointer()); + if (key == L"http://tizen.org/setting/locale.language" || key == L"http://tizen.org/setting/font.size") + { + Terminate(); + } + else if (key == L"http://tizen.org/setting/screen.brightness" ) + { + AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry(); + result r = E_SUCCESS; + int sliderValue = 10; + SettingInfo::GetValue(key,sliderValue); + String sliderKey("SliderValue"); + + if( (sliderValue/10) + 1 > 10) + r = pAppRegistry->Set(sliderKey, 10); + else + r = pAppRegistry->Set(sliderKey, (sliderValue/10) + 1); + pAppRegistry->Save(); + + Form* pCurrentForm = null; + if(SceneManager::GetInstance()->GetCurrentScene() != null) + pCurrentForm = (SceneManager::GetInstance()->GetCurrentScene()->GetForm()); + if (pCurrentForm) + { + AppLog("sending userevent for appcontrol"); + pCurrentForm->SendUserEvent(DEVICE_BRIGHTNESS_CHANGE_EVENT, NULL); + } + + if( (sliderValue/10) + 1 > 10) + r = PowerManager::SetScreenBrightness(10); + else + r = PowerManager::SetScreenBrightness((sliderValue/10) + 1); + // r = PowerManager::RestoreScreenBrightness(); + + } + +} + +void +InternetApp::OnAppControlRequestReceived(RequestId reqId, const String &operationId, const String* pUriScheme, const String *pDataType, const IMap *pArgs) +{ + UiApp* pApp = null; + pApp = UiApp::GetInstance(); + if (pApp != null && pSceneManagementFrame != null) + { + pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_FULL_SCREEN); + + } + + __isShowMsg = false; + + AppLogDebug("ABC::Internet::OnAppControlRequestReceivedN entered %ls",operationId.GetPointer()); + __operationId.Clear(); + __operationId.Append(operationId); + if (operationId.CompareTo(L"http://tizen.org/appcontrol/operation/view") == 0) + { + String urlData; + if (pUriScheme) + { + urlData = *pUriScheme; + } + else + { + int argCount = pArgs->GetCount(); + AppLog("argCount == %d", argCount); + + IList *pValues = pArgs->GetValuesN(); + if(pValues == null) + { + AppLog("pValues == null"); + return; + } + + String url = L"url"; + String* pUrl = dynamic_cast(const_cast(pArgs->GetValue(url))); + if(pUrl == null) + { + delete pValues; + AppLog("pUrl == null"); + return; + } + urlData = *pUrl; + } + AppLog("URL received %ls", urlData.GetPointer()); + if(pSceneManagementFrame) + pSceneManagementFrame->Show(); + + + if (__pNewWindowInfo == null) + { + if (MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList()->GetCount() >= 9) + { + __isShowMsg = true; + return; + } + } + + if (__pNewWindowInfo == null) + { + __pNewWindowInfo = MultipleWindowPresentationModel::GetInstance()->CreateNewMainViewSceneN(urlData, true); + } + + if (__pMultiWindowManager != null && __pMultiWindowManager->GetAllWindowArrayList()->GetCount() != 0) + { + //if the application is running in background and it receives an appcontrol request it will launch a new(std::nothrow) window here, + //otherwise appcontrol request will be handled by OnAppInitialized method + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return; + } + + ArrayList* pArgList = new(std::nothrow) ArrayList(); + pArgList->Construct(); + pArgList->Add(*__pNewWindowInfo); + + if (E_SUCCESS != pSceneManager->GoForward(ForwardSceneTransition(__pNewWindowInfo->sceneID, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList)) + { + AppLogDebug("CustomAppControl::OnAppInitializing Result = %s", GetLastResult()); + delete pArgList; + __pNewWindowInfo = null; + return; + } + + delete pArgList; + + __pNewWindowInfo = null; + } + } + else if (operationId.CompareTo(L"http://tizen.org/appcontrol/operation/main") == 0) + { + if (pArgs) + { + //const String* pVal = (String *) pArgs->GetValue(String(L"http://tizen.org/appcontrol/data/notification")); + String *data = (String *) pArgs->GetValue(String(L"http://tizen.org/appcontrol/data/notification")); + if(data != NULL) + __value = new String(*data); + if (__value && __value->GetLength() > 0) + { + AppLog("17jul rahul __value is %S", __value->GetPointer()); + } + if (__value && __value->GetLength() > 0 && pSceneManagementFrame != null) + { + AppLog("17jul OnAppControlRequestReceived notification"); + HashMap extraData; + extraData.Construct(); + String typeKey = APPCONTROL_SELECT_KEY_IMAGE; + String typeVal = APPCONTROL_SELECT_VALUE_IMAGE; + extraData.Add(&typeKey, &typeVal); + + if(__pAc) + { + result r = __pAc->Stop(); + AppLog("AppControl Stop Result %s",GetErrorMessage(r)); + delete __pAc; + __pAc = null; + } + __pAc = AppManager::FindAppControlN(APPCONTROL_PROVIDER_ID_IMAGE_VIEWER, + APPCONTROL_OPERATION_ID_IMAGE_VIEWER); + if (__pAc) + { + AppLog("17jul __value is %S", __value->GetPointer()); + if (__pAc->Start(__value, null, null, null) == E_SUCCESS) + { +// delete pAc; + } + } + delete __value; + __value = null; + + } + } + } + + AppLogDebug("ABC::Internet::OnAppControlRequestReceivedN Exit"); + return; +} + + +long long +InternetApp::GetAvailableMemory(void) +{ + result r = E_SUCCESS; + + String key(L"http://tizen.org/runtime/storage.available.internal"); + long long allocatedMemory = 0; + + r = RuntimeInfo::GetValue(key, allocatedMemory); + TryCatch(r == E_SUCCESS, , "MyRuntimeInfo: Failed to get value"); + + return allocatedMemory; + + CATCH: + return 0; +} + + +void +InternetApp::OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs) +{ + Form* pCurrentForm = null; + if(SceneManager::GetInstance()->GetCurrentScene() != null) + pCurrentForm = (SceneManager::GetInstance()->GetCurrentScene()->GetForm()); + if (pCurrentForm) + { + AppLog("sending userevent for appcontrol"); + pCurrentForm->SendUserEvent(APPCONTROL_LAUNCH_MAX_LIMIT_REACHED, NULL); + } + + if(requestId == FORE_GROUND_APP_EVENT) + { + if( MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList()->GetCount() >= 9) + { + String strText = CommonUtil::GetString(L"IDS_BR_BODY_COULD_NOT_OPEN_NEW_WINDOW_BECAUSE_YOU_HAVE_ALREADY_OPENED_MAXIMUM_NUMBER"); + MessageBox messageBox; + messageBox.Construct(L"", strText, MSGBOX_STYLE_OK, 3000); + int modalResult = 0; + + messageBox.ShowAndWait(modalResult); + } + } + +} + + diff --git a/src/IntInternetEntry.cpp b/src/IntInternetEntry.cpp new file mode 100644 index 0000000..68c7372 --- /dev/null +++ b/src/IntInternetEntry.cpp @@ -0,0 +1,72 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +/** + * This file contains the Tizen application entry point. + */ +#include "IntInternetApp.h" + +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +_EXPORT_ int OspMain(int argc, char* pArgv[]); +#ifdef _PROFILE +extern void start_profile(void); +extern void end_profile(void); +#else +#define start_profile() +#define end_profile() +#endif + +/** + * The entry function of Tizen application called by the operating system. + */ +int +OspMain(int argc, char* pArgv[]) +{ + result r = E_SUCCESS; + + AppLogDebug("Application started."); + ArrayList* pArgs = new(std::nothrow) ArrayList(); + pArgs->Construct(); + for (int i = 0; i < argc; i++) + pArgs->Add(*(new(std::nothrow) String(pArgv[i]))); + + start_profile(); + r = Tizen::App::UiApp::Execute(InternetApp::CreateInstance, pArgs); + if (IsFailed(r)) + { + AppLogException("Application execution failed-[%s].", GetErrorMessage(r)); + r &= 0x0000FFFF; + } + end_profile(); + + pArgs->RemoveAll(true); + delete pArgs; + pArgs = null; + AppLogDebug("Application finished."); + + return static_cast< int >(r); +} +#ifdef __cplusplus +} +#endif // __cplusplus diff --git a/src/IntMainForm.cpp b/src/IntMainForm.cpp new file mode 100644 index 0000000..0005ffc --- /dev/null +++ b/src/IntMainForm.cpp @@ -0,0 +1,6078 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet MainForm class +/*@file: MainForm.cpp + *@brief: The %MainForm provides the common functionalities for the Main View of the Browser including the addressbar, + * loading,handling events etc. + */ + +#include +#include +#include +#include +#include +#include +//#include + +#include "IntBookmarkData.h" +#include "IntBookmarkPresentationModel.h" +#include "IntCommonLib.h" +#include "IntFaviconManager.h" +#include "IntInternetApp.h" +#include "IntMainForm.h" +#include "IntSceneRegister.h" +#include "IntSettingPresentationModel.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Base::Utility; +using namespace Tizen::Graphics; +using namespace Tizen::Io; +using namespace Tizen::Locales; +using namespace Tizen::Media; +using namespace Tizen::Shell; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Content; +using namespace Tizen::Ui::Scenes; +using namespace Tizen::System; +using namespace Tizen::Web; +using namespace Tizen::Web::Controls; + +static const wchar_t* IDB_SEARCH_INPUT_FIELD_BG = L"I01_toolbar_input_field.#.png"; +static const wchar_t* IDB_FINDWORD_INPUT_FIELD_BG = L"I01_toolbar_input_field_findword.#.png"; +static const wchar_t* IDB_BTN_BACK = L"I01_icon_Back.png"; +static const wchar_t* IDB_BTN_BACK_PRESS = L"I01_icon_Back_press.png"; +static const wchar_t* IDB_CONTRLBAR_ICON_BOOKMARK = L"I01_search_list_icon_favorite.png"; +static const wchar_t* IDB_CONTRLBAR_ICON_BOOKMARK_PRESS = L"I01_search_list_icon_favorite_press.png"; +static const wchar_t* IDB_CONTRLBAR_ICON_MORE = L"I01_icon_more.png"; +static const wchar_t* IDB_CONTRLBAR_ICON_MORE_PRESS = L"I01_icon_more_press.png"; +static const wchar_t* IDB_CONTRLBAR_ICON_NEW_WINDOW = L"I01_icon_plus.png"; +static const wchar_t* IDB_CONTRLBAR_ICON_NEW_WINDOW_PRESS = L"I01_icon_plus_press.png"; +static const wchar_t* IDB_CONTROLBAR_ICON_CREATE_DISABLE = L"I01_controlbar_icon_create_disable.png"; +static const wchar_t* IDB_BUTTON_ON = L"00_button_on.png"; +static const wchar_t* IDB_BUTTON_OFF = L"00_button_off.png"; +static const wchar_t* IDB_ICON_BOOKMARK_OFF_TEMP =L"00_icon_favorite_off_74x74.png"; +static const wchar_t* IDB_ICON_BOOKMARK_ON_TEMP = L"00_icon_favorite_on_74x74.png"; +static const wchar_t* IDS_TIZEN_SERVICE = L"tizen-service"; +static const wchar_t* IDS_APPID = L"AppID"; +static const wchar_t* IDS_KEY = L"key"; +static const wchar_t* IDS_VALUE = L"value"; +static const wchar_t* IDB_TITLE_PROGRESS_BAR_BG = L"I01_title_progress_bar_bg.png"; +static const wchar_t* IDB_TITLE_PROGRESS_BAR = L"I01_title_progress_bar.png"; +//static const wchar_t* IDB_ADDRESS_BAR_BACKGROUND = L"I01_toolbar_bg_02.9.png"; + +const int IDA_BACKBTN_CLICKED = 101; +const int IDA_BOOKMARKBTN_CLICKED = 102; +const int IDA_MOREBTN_CLICKED = 103; +const int IDA_MULTIWINDOWBTN_CLICKED = 104; +const int IDA_NEWWINDOWBTN_CLICKED = 105; +const int IDA_FORWARD_CLICKED = 106; +const int IDA_ADDTOBOOKMARK_CLICKED = 107; +const int IDA_SHARE_CLICKED = 108; +const int IDA_FINDONPAGE_CLICKED = 109; +const int IDA_PRIVATEON_CLICKED = 110; +const int IDA_SETTINGS_CLICKED = 111; +const int IDA_READER_CLOSE_CLICKED = 112; +const int IDA_SMALLFONT_BTN_CLICKED = 113; +const int IDA_LARGEFONT_BTN_CLICKED = 114; +const int IDA_BRIGHTNESS_BTN_CLICKED = 115; +const int IDA_HISTORY_CLICKED = 116; +const int IDA_ADD_TO_BOOKMARKBTN_CLICKED = 117; +const int IDA_ADD_TO_HOME_CLICKED = 118; +const int IDA_SAVED_PAGES_CLICKED = 119; +const int IDA_DESKTOP_VIEW_CLICKED = 120; +const int IDA_SAVE_CLICKED = 121; +const int IDA_PRINT_CLICKED = 122; + +const int IDA_FINDWORD_SEARCH_CLICKED = 201; +const int IDA_FINDWORD_NEXT_CLICKED = 202; +const int IDA_FINDWORD_PREV_CLICKED = 203; +const int IDA_FINDWORD_CLEAR_CLICKED = 204; +const int IDA_FINDWORD_CANCEL_CLICKED = 205; + +const int IDA_COPY_IMAGE_CLICKED = 206; +const int IDA_VIEW_IMAGE_CLICKED = 207; +const int IDA_SAVE_IMAGE_CLICKED = 208; +const int IDA_SHARE_IMAGE_CLICKED = 209; + +const int IDA_COPY_TEXT_CLICKED = 210; +const int IDA_PASTE_TEXT_CLICKED = 211; +const int IDA_FIND_TEXT__CLICKED = 212; +const int IDA_SHARE_TEXT_CLICKED = 213; + +const int IDA_GO_BACK = 214; +const int IDA_GO_FORWARD = 215; +const int IDA_REFRESH_BTN_CLICKED = 216; +const int IDA_STOP_BTN_CLICKED = 217; +const int IDA_CLEAR_URL = 218; +const int IDA_READER_BTN_CLICKED = 219; + + +const int IDA_HYPERLINK_OPEN_CLICKED = 220; +const int IDA_HYPERLINK_COPY_LINK_CLICKED = 221; +const int IDA_HYPERLINK_SAVE_IMAGE_CLICKED = 222; +const int IDA_HYPERLINK_SHARE_IMAGE_CLICKED = 223; + +const int IDA_FINDWORD_CLEAR_RIGHT_TO_LEFT_CLICKED = 224; + +const int DEFAULT_PROGRESS_PERCENTAGE = 10; + +const int MainForm::IDA_FORMAT_BITMAP = 500; +const int MainForm::IDA_FORMAT_DELETE_BITMAP = 501; +const int MainForm::IDA_FORMAT_TITLE_STRING = 502; +const int MainForm::IDA_FORMAT_URL_STRING = 503; +const int MainForm::IDA_CONTEXT_ITEM_DELETE = 504; + +static const int WIDTH_CONTEXT_MENU_BUTTON_PORTRAIT = 336; +static const int WIDTH_CONTEXT_MENU_BUTTON_LANDSCAPE = 800; +static const int HEIGHT_CONTEXT_MENU_BUTTON = 72; + +static const wchar_t* APPCONTROL_OPERATION_ID_IMAGE_VIEWER = L"http://tizen.org/appcontrol/operation/view"; +MainForm::MainForm(void) +{ + __isLongPressedDone = false; + __pHistory = null; + __pAddressbar = null; + // __pMostVisitedSitesPanel = null; + __pMostVisitedListView = null; + __pFooterPanel = null; + __pHitElementResult = null; + __pWindowInfo = null; + __pWebViewer = null; + __pImageMenu = null; + __pOptionMenu = null; + __pFindWordControl = null; + __pFindWordPanelLeftToRight = null; + __pFindWordPanelRightToLeft = null; + __pFindWordBgLabel = null; + __pFindWordBgLabelRightToLeft = null; + __pFindWordEditField = null; + __pFindWordEditFieldRightToLeft = null; + __pFindWordClear = null; + __pFindWordClearRightToLeft = null; + __pFindWordCountLabel = null; + __pFindWordClearRightToLeft = null; + __pFindWordNext = null; + __pFindWordPrev = null; + __previousZoomLevel = 1.0; + __pSaveImage = null; + __currentAddMode = ADDRESSBAR_MODE_LOADING_COMPLETE; + __displayUrl = L""; + __editTextUrl = L""; + __currentSearchStr = L""; + __currentSelectedStr = L""; + __maxOccurrances = 0; + __currentWordIndex = 0; + __distanceMoved = 0; + __isLoaded = false; + //__inputEventToBeSupressed = false; + __isLoadingData = false; + __isLoadingCompleted = false; + __progressPercentage = 0; + __touchPoint1 = Point(-1,-1); + __touchPoint2 = Point(-1,-1); + __longPressPoint = Point(-1,-1); + __pWebReader = null; + // __pReaderPopup = null; + __pReaderData = null; + __pPopUp = null; + __pReaderCloseBtn = null; + //__pNewWindowButton = null; + __pMoreButton = null; + __pMultiWindowButton = null; + __pArticleReaderPanel = null; + __pBlankPanel = null; + __pArticleReaderLabel = null; + __webControlHeight = 0; + __webControlHeightF = 0; + __prevAddressBarMode = ADDRESSBAR_MODE_INVALID; + __curAddressBarMode = ADDRESSBAR_MODE_INVALID; + __pMostVisitedSites = null; + __pFooterUrlField = null; + __pGoBackBtn = null; + __pGoForwardBtn = null; + __pRefreshBtn = null; + __pProgressbarLabel = null; + __pFooterLabel = null; + __pStopBtn = null; + __pClearBtn = null; + __pReaderBtn = null; + __isKeypadOpened = false; + __fontSize = 44; + __pNotification = null; +} + +MainForm::~MainForm(void) +{ + SettingPresentationModel::GetInstance()->RemoveSettingsEventListener(*this); + + if(__pAddressbar) + { + __pAddressbar->SetAddressbarEventListener(null); + } + + if(__pHistory != null) + { + delete __pHistory; + __pHistory = null; + } + + if (__pReaderData != null) + { + delete __pReaderData; + __pReaderData = null; + } + + if (__pPopUp != null) + { + delete __pPopUp; + __pPopUp = null; + } + + if (__pHitElementResult != null) + { + delete __pHitElementResult; + __pHitElementResult = null; + } + if(__pOptionMenu) + { + delete __pOptionMenu; + __pOptionMenu = null; + } + + String* pSelectedScene = NULL; + Object* pValue = NULL; + MultipleWindowPresentationModel::GetInstance()->GetValue(SELECTED_SCENE_ID, &pValue); + pSelectedScene = (String*) pValue; + + /*if (pSelectedScene != null) + { + delete pSelectedScene; + } + MultiWindowPresentationModel::SetValue(SELECTED_SCENE_ID, null);*/ +} + +bool +MainForm::Initialize(void) +{ + Construct(L"IDL_FORM"); + +// SetFormStyle(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_FOOTER); + return true; +} + +result +MainForm::OnInitializing(void) +{ + AppLog("get client area width = %d",GetClientAreaBounds().width); + AppLog("get client area height = %d",GetClientAreaBounds().height); + const int WIDTH_CONTEXT_MENU_BUTTON = 336; + const int HEIGHT_CONTEXT_MENU_BUTTON = 72; + + __fontSize = CommonUtil::GetFontSize(); + Panel* pFooterPanel = null; + + __pSaveImage = new Image(); + __pSaveImage->Construct(); + + // Setup back event listener + SettingPresentationModel::GetInstance()->AddSettingsEventListener(*this); + SceneManager::GetInstance()->AddSceneEventListener(IDSCN_MAIN_VIEW, *this); + AddOrientationEventListener(*this); + + AppLogDebug(" MainForm::OnInitializing ended"); + if (__pMostVisitedSites == null) + { + __pMostVisitedSites = new(std::nothrow) ArrayList(); + __pMostVisitedSites->Construct(); + } + HistoryPresentationModel::GetInstance()->GetMostVisitedSites(*__pMostVisitedSites); + + __pItemContext= new(std::nothrow) ListContextItem(); + __pItemContext->Construct(); + + __pItemContext->AddElement(IDA_CONTEXT_ITEM_DELETE, CommonUtil::GetString(L"IDS_BR_SK_DELETE_ABB"),true); + + + __pItemContext->SetElementBackgroundColor(IDA_CONTEXT_ITEM_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_NORMAL , CONTEXT_ITEM_DELETE_COLOR); + __pItemContext->SetElementBackgroundColor(IDA_CONTEXT_ITEM_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_HIGHLIGHTED , CONTEXT_ITEM_DELETE_COLOR); + __pItemContext->SetElementBackgroundColor(IDA_CONTEXT_ITEM_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_PRESSED , CONTEXT_ITEM_DELETE_COLOR); + + __pItemContextLandscape= new(std::nothrow) ListContextItem(); + __pItemContextLandscape->Construct(); + + __pItemContextLandscape->AddElement(IDA_CONTEXT_ITEM_DELETE, CommonUtil::GetString(L"IDS_BR_SK_DELETE_ABB"), true); + __pItemContextLandscape->SetElementBackgroundColor(IDA_CONTEXT_ITEM_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_NORMAL , CONTEXT_ITEM_DELETE_COLOR); + __pItemContextLandscape->SetElementBackgroundColor(IDA_CONTEXT_ITEM_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_HIGHLIGHTED , CONTEXT_ITEM_DELETE_COLOR); + __pItemContextLandscape->SetElementBackgroundColor(IDA_CONTEXT_ITEM_DELETE,LIST_CONTEXT_ITEM_ELEMENT_STATUS_PRESSED , CONTEXT_ITEM_DELETE_COLOR); + SetFormMenuEventListener(this); + AppLog("SetFormMenuEventListener result %s",GetErrorMessage(GetLastResult())); + return E_SUCCESS; +} + +result +MainForm::InitAddressbar(void) +{ + AppLogDebug("MainForm::InitAddressbar entered"); + + result r = E_SUCCESS; + + if (__pAddressbar != null) + { + return E_SUCCESS; + } + __pAddressbar = new(std::nothrow) Addressbar(); + AppLog("MainForm::InitAddressbar GetClientAreaBounds().width %d",GetClientAreaBounds().width); + r = __pAddressbar->Initialize(Tizen::Graphics::Rectangle(0, 0, GetClientAreaBounds().width, 82)); + if (r != E_SUCCESS) + { + AppLogDebug("Addressbar init failed with %s", GetErrorMessage(r)); + return r; + } + __pAddressbar->SetAddressbarEventListener(this); + AddControl(__pAddressbar); + __pAddressbar->SetBounds(Rectangle(0,0,GetClientAreaBounds().width,__pAddressbar->GetHeight())); + SetControlAlwaysOnTop(*__pAddressbar, true); + __adressPanelPosition = __pAddressbar->GetPosition(); + + AppLogDebug("MainForm::InitAddressbar exit"); + + return E_SUCCESS; +} + +result +MainForm::CreateReaderPanel(void) +{ + AppLogDebug("CreateReaderPanel() width %d",GetClientAreaBounds().width); + result r = E_FAILURE; + WebSetting settings; + Button *pSmallFontBtn = null; + Button *pLargeFontBtn = null; + + __pBlankPanel = new (std::nothrow) Panel(); + __pBlankPanel->Construct(L"IDL_BLANK_PANEL"); + + __pArticleReaderPanel = new (std::nothrow) Panel(); + __pArticleReaderPanel->Construct(L"IDL_ARTICLE_READER"); + + __pReaderCloseBtn = static_cast(__pArticleReaderPanel->GetControl(L"IDC_CLOSE_READER",true)); + if (__pReaderCloseBtn) + { + AppLogDebug("CreateReaderPanel() 6"); + __pReaderCloseBtn->AddActionEventListener(*this); + __pReaderCloseBtn->SetActionId(IDA_READER_CLOSE_CLICKED); + } + + __pWebReader = new (std::nothrow) Web(); + __pWebReader->Construct(Rectangle(2,2, __pArticleReaderPanel->GetWidth()-2,__pArticleReaderPanel->GetHeight() - 96 -2)); + + settings.SetInputStyle(INPUT_STYLE_OVERLAY); + settings.SetFontSize(SettingPresentationModel::GetInstance()->GetReaderFontSize()); + + r = __pWebReader->SetSetting(settings); + if (IsFailed(r)) + AppLogDebug("Web setting add failed with %s", GetErrorMessage(r)); + + + __pArticleReaderLabel = new Label(); + __pArticleReaderLabel->Construct(Rectangle(__pArticleReaderPanel->GetX(),__pArticleReaderPanel->GetY(),__pArticleReaderPanel->GetWidth(),__pArticleReaderPanel->GetHeight()),L""); + + __pBlankPanel->AddControl(__pArticleReaderLabel); + __pBlankPanel->AddControl(__pArticleReaderPanel); + AddControl(__pBlankPanel); + + __pBlankPanel->SetBounds(0,0,GetClientAreaBounds().width,GetClientAreaBounds().height); + __pArticleReaderPanel->SetBounds((GetClientAreaBounds().width - __pArticleReaderPanel->GetWidth())/2,(GetClientAreaBounds().height - __pArticleReaderPanel->GetHeight())/2, __pArticleReaderPanel->GetWidth(), __pArticleReaderPanel->GetHeight()); + __pArticleReaderLabel->SetBounds(__pArticleReaderPanel->GetX(),__pArticleReaderPanel->GetY(),__pArticleReaderPanel->GetWidth(),__pArticleReaderPanel->GetHeight()); + + __pArticleReaderPanel->AddControl(__pWebReader); + __pWebReader->SetBounds(Rectangle(2,2, __pArticleReaderPanel->GetWidth()-2,__pArticleReaderPanel->GetHeight() - 96 -2)); + Bitmap* pBitmap = CommonUtil::GetNinepatchedBitmapN(L"I01_popup_bg.9.png",__pArticleReaderPanel->GetWidth(),__pArticleReaderPanel->GetHeight()); + Bitmap* pSrcBitmap = CommonUtil::GetNinepatchedBitmapN(L"I01_popup_bottom_bg.9.png",__pArticleReaderPanel->GetWidth(),__pArticleReaderPanel->GetHeight()); + + if (pBitmap != null && pSrcBitmap != null) + { + pBitmap->Merge(Point(0,__pArticleReaderPanel->GetHeight() - 96),*pSrcBitmap,Rectangle(0,0,pSrcBitmap->GetWidth(),pSrcBitmap->GetHeight())); + } + __pArticleReaderLabel->SetBackgroundBitmap(*pBitmap); + + pSmallFontBtn = static_cast(__pArticleReaderPanel->GetControl(L"IDC_SMALL_FONT",true)); + if (pSmallFontBtn) + { + pSmallFontBtn->AddActionEventListener(*this); + pSmallFontBtn->SetActionId(IDA_SMALLFONT_BTN_CLICKED); + } + + pLargeFontBtn = static_cast(__pArticleReaderPanel->GetControl(L"IDC_LARGE_FONT",true)); + if (pLargeFontBtn) + { + pLargeFontBtn->AddActionEventListener(*this); + pLargeFontBtn->SetActionId(IDA_LARGEFONT_BTN_CLICKED); + } + + + if (pBitmap != null) + { + delete pBitmap; + pBitmap = null; + } + if (pSrcBitmap != null) + { + delete pSrcBitmap; + pSrcBitmap = null; + } + + SetControlAlwaysOnTop(*__pBlankPanel, true); + //__pBlankPanel->SetControlAlwaysAtBottom(*__pArticleReaderPanel, true); + Invalidate(true); + + return E_SUCCESS; +} + +result +MainForm::InitWebControl() +{ + AppLogDebug("MainForm::InitWebControl enter"); + result r = E_SUCCESS; + AppLogDebug("InitWebControl"); + + if (__pAddressbar == null || __pFooterPanel == null) + return E_FAILURE; + + const int Y_WEBCONTROL_POSITION = 0; + + __webControlHeight = GetHeight() - __pFooterPanel->GetHeight(); + __webControlHeightF = GetHeightF() - __pFooterPanel->GetHeightF(); + + if (__pMostVisitedListView) + { + __pMostVisitedListView->SetShowState(false); + } + if (__pWebViewer != null) + { + AppLogDebug("Already initialized"); + return E_SUCCESS; + } + __pWebViewer = new(std::nothrow) Web(); + if(__pWebViewer == NULL) + { + AppLogDebug("Initialization failed"); + return E_FAILURE; + } + AppLog("GetClientAreaBounds().width %d",GetClientAreaBounds().width); + r = __pWebViewer->Construct(Rectangle(0, Y_WEBCONTROL_POSITION, GetClientAreaBounds().width,__webControlHeight + 12)); + + if (IsFailed(r)) + { + AppLogDebug("Web construct failed with %s", GetErrorMessage(r)); + delete __pWebViewer; + __pWebViewer = null; + return r; + } + else + { + r = AddControl(__pWebViewer); + if (IsFailed(r)) + { + __pWebViewer->Destroy(); + __pWebViewer = null; + AppLogDebug("Web addcontrol failed with %s", GetErrorMessage(r)); + return r; + } + __webControlPosition = __pWebViewer->GetPosition(); + __webControlPositionF = __pWebViewer->GetPositionF(); + r = __pWebViewer->SetSetting(SettingPresentationModel::GetInstance()->GetWebSettings()); + if (IsFailed(r)) + { + AppLogDebug("Web setting add failed with %s", GetErrorMessage(r)); + return r; + } + + __pWebViewer->SetLoadingListener(this); + __pWebViewer->SetWebUiEventListenerF(this); + __pWebViewer->SetWebKeypadEventListener(this); + __pWebViewer->SetFocus(); + __pWebViewer->AddTouchEventListener(*this); + + __pWebViewer->SetCookieEnabled(SettingPresentationModel::GetInstance()->IsCookiesEnabled()); + __pWebViewer->SetTextSearchListener(this); + } + + AppLogDebug("MainForm :before return"); + Invalidate(true); + AppLogDebug("MainForm::InitWebControl Exit"); + + return r; +} + +void +MainForm::SetJavascriptEnabled() +{ + WebSetting settings = __pWebViewer->GetSetting(); + settings.SetJavascriptEnabled(SettingPresentationModel::GetInstance()->IsRunJavascriptEnabled()); + __pWebViewer->SetSetting(settings); +} + +void +MainForm::SetImageLoadEnabled() +{ + WebSetting settings = __pWebViewer->GetSetting(); + settings.SetAutoImageLoadEnabled(SettingPresentationModel::GetInstance()->IsDisplayImagesEnabled()); + __pWebViewer->SetSetting(settings); +} + +result +MainForm::InitFooter(void) +{ + AppLogDebug("MainForm::InitFooter entered"); + Button* pBackButton = null; + Button* pBookmarkButton = null; + Button* pMultiWindowButton = null; + Bitmap *pIconBitmap = null; + Bitmap *pBGBitmap = null; + Label *pBGLabel = null; + + if (__pFooterPanel == null) + { + __pFooterPanel = static_cast< Panel* >(GetControl(L"IDC_FOOTER_PANEL", true)); + } + + if (__pFooterPanel == null) + { + return E_FAILURE; + } + + SetControlAlwaysOnTop(*__pFooterPanel, true); + + __pFooterLabel = static_cast< Label* >(GetControl(L"IDC_FOOTER_LABEL", true)); + if ( __pFooterLabel == NULL ) + { + return E_FAILURE; + } +// __pFooterPanel->SetBackgroundColor(Color(255,0,0)); + //__pFooterPanel->SetBackgroundColor(CUSTOM_COLOR_TRANSPARENT); + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_SEARCH_INPUT_FIELD_BG, __pFooterLabel->GetWidth(), __pFooterLabel->GetHeight()); + if (pBitmap != null) + { + __pFooterLabel->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + + __pMultiWindowButton = static_cast< Button* >(GetControl(L"IDC_MULTIWINDOW_BUTTON", true)); + + if ( __pMultiWindowButton == NULL ) + { + return E_FAILURE; + } + + + SetFormBackEventListener(this); + AppLog("SetFormBackEventListener result %s",GetErrorMessage(GetLastResult())); + if (__pMultiWindowButton != null) + { + Bitmap* pBitmap = null; + Bitmap* pPressedBitmap = null; + String imagePath = "I01_toolbar_icon_windows_manager_0"; + String pressedImagePath = "I01_toolbar_icon_windows_manager_0"; + int totalCount = MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList()->GetCount(); + imagePath.Append(totalCount); + imagePath.Append(".png"); + + pressedImagePath.Append(totalCount); + pressedImagePath.Append("_press.png"); + + pBitmap = AppResource::GetInstance()->GetBitmapN(imagePath); + pPressedBitmap = AppResource::GetInstance()->GetBitmapN(pressedImagePath); + if ( pBitmap == null ) + { + return E_FAILURE; + } + + Point startPoint = Point((__pMultiWindowButton->GetWidth() - pBitmap->GetWidth())/2,(__pMultiWindowButton->GetHeight() - pBitmap->GetHeight())/2); + if (pBitmap != null) + { + __pMultiWindowButton->SetNormalBitmap(startPoint, *pBitmap); + __pMultiWindowButton->SetPressedBitmap(startPoint, *pPressedBitmap); + + delete pBitmap; + } + + __pMultiWindowButton->AddActionEventListener(*this); + __pMultiWindowButton->SetActionId(IDA_MULTIWINDOWBTN_CLICKED); + if(pPressedBitmap) + { + delete pPressedBitmap; + pPressedBitmap = null; + } + } + + if (__pMoreButton) + { + Bitmap* pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_CONTRLBAR_ICON_MORE); + Bitmap* pPressedBitmap = AppResource::GetInstance()->GetBitmapN(IDB_CONTRLBAR_ICON_MORE_PRESS); + if (pBitmap != null) + { + Point startPoint((__pMoreButton->GetWidth() - pBitmap->GetWidth())/2,(__pMoreButton->GetHeight() - pBitmap->GetHeight())/2 ); + __pMoreButton->SetNormalBitmap(startPoint, *pBitmap); + __pMoreButton->SetPressedBitmap(startPoint, *pPressedBitmap); + + delete pBitmap; + } + __pMoreButton->AddActionEventListener(*this); + __pMoreButton->SetActionId(IDA_MOREBTN_CLICKED); + } + + //Add the editfield for url + __pFooterUrlField = static_cast (GetControl(L"IDC_URL_EDIT_FIELD",true)); + if (__pFooterUrlField == NULL) + { + return E_INVALID_KEY; + } + + __pFooterUrlField->SetOverlayKeypadCommandButtonVisible(false); + __pFooterUrlField->SetKeypadAction(KEYPAD_ACTION_GO); + __pFooterUrlField->AddKeypadEventListener(*this); + __pFooterUrlField->SetPropagatedTouchEventListener(this); + __pFooterUrlField->AddFocusEventListener(*this); + + if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_MOST_VISITED_SITES")) == 0) + { + __pFooterUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL")); + } + else if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_BLANK_PAGE")) == 0) + { + __pFooterUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_BLANK_PAGE")); + } + else + { + //__pUrlField->SetText(SettingPresentationModel::GetInstance()->GetFavoriteURL()); + __pFooterUrlField->SetGuideText(CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_OR_ENTER_URL")); + } + + + //Add the go Back Button + __pGoBackBtn = static_cast (GetControl(L"IDC_PAGEBACK_BUTTON",true)); + if (__pGoBackBtn == NULL) + { + AppLogDebug("__pGoBackBtn Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + __pGoBackBtn->SetActionId(IDA_GO_BACK); + __pGoBackBtn->AddActionEventListener(*this); + + //Add the go forward Button + __pGoForwardBtn = static_cast (GetControl(L"IDC_PAGEFORWARD_BUTTON",true)); + if (__pGoForwardBtn == NULL) + { + AppLogDebug("Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + __pGoForwardBtn->SetActionId(IDA_GO_FORWARD); + __pGoForwardBtn->AddActionEventListener(*this); + if (__pWebViewer && __pWebViewer->CanGoForward()) + { + SetForwardButtonEnabled(true); + } + else + { + SetForwardButtonEnabled(false); + } + + __pRefreshBtn = static_cast (GetControl(L"IDC_REFRESH_BUTTON",true)); + if (__pRefreshBtn == NULL) + { + AppLogDebug("Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + + __pRefreshBtn->SetActionId(IDA_REFRESH_BTN_CLICKED); + __pRefreshBtn->AddActionEventListener(*this); + __pRefreshBtn->SetShowState(true); + + //Add the backround label for displaying progressbar + __pProgressbarLabel = static_cast (GetControl(L"IDC_PROGRESS_BAR_LABEL",true)); + if (__pProgressbarLabel == NULL) + { + AppLogDebug("__pProgressbarLabel Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + __pProgressbarLabel->SetShowState(false); + + __pStopBtn = static_cast (GetControl(L"IDC_STOP_BUTTON",true)); + if (__pStopBtn == NULL) + { + AppLogDebug("Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + __pStopBtn->SetActionId(IDA_STOP_BTN_CLICKED); + __pStopBtn->AddActionEventListener(*this); + __pStopBtn->SetShowState(false); + + __pClearBtn = static_cast (GetControl(L"IDC_CLEAR_BUTTON",true)); + if (__pClearBtn == NULL) + { + AppLogDebug("Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + __pClearBtn->SetActionId(IDA_CLEAR_URL); + __pClearBtn->AddActionEventListener(*this); + __pClearBtn->SetShowState(false); + + __pReaderBtn = static_cast (GetControl(L"IDC_READER_BUTTON",true)); + if (__pReaderBtn == NULL) + { + AppLogDebug("Control not found returning E_INVALID_KEY"); + return E_INVALID_KEY; + } + __pReaderBtn->SetActionId(IDA_READER_BTN_CLICKED); + __pReaderBtn->AddActionEventListener(*this); + __pReaderBtn->SetShowState(false); + + // __pFooterPanel->Invalidate(true); + if(__isKeypadOpened == false && __pAddressbar && __pAddressbar->GetShowState() == false) + { +// AppLog("asdasdasdasda"); + __pFooterPanel->SetShowState(true); + } + else if(__pAddressbar == null) + { + __pFooterPanel->SetShowState(true); + } + else + __pFooterPanel->SetShowState(false); + + SetAddressbarMode(GetAddressbarMode()); + AppLogDebug("MainForm::InitFooter exit"); + return E_SUCCESS; +} + +result +MainForm::InitOptionMenu() +{ + result r = E_SUCCESS; + bool isPrivateBrowsing = false; + Bitmap* pBitmap = null; + + if (__pOptionMenu != null) + { + __pOptionMenu->SetFocusable(true); + __pOptionMenu->Invalidate(true); + return r; + } + + __pOptionMenu = new(std::nothrow) OptionMenu(); + r = __pOptionMenu->Construct(); + TryCatch(!IsFailed(r),,"Contextmenu creation failed with%s",GetErrorMessage(r)); + + __pOptionMenu->SetFocusable(true); + isPrivateBrowsing = SettingPresentationModel::GetInstance()->GetPrivateOn(); + + + if (isPrivateBrowsing == true) + { + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_BUTTON_ON); + } + else + { + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_BUTTON_OFF); + } + + r = __pOptionMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_BOOKMARK"), IDA_BOOKMARKBTN_CLICKED); + + if ( pBitmap != NULL) + { + __pOptionMenu->AddItem(CommonUtil::GetString(L"IDS_BR_BODY_PRIVACY_AND_SECURITY_ABB"), IDA_PRIVATEON_CLICKED,*pBitmap); + delete pBitmap; + } + r = __pOptionMenu->AddItem(CommonUtil::GetString(L"IDS_BR_TAB_HISTORY"), IDA_HISTORY_CLICKED); + r = __pOptionMenu->AddItem(CommonUtil::GetString(L"IDS_COM_OPT_BRIGHTNESS"), IDA_BRIGHTNESS_BTN_CLICKED); + r = __pOptionMenu->AddItem(CommonUtil::GetString(L"IDS_COM_BODY_SETTINGS"), IDA_SETTINGS_CLICKED); + + + __pOptionMenu->SetMaxVisibleItemsCount(6); + __pOptionMenu->SetShowState(false); + __pOptionMenu->AddActionEventListener(*this); + SetControlAlwaysOnTop(*__pOptionMenu, true); + + CATCH: + return r; +} + +result MainForm::InitImageContextMenu(Tizen::Graphics::Point p) +{ + result r = E_SUCCESS; + ContextMenuAnchorDirection direction = CONTEXT_MENU_ANCHOR_DIRECTION_AUTO; + String srcUrl = __pHitElementResult->GetAttributeValue(L"src"); + + AppLog("MainForm::InitImageContextMenu clicked on image"); + if (__pImageMenu != null) + { + delete __pImageMenu; + __pImageMenu = null; + } + if(GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT || GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT_REVERSE) + { + p.y = p.y + 54; + } + + __pImageMenu = new (std::nothrow) ContextMenu(); + r = __pImageMenu->Construct(p, CONTEXT_MENU_STYLE_LIST, direction); + TryCatch(!IsFailed(r),, "Context image menu creation failed with%s",GetErrorMessage(r)); + + + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_COPY_IMAGE"),IDA_COPY_IMAGE_CLICKED); + AppLog("srcUrl %ls __pWebViewer->GetUrl() %ls",srcUrl.GetPointer(),__pWebViewer->GetUrl().GetPointer()); + + if(__pWebViewer && srcUrl.Equals(__pWebViewer->GetUrl(),false) == false) + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_VIEW_IMAGE"),IDA_VIEW_IMAGE_CLICKED); + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_SAVE_IMAGE"),IDA_SAVE_IMAGE_CLICKED); + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_SHARE"),IDA_SHARE_IMAGE_CLICKED); + __pImageMenu->SetMaxVisibleItemsCount(4); + __pImageMenu->AddActionEventListener(*this); + SetControlAlwaysOnTop(*__pImageMenu, true); + __pImageMenu->SetFocusable(true); + + CATCH: return r; +} + +result +MainForm::InitImageLinkContextMenu(Tizen::Graphics::Point p) +{ + result r = E_SUCCESS; + ContextMenuAnchorDirection direction = CONTEXT_MENU_ANCHOR_DIRECTION_AUTO; + + AppLog("MainForm::InitImageContextMenu clicked on image"); + if (__pImageMenu != null) + { + delete __pImageMenu; + __pImageMenu = null; + } + +// if(__pAddressbar->GetShowState() == true) +// p.y = p.y + __pAddressbar->GetHeight(); + if(GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT || GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT_REVERSE) + { + p.y = p.y + 54; + } + + __pImageMenu = new (std::nothrow) ContextMenu(); + r = __pImageMenu->Construct(p, CONTEXT_MENU_STYLE_LIST, direction); + TryCatch(!IsFailed(r),, "Context image menu creation failed with%s",GetErrorMessage(r)); + + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_BODY_OPEN_IN_NEW_WINDOW"),IDA_HYPERLINK_OPEN_CLICKED); + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_COPY_LINK_URL"),IDA_HYPERLINK_COPY_LINK_CLICKED); + //r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_SAVE_IMAGE"),IDA_HYPERLINK_SAVE_IMAGE_CLICKED); + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_SHARE"),IDA_HYPERLINK_SHARE_IMAGE_CLICKED); + + __pImageMenu->SetMaxVisibleItemsCount(3); + __pImageMenu->AddActionEventListener(*this); + SetControlAlwaysOnTop(*__pImageMenu, true); + __pImageMenu->SetFocusable(true); + + CATCH: return r; + +} + +result +MainForm::InitSelectTextContextMenu(Point p, bool pasteOption, bool onlyPasteOption = false) +{ + result r = E_SUCCESS; + bool clipboardAvailable = true; + ContextMenuAnchorDirection direction = CONTEXT_MENU_ANCHOR_DIRECTION_AUTO; + + AppLog("MainForm::InitSelectTextContextMenu clicked on text"); + if (__pImageMenu != null) + { + delete __pImageMenu; + __pImageMenu = null; + } +// Point q(0,0); +// __pWebViewer->GetBlockRange(p,q); + + if(p.y < 150) + { + p.y = p.y + 50; + direction = CONTEXT_MENU_ANCHOR_DIRECTION_DOWNWARD; + } + else + { + direction = CONTEXT_MENU_ANCHOR_DIRECTION_UPWARD; + } + + + Clipboard* pClipboard = Clipboard::GetInstance(); + + if(pClipboard == null) + { + clipboardAvailable = false; + } + else + { + // Retrieves a latest item + ClipboardItem* pItem = pClipboard->RetrieveLatestItemN(CLIPBOARD_DATA_TYPE_TEXT | CLIPBOARD_DATA_TYPE_HTML); + + if(pItem == null) + { + clipboardAvailable = false; + } + else + { + //Gets data from the clipboard item + String* pString = dynamic_cast(pItem->GetData()); + + if(pString == null) + { + clipboardAvailable = false; + } + } + } + if(clipboardAvailable == false && onlyPasteOption == true) + { + return E_FAILURE; + } + + __pImageMenu = new (std::nothrow) ContextMenu(); + r = __pImageMenu->Construct(p, CONTEXT_MENU_STYLE_GRID, direction); + TryCatch(!IsFailed(r),, "Context image menu creation failed with%s",GetErrorMessage(r)); + + if(onlyPasteOption == false) + { + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_COM_OPT_COPY"),IDA_COPY_TEXT_CLICKED); + } + if ((pasteOption || onlyPasteOption) && clipboardAvailable == true) + { + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_COM_BODY_PASTE"),IDA_PASTE_TEXT_CLICKED); + } + if(onlyPasteOption == false) + { + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_FIND_ON_PAGE_ABB"),IDA_FIND_TEXT__CLICKED); + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_SHARE"),IDA_SHARE_TEXT_CLICKED); + } + + __pImageMenu->SetMaxVisibleItemsCount(3); + __pImageMenu->AddActionEventListener(*this); + SetControlAlwaysOnTop(*__pImageMenu, true); + __pImageMenu->SetFocusable(true); + + CATCH: return r; + +} + +result +MainForm::InitSelectTextContextMenuF(FloatPoint p, bool pasteOption, bool onlyPasteOption = false) +{ + result r = E_SUCCESS; + bool clipboardAvailable = true; + ContextMenuAnchorDirection direction = CONTEXT_MENU_ANCHOR_DIRECTION_AUTO; + + AppLog("MainForm::InitSelectTextContextMenu clicked on text"); + if (__pImageMenu != null) + { + delete __pImageMenu; + __pImageMenu = null; + } +// FloatPoint q(0.0,0.0); +// __pWebViewer->GetBlockRange(p,q); + if(p.y < 0) + p.y =0; + if(p.y < 150) + { + p.y = p.y + 100; + if(GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE ) + { + p.y = p.y - 50; + } + direction = CONTEXT_MENU_ANCHOR_DIRECTION_DOWNWARD; + } + else if(__pWebViewer != null && (p.y > (__pWebViewer->GetHeight() + __pWebViewer->GetY()))) + { + p.y = __pWebViewer->GetHeight() + __pWebViewer->GetY(); + } + else + { + if(GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE ) + { + AppLog("asdasdafdsfdgfd"); + p.y = p.y - 50; + } + direction = CONTEXT_MENU_ANCHOR_DIRECTION_UPWARD; + } + + + Clipboard* pClipboard = Clipboard::GetInstance(); + + if(pClipboard == null) + { + clipboardAvailable = false; + } + else + { + // Retrieves a latest item + ClipboardItem* pItem = pClipboard->RetrieveLatestItemN(CLIPBOARD_DATA_TYPE_TEXT | CLIPBOARD_DATA_TYPE_HTML); + + if(pItem == null) + { + clipboardAvailable = false; + } + else + { + //Gets data from the clipboard item + String* pString = dynamic_cast(pItem->GetData()); + + if(pString == null) + { + clipboardAvailable = false; + } + } + } + if(clipboardAvailable == false && (onlyPasteOption == true || __pHitElementResult->GetAttributeValue("type").Equals(L"password",false) == true)) + { + return E_FAILURE; + } + __pImageMenu = new (std::nothrow) ContextMenu(); + r = __pImageMenu->Construct(p, CONTEXT_MENU_STYLE_GRID, direction); + TryCatch(!IsFailed(r),, "Context image menu creation failed with%s",GetErrorMessage(r)); + + if(onlyPasteOption == false && __pHitElementResult->GetAttributeValue("type").Equals(L"password",false) == false) + { + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_COM_OPT_COPY"),IDA_COPY_TEXT_CLICKED); + } + if ((pasteOption || onlyPasteOption) && clipboardAvailable == true) + { + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_COM_BODY_PASTE"),IDA_PASTE_TEXT_CLICKED); + } + if(onlyPasteOption == false && __pHitElementResult->GetAttributeValue("type").Equals(L"password",false) == false) + { + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_FIND_ON_PAGE_ABB"),IDA_FIND_TEXT__CLICKED); + r = __pImageMenu->AddItem(CommonUtil::GetString(L"IDS_BR_OPT_SHARE"),IDA_SHARE_TEXT_CLICKED); + } + + __pImageMenu->SetMaxVisibleItemsCount(3); + __pImageMenu->AddActionEventListener(*this); + SetControlAlwaysOnTop(*__pImageMenu, true); + __pImageMenu->SetFocusable(true); + + CATCH: return r; + +} + +result +MainForm::InitFindWordPanel(void) +{ + result r = E_SUCCESS; + Bitmap *pIconBitmap = null; + + if (__pFindWordControl != null) + { + AppLogDebug("Findword panel already initialized"); + if (__pFindWordBgLabel != null) + { + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_FINDWORD_INPUT_FIELD_BG, __pFindWordBgLabel->GetWidth(), __pFindWordBgLabel->GetHeight()); + if (pBitmap != null) + { + __pFindWordBgLabel->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + } + if (__pFindWordBgLabelRightToLeft != null) + { + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_FINDWORD_INPUT_FIELD_BG, __pFindWordBgLabelRightToLeft->GetWidth(), __pFindWordBgLabelRightToLeft->GetHeight()); + if (pBitmap != null) + { + __pFindWordBgLabelRightToLeft->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + } + if(__pAddressbar) + __pAddressbar->SetShowState(false); + + if(__isKeypadOpened == false) + __pFooterPanel->SetShowState(true); + return r; + } + + __pFindWordControl = new (std::nothrow) Panel(); + r = __pFindWordControl->Construct(L"IDL_FIND_ON_PAGE"); + if (IsFailed(r)) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + AddControl(__pFindWordControl); + __pFindWordControl->SetBounds(0,0, __pFindWordControl->GetWidth(), __pFindWordControl->GetHeight()); + SetControlAlwaysOnTop(*__pFindWordControl,true); + __pFindWordControl->SetShowState(false); + __pFindWordControl->Invalidate(false); + + __pFindWordPanelLeftToRight = static_cast(__pFindWordControl->GetControl(L"IDC_PANEL1", true)); + __pFindWordPanelLeftToRight->SetShowState(true); + + __pFindWordPanelRightToLeft = static_cast(__pFindWordControl->GetControl(L"IDC_PANEL2", true)); + __pFindWordPanelRightToLeft->SetShowState(false); + + __pFindWordBgLabel = static_cast(__pFindWordControl->GetControl(L"IDC_LABEL1", true)); + if (__pFindWordBgLabel != null) + { + Panel* pPanel1 = static_cast(__pFindWordControl->GetControl(L"IDC_PANEL1", true)); + Rectangle pRect = pPanel1->GetBounds(); + pRect.x = pRect.y = 0; + __pFindWordBgLabel->SetBounds(pRect); + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(L"I01_search_input_field_bg.#.png", __pFindWordBgLabel->GetWidth(), __pFindWordBgLabel->GetHeight()); + if (pBitmap != null) + { + AppLogDebug("InitFindWordPanel: Coming here"); + __pFindWordBgLabel->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + else + { + AppLogDebug("InitFindWordPanel: shouldn't Come here"); + } + } + + __pFindWordBgLabelRightToLeft = static_cast(__pFindWordControl->GetControl(L"IDC_LABEL2", true)); + if (__pFindWordBgLabelRightToLeft != null) + { + Panel* pPanel1 = static_cast(__pFindWordControl->GetControl(L"IDC_PANEL1", true)); + Rectangle pRect = pPanel1->GetBounds(); + pRect.x = pRect.y = 0; + __pFindWordBgLabelRightToLeft->SetBounds(pRect); + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(L"I01_search_input_field_bg.#.png", __pFindWordBgLabel->GetWidth(), __pFindWordBgLabel->GetHeight()); + if (pBitmap != null) + { + AppLogDebug("InitFindWordPanel: Coming here"); + __pFindWordBgLabelRightToLeft->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + else + { + AppLogDebug("InitFindWordPanel: shouldn't Come here"); + } + } + + Button* pfindWordCancel = null; + pfindWordCancel = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_CANCEL", true)); + if (pfindWordCancel == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + pfindWordCancel->SetActionId(IDA_FINDWORD_CANCEL_CLICKED); + pfindWordCancel->AddActionEventListener(*this); + + __pFindWordClear = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_CLEAR", true)); + if (__pFindWordClear == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + + __pFindWordClearRightToLeft = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_CLEAR2", true)); + if (__pFindWordClearRightToLeft == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + + __pFindWordClear->SetActionId(IDA_FINDWORD_CLEAR_CLICKED); + __pFindWordClear->AddActionEventListener(*this); + + __pFindWordClearRightToLeft->SetActionId(IDA_FINDWORD_CLEAR_RIGHT_TO_LEFT_CLICKED); + __pFindWordClearRightToLeft->AddActionEventListener(*this); + + __pFindWordNext = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_NEXT", true)); + if (__pFindWordNext == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + + __pFindWordNext->SetActionId(IDA_FINDWORD_NEXT_CLICKED); + __pFindWordNext->AddActionEventListener(*this); + + __pFindWordPrev = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_PREV", true)); + if (__pFindWordPrev == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + + __pFindWordPrev->SetActionId(IDA_FINDWORD_PREV_CLICKED); + __pFindWordPrev->AddActionEventListener(*this); + + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); + + __pFindWordCountLabel = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_COUNT_LABEL", true)); + if (__pFindWordCountLabel == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + __pFindWordCountLabel->SetText(L"0/0"); + + __pFindWordCountLabelRightToLeft = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_COUNT_LABEL2", true)); + if (__pFindWordCountLabelRightToLeft == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + __pFindWordCountLabelRightToLeft->SetText(L"0/0"); + + __pFindWordEditField = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_WORD_EDITFIELD", true)); + if (__pFindWordEditField == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + __pFindWordEditField->AddTextEventListener(*this); + __pFindWordEditField->AddKeypadEventListener(*this); + __pFindWordEditField->SetOverlayKeypadCommandButtonVisible(false); + __pFindWordEditField->SetColor(EDIT_STATUS_HIGHLIGHTED, Color(0x00, 0x00, 0x00, 0x00)); + + __pFindWordEditFieldRightToLeft = static_cast(__pFindWordControl->GetControl(L"IDC_FIND_WORD_EDITFIELD2", true)); + if (__pFindWordEditFieldRightToLeft == null) + { + AppLogException("There is some problem in the xml file. Please check."); + return E_FAILURE; + } + __pFindWordEditFieldRightToLeft->AddTextEventListener(*this); + __pFindWordEditFieldRightToLeft->AddKeypadEventListener(*this); + __pFindWordEditFieldRightToLeft->SetOverlayKeypadCommandButtonVisible(false); + __pFindWordEditFieldRightToLeft->SetColor(EDIT_STATUS_HIGHLIGHTED, Color(0x00, 0x00, 0x00, 0x00)); + + if(__pAddressbar) + __pAddressbar->SetShowState(false); + + if(__isKeypadOpened == false) + __pFooterPanel->SetShowState(true); + return r; +} + +ListItemBase* +MainForm::CreateItem (int index, int itemWidth) +{ + Rectangle listImageRect; + Rectangle pagetTitleRect; + Rectangle pageURLRect; + Rectangle deleteImageRect; + String pageTitle(L""); + String pageURL(L""); + result r = E_SUCCESS; + Bitmap* pListIconImage = null; + + + History* pHistory = static_cast < History* >(__pMostVisitedSites->GetAt(index)); + if(pHistory == null) + { + return null; + } + AppResource* pAppResource = Application::GetInstance()->GetAppResource(); + if ( pAppResource == NULL ) + { + return null; + } + ListAnnexStyle style = LIST_ANNEX_STYLE_NORMAL; + + CustomItem* pItem = new(std::nothrow) CustomItem(); + pageTitle = pHistory->GetHistoryTitle(); + pageURL = pHistory->GetHistoryUrl(); + + if (pageURL.GetLength() == 0) + { + String nourl; + pAppResource->GetString(L"IDS_BR_BODY_BLANK_PAGE", nourl); + pageURL = L"<"+ nourl +">"; + + } + + Rectangle screenBounds = GetBounds(); + if (pItem != null) + { + r = pItem->Construct(Dimension(itemWidth, 128 + (__fontSize - 44)), style); + } + if (IsFailed(r)) + { + delete pItem; + return NULL; + } + + + Bitmap* pBitmap = pHistory->GetFavIconBitmap(); + + if ( pBitmap != NULL) + { + pListIconImage = new Bitmap(); + pListIconImage->Construct(*pBitmap,Rectangle(0,0,pBitmap->GetWidth(),pBitmap->GetHeight())); + delete pBitmap; + } + + if(pListIconImage == null) + { + pListIconImage = pAppResource->GetBitmapN(L"I01_icon_default_favicon.png"); + } + + if ( pListIconImage != NULL) + { + listImageRect.SetBounds(screenBounds.x + 16, screenBounds.y + 28 + (__fontSize - 44)/2 , 72, 72); + pagetTitleRect.SetBounds(listImageRect.x + 72 + 16,10, screenBounds.width - 2 * pListIconImage->GetWidth() - 120, 72 + (__fontSize - 44)); + pageURLRect.SetBounds(pagetTitleRect.x, pagetTitleRect.y + pagetTitleRect.height, screenBounds.width - 2 * pListIconImage->GetWidth() - 120, 48); + + + if (pItem != null && pListIconImage != NULL) + { + pItem->AddElement(listImageRect, IDA_FORMAT_BITMAP, *pListIconImage, null, null); + } + } + + if (pageTitle.CompareTo(L"") != 0) + { + if (pItem != null) + { + pItem->AddElement(pagetTitleRect, IDA_FORMAT_TITLE_STRING, pageTitle, __fontSize, CUSTOM_COLOR_TRANSPARENT, CUSTOM_COLOR_TRANSPARENT, CUSTOM_COLOR_TRANSPARENT, true); + } + } + + if (pageURL.CompareTo(L"") != 0) + { + if (pItem != null) + { + pItem->AddElement(pageURLRect, IDA_FORMAT_URL_STRING, pageURL, 32, CUSTOM_COLOR_GREY, CUSTOM_COLOR_LISTVIEW_TEXT, CUSTOM_COLOR_LISTVIEW_TEXT, true); + } + } + + + if(GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT || GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT_REVERSE) + { + if ( __pItemContext!= NULL) + { + if (pItem != null) + { + pItem->SetContextItem(__pItemContext); + } + } + } + else + { + if ( __pItemContextLandscape!= NULL) + { + if (pItem != null) + { + pItem->SetContextItem(__pItemContextLandscape); + } + } + } + if( pListIconImage != NULL) + { + delete pListIconImage; + pListIconImage = null; + } + + return pItem; +} + +bool +MainForm::DeleteItem (int index, Tizen::Ui::Controls::ListItemBase *pItem, int itemWidth) +{ + delete pItem; + return true; +} + +int +MainForm::GetItemCount (void) +{ + if(__pMostVisitedSites != null) + { + __pMostVisitedSites->RemoveAll(true); + } + HistoryPresentationModel::GetInstance()->GetMostVisitedSites(*__pMostVisitedSites); + if(__pMostVisitedSites != null) + { + return __pMostVisitedSites->GetCount(); + } + else + return 0; +} + +void +MainForm::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state) +{ + AppLog("MainForm::OnListViewContextItemStateChanged called"); + if(__pMostVisitedSites != null) + { + History* pHistory = static_cast < History* >(__pMostVisitedSites->GetAt(index)); + if (pHistory != null) + { + String url = pHistory->GetHistoryUrl(); + + HistoryPresentationModel::GetInstance()->DeleteHistory(url); + __pMostVisitedListView->UpdateList(); + } + } +} + +void +MainForm::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status) +{ + AppLog("MainForm::OnListViewItemStateChanged called"); + History* pHistory = static_cast < History* >(__pMostVisitedSites->GetAt(index)); + String url = pHistory->GetHistoryUrl(); + if (url != null) + { + LoadUrl(url); + } +} + +void +MainForm::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction) +{ + +} + +result +MainForm::OnTerminating(void) +{ + result r = E_SUCCESS; + + RemoveOrientationEventListener(*this); + + if(__pAddressbar) + { + __pAddressbar->SetAddressbarEventListener(null); + } + + if(__pWebViewer) + { + __pWebViewer->RemoveTouchEventListener(*this); + __pWebViewer->SetWebUiEventListenerF(null); + __pWebViewer->SetWebKeypadEventListener(null); + __pWebViewer->SetTextSearchListener(null); + } + + + if (__pItemContext) + { + delete __pItemContext; + } + if (__pItemContextLandscape) + { + delete __pItemContextLandscape; + } + if (__pSaveImage) + { + delete __pSaveImage; + } + if (__pMostVisitedSites) + { + __pMostVisitedSites->RemoveAll(true); + delete __pMostVisitedSites; + } + return r; +} + +void +MainForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId) +{ + result r = E_SUCCESS; + + AppLogDebug("Clicked : %d", actionId); + switch (actionId) + { + case IDA_BACKBTN_CLICKED: + { + if(__pImageMenu && __pImageMenu->GetShowState() == true) + { + AppLog("Hiding the menu"); + __pImageMenu->SetShowState(false); + } + if (__pWebViewer && __pWebViewer->CanGoBack()) + { + __pWebViewer->GoBack(); + } + else if(__pWindowInfo->isJavascriptInitiated == false) + { + UiApp* pApp = null; + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + } + } + else + { + UiApp* pApp = null; + WindowInfo* pWindowInfo = null; + int totalCount = 0; + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return; + } + ArrayList* pAllWindowList = MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList(); + if (pAllWindowList == NULL) + { + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + } + } + if (pAllWindowList != null) + { + totalCount = pAllWindowList->GetCount(); + } + for (int count = 0; count < totalCount; count++) + { + pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(count)); + if (pWindowInfo == null) + { + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + } + } + else + { + if (pSceneManager->GetCurrentSceneId() == pWindowInfo->sceneID && pWindowInfo->isJavascriptInitiated == true) + { + r = SceneRegister::DestroyAndUnRegisterScene(pWindowInfo->sceneID); + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + r = pAllWindowList->RemoveAt(count, true); + __pWindowInfo = null; + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + if(count > 0) + { + pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(count - 1)); + } + else + { + pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(pAllWindowList->GetCount() - 1)); + } + if (pWindowInfo == null) + { + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + return; + } + } + else + { + r = pSceneManager->GoForward(ForwardSceneTransition(pWindowInfo->sceneID ,SCENE_TRANSITION_ANIMATION_TYPE_NONE,SCENE_HISTORY_OPTION_ADD_HISTORY,SCENE_DESTROY_OPTION_DESTROY)); +// r = pSceneManager->GoBackward(BackwardSceneTransition(pWindowInfo->sceneID ,SCENE_TRANSITION_ANIMATION_TYPE_NONE)); + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + } + break; + } + } + } + } + } + break; + + case IDA_FORWARD_CLICKED: + if (__pWebViewer == null) + return; + + if (__pWebViewer->CanGoForward()) + { + __pWebViewer->GoForward(); + } + __pOptionMenu->SetShowState(false); + __pOptionMenu->Invalidate(false); + break; + + case IDA_FINDONPAGE_CLICKED: + { + AppLogDebug("MainForm::OnActionPerformed findword clicked"); + __currentSearchStr.Clear(); + + InitFindWordPanel(); + __pOptionMenu->SetShowState(false); + __pOptionMenu->Invalidate(false); + + ShowFindWordPanel(true); + + if(__pFindWordPanelLeftToRight && __pFindWordPanelLeftToRight->GetShowState() == true) + { + __pFindWordEditField->SetFocus(); + } + else + { + __pFindWordEditFieldRightToLeft->SetFocus(); + } + } + break; + case IDA_PRIVATEON_CLICKED: + { + result r = E_SUCCESS; + int itemIndex = 0; + bool isPrivateBrowsing = SettingPresentationModel::GetInstance()->GetPrivateOn(); + Bitmap* pBitmap = null; + if (isPrivateBrowsing == true) + { + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_BUTTON_OFF); + if (IsFailed(r)) + { + AppLogException("Contextmenu additem:Find on page failed with %s", GetErrorMessage(r)); + return ; + } + + if (__pWebViewer != NULL) + { + __pWebViewer->SetPrivateBrowsingEnabled(false); + } + + SettingPresentationModel::GetInstance()->SetPrivateOn(false); + + if (__pAddressbar != null) + { + __pAddressbar->UpdateFaviconBitmap(false); + } + + } + else + { + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_BUTTON_ON); + if (IsFailed(r)) + { + AppLogException("Contextmenu additem:Find on page failed with %s", GetErrorMessage(r)); + return ; + } + + if (__pWebViewer != NULL) + { + __pWebViewer->SetPrivateBrowsingEnabled(true); + } + + SettingPresentationModel::GetInstance()->SetPrivateOn(true); + + if (__pAddressbar != null) + { + __pAddressbar->UpdateFaviconBitmap(true); + } + } + + itemIndex = __pOptionMenu->GetItemIndexFromActionId(IDA_PRIVATEON_CLICKED); + r = __pOptionMenu->SetItemAt(itemIndex,CommonUtil::GetString(L"IDS_BR_BODY_PRIVACY_AND_SECURITY_ABB"),IDA_PRIVATEON_CLICKED,*pBitmap); + AppLog("Result:: %s for index = %d", GetErrorMessage(r),itemIndex); + __pOptionMenu->Invalidate(true); + if ( pBitmap != NULL ) + { + delete pBitmap; + } + + } + break; + case IDA_SETTINGS_CLICKED: + { + + ArrayList* pArgList = new(std::nothrow) ArrayList(); + if (pArgList) + { + pArgList->Construct(); + pArgList->Add(*__pWindowInfo); + SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_SETTINGS), pArgList); + } + __pOptionMenu->SetShowState(false); + __pOptionMenu->Invalidate(false); + + if (pArgList != null) + { + delete pArgList; + pArgList = null; + } + + } + break; + + case IDA_ADDTOBOOKMARK_CLICKED: + { + + if (__pWindowInfo != NULL && __pWindowInfo->pageUrl != NULL) + { + int bookmarkCount=0; + bool exist = false; + String url=L""; + url=__pWindowInfo->pageUrl; + result r = E_SUCCESS; + Bitmap* pBitmap = null; + r=BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(url,exist); + + if (IsFailed(r)) + { + return; + } + if ( exist == true) + { + String message = CommonUtil::GetString(L"IDS_BR_POP_BOOKMARK_REMOVED"); + BookmarkPresentationModel::GetInstance()->DeleteBookmark(url); + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_ICON_BOOKMARK_OFF_TEMP); + + if(__pNotification != null) + { + RemoveControl(__pNotification); + __pNotification = null; + } + __pNotification = new (std::nothrow) NotificationPanel(*this); + if (__pNotification != null) + { + __pNotification->SetText(message); + __pNotification->SetPositionDiff(__pFooterPanel->GetHeight() - 12); + __pNotification->ShowNotification(); + } + } + else + { + String title=__pWindowInfo->pageTitle; + String message = CommonUtil::GetString(L"IDS_BR_POP_BOOKMARK_ADDED"); + BookmarkData* pBookmark=new (std::nothrow) BookmarkData(); + + pBookmark->SetBookmarkTitle(title); + pBookmark->SetUrl(url); + if (__pWebViewer != null && __pWebViewer->GetFaviconN() != null) + { + pBookmark->SetFavIconBitmap(*(__pWebViewer->GetFaviconN())); + } + String id = FaviconManager::GetInstance()->SaveFavicon(*__pWindowInfo->pFavicon, __pWindowInfo->faviconUrl); + pBookmark->SetFaviconId(id); + //r = BookmarkPresentationModel::GetInstance()->SaveBookmark(*pBookmark); + r = BookmarkPresentationModel::GetInstance()->SaveTempBookmark(*pBookmark); + delete pBookmark; + if(__pNotification != null) + { + RemoveControl(__pNotification); + __pNotification = null; + } + __pNotification = new (std::nothrow) NotificationPanel(*this); + if (__pNotification != null) + { + __pNotification->SetText(message); + __pNotification->SetPositionDiff(__pFooterPanel->GetHeight() - 12); + __pNotification->ShowNotification(); + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_ICON_BOOKMARK_ON_TEMP); + } + } + if (pBitmap != null) + { + r = __pOptionMenu->SetItemAt(1,CommonUtil::GetString(L"IDS_BR_OPT_ADDTOBOOKMARKS"), IDA_ADDTOBOOKMARK_CLICKED,*pBitmap); + delete pBitmap; + } + + + __pOptionMenu->Invalidate(true); + } + + } + break; + case IDA_PRINT_CLICKED: + { + r = __pWebViewer->SavePageAsPdf(UiApp::GetInstance()->GetAppRootPath()+"//shared//data//test.pdf"); + AppLog("SavePageAsPdf result %s",GetErrorMessage(r)); + + AppLog("RequestPrint called!"); + AppControl* pAc = Tizen::App::AppManager::FindAppControlN(L"org.tizen.mobileprint", L"http://tizen.org/appcontrol/operation/print"); + result nResult = E_FAILURE; + if (pAc) + { + AppLog("TestPrint if (pAc) == true"); + + HashMap map; + map.Construct(); + + String fileType = L"service_print_files_type"; + String typeVal = L"DOC"; + + String fileCount = L"service_print_files_count"; + String countVal = L"1"; + String fileFolder= L"service_print_files_folder_name"; + String folderVal = UiApp::GetInstance()->GetAppRootPath()+"//shared//data"; + + map.Add(&fileCount, &countVal); + map.Add(&fileFolder, &folderVal); + map.Add(&fileType, &typeVal); + + String fileName = L"service_print_files_files_name"; + + ArrayList fileNameList; + fileNameList.Construct(); + String file1 = L"test.pdf"; + + fileNameList.Add(&file1); + map.Add(&fileName, &fileNameList); + + nResult = pAc->Start(NULL, NULL, &map, NULL); + + if (nResult == E_SUCCESS) AppLog("TestPrint ret == E_SUCCESS"); + else if (nResult == E_MAX_EXCEEDED) + AppLog("TestPrint ret == E_MAX_EXCEEDED"); + else if (nResult == E_OBJ_NOT_FOUND) + AppLog("TestPrint ret == E_OBJ_NOT_FOUND"); + else if (nResult == E_IN_PROGRESS) + AppLog("TestPrint ret == E_IN_PROGRESS"); + else if (nResult == E_PRIVILEGE_DENIED) + AppLog("TestPrint ret == E_PRIVILEGE_DENIED"); + else if(nResult == E_SYSTEM) + AppLog("TestPrint ret == E_SYSTEM"); + + delete pAc; + } + else + { + int __modalMsgBoxResult; + MessageBox* pMsgBox = new MessageBox(); + pMsgBox->Construct("Not Supported","Not Supported",MSGBOX_STYLE_OK,3000); + pMsgBox->ShowAndWait(__modalMsgBoxResult); + delete pMsgBox; + pMsgBox = null; + __modalMsgBoxResult = 0; + } + } + break; + case IDA_SHARE_CLICKED: + { + if(__pPopUp != null) + { + delete __pPopUp; + __pPopUp = null; + } + if(__pAddressbar) + { + __pAddressbar->HideKeypad(); + } + __pPopUp = new(std::nothrow) SharePopup(); + __pPopUp->Initialize(); + if (__pWindowInfo != null) + { + ShareInfo* pShareInfo = new(std::nothrow) ShareInfo(); + pShareInfo->SetPageTitle(__pWindowInfo->pageTitle); + pShareInfo->SetPageUrl(__pWindowInfo->pageUrl); + pShareInfo->SetImageAttached(false); + __pPopUp->RemoveAllShareInfo(); + __pPopUp->AddShareInfo(pShareInfo); + } + __pPopUp->SetShowState(true); + __pPopUp->Show(); + } + break; + case IDA_BOOKMARKBTN_CLICKED: + { + AppLogDebug("ONACTION_PERFORMED:IDA_BOOKMARKBTN_CLICKED"); + SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_BOOKMARK_VIEW, SCENE_TRANSITION_ANIMATION_TYPE_NONE)); + } + break; + case IDA_ADD_TO_BOOKMARKBTN_CLICKED: + { + + } + break; + case IDA_MOREBTN_CLICKED: + { + AppLog("IDA_MOREBTN_CLICKED"); + InitOptionMenu(); + if (__pWindowInfo != NULL && __pWindowInfo->pageUrl != NULL && __pWebViewer->GetShowState() == true) + { + int bookmarkCount=0; + bool exist = false; + String url=L""; + url=__pWindowInfo->pageUrl; + result r = E_SUCCESS; + Bitmap* pBitmap = null; + + r=BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(url,exist); + if (IsFailed(r)) + { + AppLogDebug("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED failed"); + return; + } + if ( exist == true) + { + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_ICON_BOOKMARK_ON_TEMP); + } + else + { + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_ICON_BOOKMARK_OFF_TEMP); + } + AppLogDebug("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED 3"); + + if (__pOptionMenu->GetItemCount() == 9) + { + r = __pOptionMenu->SetItemAt(1,CommonUtil::GetString(L"IDS_BR_OPT_ADDTOBOOKMARKS"), IDA_ADDTOBOOKMARK_CLICKED,*pBitmap); + } + else + { + r = __pOptionMenu->InsertItemAt(1,CommonUtil::GetString(L"IDS_BR_OPT_ADDTOBOOKMARKS"), IDA_ADDTOBOOKMARK_CLICKED,*pBitmap); + } + + if (IsFailed(r)) + { + AppLogException("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED Add to Bookmark failed with %s", GetErrorMessage(r)); + delete pBitmap; + return ; + } + AppLogDebug("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED 4"); + if (__pOptionMenu->GetItemCount() != 9) + { + __pOptionMenu->InsertItemAt(1,CommonUtil::GetString(L"IDS_BR_OPT_ADDTOBOOKMARKS"), IDA_ADDTOBOOKMARK_CLICKED); + __pOptionMenu->InsertItemAt(2,CommonUtil::GetString(L"IDS_BR_BODY_PRINT"), IDA_PRINT_CLICKED); + // __pOptionMenu->InsertItemAt(2,L"Add to Home"/*CommonUtil::GetString(L"IDS_BR_OPT_SHARE")*/, IDA_ADD_TO_HOME_CLICKED); + __pOptionMenu->InsertItemAt(3,CommonUtil::GetString(L"IDS_BR_OPT_SHARE"), IDA_SHARE_CLICKED); + __pOptionMenu->InsertItemAt(4,CommonUtil::GetString(L"IDS_BR_OPT_FIND_ON_PAGE_ABB"), IDA_FINDONPAGE_CLICKED); + __pOptionMenu->SetMaxVisibleItemsCount(6); + } + if( GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE) + { + AppLog(" Orientation landscape"); + __pOptionMenu->SetMaxVisibleItemsCount(5); + } + else + { + AppLog(" Orientation potrait"); + __pOptionMenu->SetMaxVisibleItemsCount(6); + } + + AppLogDebug("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED 5"); + delete pBitmap; + } + AppLogDebug("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED end"); + __pOptionMenu->SetShowState(true); + __pOptionMenu->Invalidate(true); + __pOptionMenu->Show(); + +} + break; + case IDA_HISTORY_CLICKED: + { + AppLogDebug("ONACTION_PERFORMED:IDA_HISTORYBTN_CLICKED"); + SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_HISTORY_LIST, SCENE_TRANSITION_ANIMATION_TYPE_NONE)); + } + break; + case IDA_SAVED_PAGES_CLICKED: + { + + } + break; + case IDA_DESKTOP_VIEW_CLICKED: + { + + } + break; + case IDA_SAVE_CLICKED: + { + + } + break; + case IDA_MULTIWINDOWBTN_CLICKED: + { + result r = SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_MULTIPLE_WINDOW, SCENE_TRANSITION_ANIMATION_TYPE_NONE)); + AppLog("IDA_MULTIWINDOWBTN_CLICKED result %s",GetErrorMessage(r)); + } + break; + + case IDA_NEWWINDOWBTN_CLICKED: + { + WindowInfo* pNewWindowInfo = MultipleWindowPresentationModel::GetInstance()->CreateNewMainViewSceneN(); + + if (pNewWindowInfo == null) + { + return; + } + result r = E_SUCCESS; + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager == NULL) + { + return; + } + ArrayList* pArgList = new(std::nothrow) ArrayList(); + if (pArgList == NULL) + { + return; + } + r = pArgList->Construct(); + if (r == E_SUCCESS) + { + pArgList->Add(*pNewWindowInfo); + r = pSceneManager->GoForward(ForwardSceneTransition(pNewWindowInfo->sceneID, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList); + } + delete pArgList; + pArgList = null; + if (IsFailed(r)) + { + AppLogDebug("MainForm::OnActionPerformed Failed to GoBackward %s",GetErrorMessage(r)); + return; + } + } + break; + case IDA_SMALLFONT_BTN_CLICKED: + { + WebSetting setting = __pWebReader->GetSetting(); + setting.SetFontSize(15); + __pWebReader->SetSetting(setting); + } + break; + case IDA_LARGEFONT_BTN_CLICKED: + { + WebSetting setting = __pWebReader->GetSetting(); + setting.SetFontSize(25); + __pWebReader->SetSetting(setting); + } + break; + case IDA_READER_CLOSE_CLICKED: + { + if (__pArticleReaderPanel != null && __pBlankPanel != null) + { + RemoveControl(__pBlankPanel); + __pArticleReaderPanel = null; + __pBlankPanel = null; + __pArticleReaderLabel = null; + } + SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING_COMPLETE); + } + break; + case IDA_FINDWORD_CANCEL_CLICKED: + { + __currentSearchStr = L""; + __currentWordIndex = 0; + __maxOccurrances = 0; + + if (__pFindWordPanelLeftToRight && __pFindWordPanelLeftToRight->GetShowState() == true) + { + __pFindWordEditField->SetText(L""); + __pFindWordCountLabel->SetText(L"0/0"); + } + else if (__pFindWordPanelRightToLeft && __pFindWordPanelRightToLeft->GetShowState() == true) + { + __pFindWordEditFieldRightToLeft->SetText(L""); + __pFindWordCountLabelRightToLeft->SetText(L"0/0"); + } + + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); + __pFindWordCountLabel->SetText(L"0/0"); + __pWebViewer->SearchTextAllAsync(L"",true); + AppLog("akjshdasd 1"); + if(__isKeypadOpened == false) + __pFooterPanel->SetShowState(true); + ShowFindWordPanel(false); + } + break; + case IDA_FINDWORD_SEARCH_CLICKED: + { + if (__pFindWordPanelLeftToRight && __pFindWordPanelLeftToRight->GetShowState() == true) + { + __currentSearchStr = __pFindWordEditField->GetText(); + } + else if (__pFindWordPanelRightToLeft && __pFindWordPanelRightToLeft->GetShowState() == true) + { + __currentSearchStr = __pFindWordEditFieldRightToLeft->GetText(); + } + + if (__currentSearchStr.GetLength() > 0) + { + StartWordSearch(); + } + else + { + AppLogDebug("Enter something"); + } + } + break; + case IDA_FINDWORD_CLEAR_CLICKED: + { + __pFindWordCountLabel->SetText(L"0/0"); + __pFindWordEditField->SetText(L""); + __currentSearchStr = L"aaaaaabbbbbbccccccc"; + StartWordSearch(); + __currentSearchStr = L""; + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); +// __pFindWordCountLabel->SetShowState(false); + __pFindWordControl->Invalidate(true); + } + break; + case IDA_FINDWORD_CLEAR_RIGHT_TO_LEFT_CLICKED: + { + __pFindWordCountLabelRightToLeft->SetText(L"0/0"); + __pFindWordEditFieldRightToLeft->SetText(L""); + __currentSearchStr = L"aaaaaabbbbbbccccccc"; + StartWordSearch(); + __currentSearchStr = L""; + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); +// __pFindWordCountLabelRightToLeft->SetShowState(false); + __pFindWordControl->Invalidate(true); + } + break; + case IDA_FINDWORD_NEXT_CLICKED: + { + FindNextWord(true); + } + break; + case IDA_FINDWORD_PREV_CLICKED: + { + FindNextWord(false); + } + break; + case IDA_BRIGHTNESS_BTN_CLICKED: + { + AppLogDebug("IDA_BRIGHTNESS_BTN_CLICKED"); + SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_BRIGHTNESS, SCENE_TRANSITION_ANIMATION_TYPE_NONE)); + } + break; + case IDA_COPY_IMAGE_CLICKED: + { + AppLogDebug("IDA_COPY_IMAGE_CLICKED"); + AppLogDebug("IDA_COPY_IMAGE_CLICKED"); + ClipboardItem item; + const Bitmap* pBitmap = null; + if (__pHitElementResult != null && __pHitElementResult->HasImage()) + { + pBitmap = __pHitElementResult->GetImage(); + } + + String resourcePath = App::GetInstance()->GetAppResourcePath(); + r = item.Construct(CLIPBOARD_DATA_TYPE_IMAGE , *pBitmap); + AppLog("Platofrm construct failed result %s",GetErrorMessage(r)); + // copying the item to clipboard + Clipboard* pClipboard = Clipboard::GetInstance(); + if (pClipboard != null) + { + r = pClipboard->CopyItem(item); + AppLog("Platofrm copy failed result %s",GetErrorMessage(r)); + } + } + break; + case IDA_VIEW_IMAGE_CLICKED: + { + AppLogDebug("IDA_VIEW_IMAGE_CLICKED"); + WindowInfo* pNewWindowInfo = null; + if (__pHitElementResult != null) + { + String srcUrl = __pHitElementResult->GetAttributeValue(L"src"); + AppLog("MainForm::OnTouchLongPressed srcUrl is %ls",srcUrl.GetPointer()); + + Uri currentUri; + currentUri.SetUri(__pWebViewer->GetUrl()); + + String newUrl; + Uri newUri; + newUri.SetUri(srcUrl); + AppLog("newuri gethost %ls",newUri.GetHost().GetPointer()); + if(newUri.GetHost().GetLength() == 0) + { + newUrl = currentUri.GetHost(); + newUrl.Append(srcUrl); + srcUrl = newUrl; + } + + LoadUrl(srcUrl); + } + } + break; + case IDA_SAVE_IMAGE_CLICKED: + { + AppLogDebug("IDA_SAVE_IMAGE_CLICKED"); + const Bitmap* pSaveBitmap = null; + String imageName = GetImagePath(); + AppLog("Content manager image name %ls",imageName.GetPointer()); + String imagePath; + imagePath.Clear(); + imagePath.Append(imageName); + imagePath.Format(100, L"%ls/Downloads/%ls.jpg",Tizen::System::Environment::GetMediaPath().GetPointer(), imageName.GetPointer()); + AppLog("Content manager image path %ls",imagePath.GetPointer()); + if (__pHitElementResult != null) + { + pSaveBitmap = __pHitElementResult->GetImage(); + } + ByteBuffer* pBuffer = __pSaveImage->EncodeToBufferN(*pSaveBitmap, IMG_FORMAT_JPG); + + if(pBuffer) + { + UpdateImageContent(pBuffer, imageName); + delete pBuffer; + if(__pNotification != null) + { + RemoveControl(__pNotification); + __pNotification = null; + } + __pNotification = new NotificationPanel(*this); + String msg; + AppResource::GetInstance()->GetString("IDS_COM_SK_SAVE", msg); + msg.Append(imagePath); + if (__pNotification != null) + { + __pNotification->SetText(msg); + if (__pFooterPanel->GetShowState() == true) + { + __pNotification->SetPositionDiff(__pFooterPanel->GetHeight()); + } + else + { + __pNotification->SetPositionDiff(0); + } + __pNotification->ShowNotification(); + } + } + else + { + int __modalMsgBoxResult; + MessageBox* pMsgBox = new MessageBox(); + pMsgBox->Construct(CommonUtil::GetString(L"IDS_IMGE_POP_UNABLE_TO_SAVE_IMAGE"),CommonUtil::GetString(L"IDS_IMGE_POP_UNABLE_TO_SAVE_IMAGE"),MSGBOX_STYLE_OK,3000); + pMsgBox->ShowAndWait(__modalMsgBoxResult); + delete pMsgBox; + pMsgBox = null; + __modalMsgBoxResult = 0; + } + } + break; + case IDA_SHARE_IMAGE_CLICKED: + { + AppLogDebug("IDA_SHARE_IMAGE_CLICKED"); + if (__pPopUp != null) + { + delete __pPopUp; + __pPopUp = null; + } + if(__pAddressbar) + { + __pAddressbar->HideKeypad(); + } + __pPopUp = new(std::nothrow) SharePopup(); + __pPopUp->Initialize(); + if (__pHitElementResult != null) + { + const Bitmap* pSaveBitmap = null; + String imageName = GetImagePath(); + AppLog("Content manager image name %ls",imageName.GetPointer()); + String imagePath; + imagePath.Clear(); + imagePath.Append(imageName); + imagePath.Format(100, L"%lsDownloads/%ls.jpg",Tizen::System::Environment::GetMediaPath().GetPointer(), imageName.GetPointer()); + AppLog("Content manager image path %ls",imagePath.GetPointer()); + if (__pHitElementResult != null) + { + pSaveBitmap = __pHitElementResult->GetImage(); + } + __pSaveImage->EncodeToFile(*pSaveBitmap, IMG_FORMAT_JPG, imagePath, true); + + String srcUrl = __pHitElementResult->GetAttributeValue(L"src"); + AppLog("MainForm::OnTouchLongPressed srcUrl is %ls",srcUrl.GetPointer()); + + ShareInfo* pShareInfo = new(std::nothrow) ShareInfo(); + pShareInfo->SetPageTitle(L""); + pShareInfo->SetPageUrl(srcUrl); + pShareInfo->SetImageAttached(true); + pShareInfo->SetImagePath(imagePath); + __pPopUp->RemoveAllShareInfo(); + __pPopUp->AddShareInfo(pShareInfo); + __pPopUp->SetShowState(true); + __pPopUp->Show(); + } + } + break; + case IDA_HYPERLINK_OPEN_CLICKED: + { + if (__pHitElementResult != null) + { + String srcUrl = __pHitElementResult->GetUrl(); + + WindowInfo* pNewWindowInfo = MultipleWindowPresentationModel::GetInstance()->CreateNewMainViewSceneN(srcUrl); + + if (pNewWindowInfo == null) + { + return; + } + pNewWindowInfo->isJavascriptInitiated = true; + result r = E_SUCCESS; + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == NULL) + { + return; + } + ArrayList* pArgList = new(std::nothrow) ArrayList(); + if (pArgList == NULL) + { + return; + } + pArgList->Construct(); + + pArgList->Add(*pNewWindowInfo); + r = pSceneManager->GoForward(ForwardSceneTransition(pNewWindowInfo->sceneID, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList); + if (pArgList != null) + { + delete pArgList; + pArgList = null; + } + if(IsFailed(r)) + { + AppLogDebug("MultipleWindowForm::OnActionPerformed GoForward failed %s",GetErrorMessage(r)); + return; + } + } + } + break; + case IDA_HYPERLINK_SHARE_IMAGE_CLICKED: + { + if (__pHitElementResult == null) + { + return; + } + + if(__pPopUp != null) + { + delete __pPopUp; + __pPopUp = null; + } + if(__pAddressbar) + { + __pAddressbar->HideKeypad(); + } + __pPopUp = new(std::nothrow) SharePopup(); + __pPopUp->Initialize(); + + ShareInfo* pShareInfo = new(std::nothrow) ShareInfo(); + pShareInfo->SetPageUrl(__pHitElementResult->GetUrl()); + pShareInfo->SetImageAttached(false); + __pPopUp->RemoveAllShareInfo(); + __pPopUp->AddShareInfo(pShareInfo); + + __pPopUp->SetShowState(true); + __pPopUp->Show(); + } + break; + case IDA_HYPERLINK_COPY_LINK_CLICKED: + { + ClipboardItem item; + String url; + if (__pHitElementResult != null) + { + url = __pHitElementResult->GetUrl(); + } + + String resourcePath = App::GetInstance()->GetAppResourcePath(); + item.Construct(CLIPBOARD_DATA_TYPE_TEXT , url); + + // copying the item to clipboard + Clipboard* pClipboard = Clipboard::GetInstance(); + if (pClipboard != null) + { + pClipboard->CopyItem(item); + } + } + break; + case IDA_FIND_TEXT__CLICKED: + { +// AddressBarCancelledClicked(*__pAddressbar); + RelayoutControls(false); +// __pFooterPanel->SetShowState(false); + AppLogDebug("MainForm::OnActionPerformed find word clicked"); + __currentSearchStr.Clear(); + __currentSearchStr.Append(__currentSelectedStr); + InitFindWordPanel(); + __pFindWordEditField->SetText(__currentSearchStr); + + if(__pOptionMenu != null) + { + __pOptionMenu->SetShowState(false); + __pOptionMenu->Invalidate(false); + } + __adressPanelPosition.y = 0; + + if (__pAddressbar != null && __pWebViewer != NULL) + { + __webControlPosition.y = __pAddressbar->GetHeight() - 12; + __webControlPositionF.y = __pAddressbar->GetHeightF() - 12.0f; + __webControlHeight = GetClientAreaBounds().height - __pFooterPanel->GetHeight() - ( /*__pAddressbar->GetY() +*/ __pAddressbar->GetHeight() - 12); + __webControlHeightF = GetClientAreaBoundsF().height - __pFooterPanel->GetHeightF() - ( /*__pAddressbar->GetY() +*/ __pAddressbar->GetHeightF() - 12.0f); + + if (__pFooterPanel->GetShowState() == false) + __pWebViewer->SetBounds(Rectangle(0,__webControlPosition.y,GetClientAreaBounds().width, GetClientAreaBounds().height - ( /*__pAddressbar->GetY() +*/ __pAddressbar->GetHeight() - 12))); + else + __pWebViewer->SetBounds(Rectangle(0,__webControlPosition.y,GetClientAreaBounds().width, __webControlHeight)); + __pWebViewer->Invalidate(true); + } + + ShowFindWordPanel(true); + if (__pFindWordPanelLeftToRight && __pFindWordPanelLeftToRight->GetShowState() == true) + { + __pFindWordEditField->SetText(__currentSearchStr); + __pFindWordEditField->SetFocus(); + } + else if(__pFindWordPanelRightToLeft && __pFindWordPanelRightToLeft->GetShowState() == true) + { + __pFindWordEditFieldRightToLeft->SetText(__currentSearchStr); + __pFindWordEditFieldRightToLeft->SetFocus(); + } + + if (__currentSearchStr.GetLength() > 0) + { + StartWordSearch(); + } + else + { + AppLogDebug("Enter something"); + } + + if (__pWebViewer != null) + { + // releasing the set block + __pWebViewer->ReleaseBlock(); + } + + } + break; + case IDA_SHARE_TEXT_CLICKED: + { + __pWebViewer->ReleaseBlock(); + AppLogDebug("IDA_SHARE_TEXT_CLICKED"); + if(__pPopUp != null) + { + delete __pPopUp; + __pPopUp = null; + } + if(__pAddressbar) + { + __pAddressbar->HideKeypad(); + } + __pPopUp = new(std::nothrow) SharePopup(); + __pPopUp->Initialize(); + if (__pHitElementResult != null) + { + ShareInfo* pShareInfo = new(std::nothrow) ShareInfo(); + pShareInfo->SetPageTitle(L""); + pShareInfo->SetPageUrl(__currentSelectedStr); + pShareInfo->SetImageAttached(false); + __pPopUp->RemoveAllShareInfo(); + __pPopUp->AddShareInfo(pShareInfo); + __pPopUp->SetShowState(true); + __pPopUp->Show(); + } + } + break; + case IDA_COPY_TEXT_CLICKED: + { +// __pWebViewer->ReleaseBlock();//as per hyunn lee request for issue 53500 + // need to implement + //__currentSelectedStr + // Sets data to a clip board item + ClipboardItem item; + String resourcePath = App::GetInstance()->GetAppResourcePath(); + item.Construct(CLIPBOARD_DATA_TYPE_TEXT, __currentSelectedStr); + + // copying the item to clipboard + Clipboard* pClipboard = Clipboard::GetInstance(); + if (pClipboard != null) + { + pClipboard->CopyItem(item); + } + } + break; + case IDA_PASTE_TEXT_CLICKED: + { + Clipboard* pClipboard = Clipboard::GetInstance(); + + if(pClipboard == null) + { + return; + } + // Retrieves a latest item + ClipboardItem* pItem = pClipboard->RetrieveLatestItemN(CLIPBOARD_DATA_TYPE_TEXT | CLIPBOARD_DATA_TYPE_HTML); + + if(pItem == null) + { + return; + } + //Gets data from the clipboard item + String* pString = dynamic_cast(pItem->GetData()); + + if (pString != null) + { + String idElement = __pHitElementResult->GetAttributeValue(L"id"); + String nameElement = __pHitElementResult->GetAttributeValue(L"name"); + String classElement = __pHitElementResult->GetAttributeValue(L"class"); + String tagElement = __pHitElementResult->GetTagName(); + String contenteditable = __pHitElementResult->GetAttributeValue("contenteditable"); + AppLog("MainForm::IDA_PASTE_TEXT_CLICKED id is %ls",idElement.GetPointer()); + String str = L"document.getElementsByName('"; + str.Append(nameElement); + str.Append("').length"); + String* pNameCount = __pWebViewer->EvaluateJavascriptN(str); + + str.Clear(); + str = L"document.getElementsByClassName('"; + str.Append(classElement); + str.Append("').length"); + String* pClassCount = __pWebViewer->EvaluateJavascriptN(str); + + String script; + if(contenteditable.Equals(L"true",false) == true) + { + AppLog("gmail paste need to support"); + + script = L"function replaceSelectedText(replacementText) { var sel, range; if (window.getSelection) { sel = window.getSelection(); if (sel.rangeCount) { range = sel.getRangeAt(0); range.deleteContents(); range.insertNode(document.createTextNode(replacementText)); } } else if (document.selection && document.selection.createRange) { range = document.selection.createRange(); range.text = replacementText; } }"; + script.Append("replaceSelectedText("); + script.Append("\""); + script.Append(*pString); + script.Append("\");"); + } + else if(idElement.GetLength() != 0) + { + script = L"function insertAtCursor(myField, myValue) { if (document.selection) { myField.focus(); sel = document.selection.createRange(); sel.text = myValue; } else if (myField.selectionStart || myField.selectionStart == '0'){ var startPos = myField.selectionStart; var endPos = myField.selectionEnd; myField.value = myField.value.substring(0, startPos)+ myValue + myField.value.substring(endPos, myField.value.length); } else { myField.value += myValue; } } "; + script.Append("insertAtCursor("); + script.Append(L"document.activeElement"); + script.Append(","); + script.Append("\""); + script.Append(*pString); + script.Append("\");"); + } + else if (classElement.GetLength() != 0 && pClassCount->Equals("1",false) == true) + { + script = L"function insertAtCursor(myField, myValue) { if (document.selection) { myField.focus(); sel = document.selection.createRange(); sel.text = myValue; } else if (myField.selectionStart || myField.selectionStart == '0'){ var startPos = myField.selectionStart; var endPos = myField.selectionEnd; myField.value = myField.value.substring(0, startPos)+ myValue + myField.value.substring(endPos, myField.value.length); } else { myField.value += myValue; } } "; + script.Append("insertAtCursor(document.getElementsByClassName('"); + script.Append(classElement); + script.Append("')[0],"); + script.Append("\""); + script.Append(*pString); + script.Append("\");"); + } + else if (nameElement.GetLength() != 0 && pNameCount->Equals("1",false) == true) + { + script = L"function insertAtCursor(myField, myValue) { if (document.selection) { myField.focus(); sel = document.selection.createRange(); sel.text = myValue; } else if (myField.selectionStart || myField.selectionStart == '0'){ var startPos = myField.selectionStart; var endPos = myField.selectionEnd; myField.value = myField.value.substring(0, startPos)+ myValue + myField.value.substring(endPos, myField.value.length); } else { myField.value += myValue; } } "; + script.Append("insertAtCursor(document.getElementsByName('"); + script.Append(nameElement); + script.Append("')[0],"); + script.Append("\""); + script.Append(*pString); + script.Append("\");"); + } + else if(tagElement.GetLength() != 0) //adding for twitter post page + { + script = L"function insertAtCursor(myField, myValue) { if (document.selection) { myField.focus(); sel = document.selection.createRange(); sel.text = myValue; } else if (myField.selectionStart || myField.selectionStart == '0'){ var startPos = myField.selectionStart; var endPos = myField.selectionEnd; myField.value = myField.value.substring(0, startPos)+ myValue + myField.value.substring(endPos, myField.value.length); } else { myField.value += myValue; } } "; + + script.Append("insertAtCursor(document.activeElement,"); + script.Append("\""); + script.Append(*pString); + script.Append("\");"); + } + AppLog("MainForm::OnTouchLongPressed script is %ls",script.GetPointer()); + String* pStr = __pWebViewer->EvaluateJavascriptN(script); + delete pStr; + delete pNameCount; + delete pClassCount; + } + delete pItem; + if(__pWebViewer) + __pWebViewer->ReleaseBlock(); + } + break; + case IDA_GO_BACK: + { + OnBackClicked(); + } + break; + case IDA_GO_FORWARD: + { + OnForwardClicked(); + } + break; + case IDA_REFRESH_BTN_CLICKED: + { + __isLoadingCompleted = false; + __isLoadingData = true; + __progressPercentage = 0; + __displayUrl = __pFooterUrlField->GetText(); + + String url = __pFooterUrlField->GetText(); + AppLog("MainForm::OnUrlSubmitted url is %ls", url.GetPointer()); +// LoadUrl(url); + if (__pWebViewer != null && __pAddressbar != null) + { + LoadUrl(url); + //__pWebViewer->Reload(); + SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING); + } + + //OnUrlSubmitted(); + UpdateProgressBitmap(); + } + break; + case IDA_STOP_BTN_CLICKED: + { + __isLoadingCompleted = false; + __isLoadingData = false; + __progressPercentage = 0; + __pFooterUrlField->HideKeypad(); + __displayUrl = __pFooterUrlField->GetText(); + + if (__pWebViewer) + { + //__pAddressbar->SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING_COMPLETE); + SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING_COMPLETE); + __pWebViewer->StopLoading(); + RequestRedraw(true); + } + + UpdateProgressBitmap(); + } + break; + case IDA_CLEAR_URL: + { + if (__pFooterUrlField->GetText().IsEmpty() == false) + { + //__displayUrl = __pUrlField->GetText(); + __pFooterUrlField->Clear(); + + } + } + break; + case IDA_READER_BTN_CLICKED: + { + ReaderClicked(); + } + break; + default: + break; + } +} + +void +MainForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source) +{ + AppLog("MainForm::OnFormBackRequested entered"); + result r = E_FAILURE; + if(__pImageMenu && __pImageMenu->GetShowState() == true) + { + AppLog("Hiding the menu"); + __pImageMenu->SetShowState(false); + } + if (__pWebViewer && __pWebViewer->CanGoBack()) + { + __pWebViewer->GoBack(); + } + else if(__pWindowInfo && __pWindowInfo->isJavascriptInitiated == false) + { + UiApp* pApp = null; + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + if (IsFailed(r)) + { + AppLogException("MainForm::OnFormBackRequested failed with %s", GetErrorMessage(r)); + return; + } + } + } + else + { + UiApp* pApp = null; + WindowInfo* pWindowInfo = null; + int totalCount = 0; + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return; + } + ArrayList* pAllWindowList = MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList(); + if (pAllWindowList == NULL) + { + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + if (IsFailed(r)) + { + AppLogException("MainForm::OnFormBackRequested failed with %s", GetErrorMessage(r)); + return; + } + } + } + if (pAllWindowList != null) + { + totalCount = pAllWindowList->GetCount(); + } + for (int count = 0; count < totalCount; count++) + { + pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(count)); + if (pWindowInfo == null) + { + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + if (IsFailed(r)) + { + AppLogException("MainForm::OnFormBackRequested failed with %s", GetErrorMessage(r)); + return; + } + } + } + else + { + if (pWindowInfo && pSceneManager->GetCurrentSceneId() == pWindowInfo->sceneID && pWindowInfo->isJavascriptInitiated == true) + { + r = SceneRegister::DestroyAndUnRegisterScene(pWindowInfo->sceneID); + if (IsFailed(r)) + { + AppLogException("MainForm::OnFormBackRequested failed with %s", GetErrorMessage(r)); + return; + } + r = pAllWindowList->RemoveAt(count, true); + __pWindowInfo = null; + if (IsFailed(r)) + { + AppLogException("MainForm::OnFormBackRequested failed with %s", GetErrorMessage(r)); + return; + } + if(count > 0) + { + pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(count - 1)); + } + else + { + pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(pAllWindowList->GetCount() - 1)); + } + if (pWindowInfo == null) + { + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + return; + } + } + else + { + if(pWindowInfo != null) + r = pSceneManager->GoForward(ForwardSceneTransition(pWindowInfo->sceneID ,SCENE_TRANSITION_ANIMATION_TYPE_NONE,SCENE_HISTORY_OPTION_ADD_HISTORY,SCENE_DESTROY_OPTION_DESTROY)); + if (IsFailed(r)) + { + AppLogException("MainForm::OnFormBackRequested failed with %s", GetErrorMessage(r)); + return; + } + } + break; + } +// else if (pWindowInfo && pSceneManager->GetCurrentSceneId() == pWindowInfo->sceneID && pWindowInfo->isJavascriptInitiated == false) +// { +// UiApp* pApp = null; +// pApp = UiApp::GetInstance(); +// if (pApp != null) +// { +// r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); +// if (IsFailed(r)) +// { +// AppLogException("MainForm::OnFormBackRequested failed with %s", GetErrorMessage(r)); +// return; +// } +// } +// } + } + } + } + AppLog("MainForm::OnFormBackRequested exit"); +} + +void +MainForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, + const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs) +{ + + AppLog("MainForm::OnSceneActivatedN called"); + String* pSelectedScene = NULL; + Object* pValue = NULL; + String* pUrl = null; + MultipleWindowPresentationModel::GetInstance()->GetValue(SELECTED_SCENE_ID, &pValue); + pSelectedScene = (String*) pValue; + + if (pSelectedScene != null) + { + delete pSelectedScene; + } + MultipleWindowPresentationModel::GetInstance()->SetValue(SELECTED_SCENE_ID, null); + String* selectedSceneID = new(std::nothrow) String(currentSceneId); + AppLogDebug("current scene id is %ls", currentSceneId.GetPointer()); + AppLogDebug("selected scene id is %ls", currentSceneId.GetPointer()); + + // setting the current scene ID + MultipleWindowPresentationModel::GetInstance()->SetCurrentSceneID(currentSceneId); + + MultipleWindowPresentationModel::GetInstance()->SetValue(SELECTED_SCENE_ID, (Object*) selectedSceneID); + + if(pArgs != null && pArgs->GetCount() > 0 && pArgs->GetCount() == 2) + { + __pWindowInfo = dynamic_cast< WindowInfo* >(pArgs->GetAt(0)); + if(__pWindowInfo == null) + return; + // if(__pWindowInfo == null) + { + pUrl = dynamic_cast< String* >(pArgs->GetAt(1)); + } + } + else if ( pArgs != null && pArgs->GetCount() == 1) + { + __pWindowInfo = dynamic_cast< WindowInfo* >(pArgs->GetAt(0)); + } + + InitFooter(); + InitAddressbar(); + + FloatRectangle footerPanelBounds = FloatRectangle(0.0f, (GetClientAreaBoundsF().height) - __pFooterPanel->GetHeightF(), GetClientAreaBoundsF().width, __pFooterPanel->GetHeightF()); + __pFooterPanel->SetBounds(CoordinateSystem::AlignToDevice(footerPanelBounds)); + + // hiding the address bar + // __pAddressbar->SetBounds(__pAddressbar->GetX(), __pAddressbar->GetY() - __pAddressbar->GetHeight(), __pAddressbar->GetWidth(), __pAddressbar->GetHeight()); + __pAddressbar->SetShowState(false); +// if(__pWebViewer != null) +// { +// __pWebViewer->Resume(); +// } + + if(pUrl != null && pUrl->GetLength() > 0) + { + LoadUrl(*pUrl); + } + else if(__pWindowInfo != null) + { + if(__pWindowInfo->pageUrl.GetLength() > 0 &&previousSceneId != IDSCN_BRIGHTNESS && previousSceneId != IDSCN_HISTORY_LIST && previousSceneId != IDSCN_MULTIPLE_WINDOW && previousSceneId != IDSCN_MULTIPLE_WINDOW_GRID && previousSceneId != IDSCN_BOOKMARK_VIEW && previousSceneId != IDSCN_SETTINGS && previousSceneId.Contains(IDSCN_MAIN_VIEW) == false) + { + LoadUrl(__pWindowInfo->pageUrl); + } + else if(__pWindowInfo->pageUrl.GetLength() > 0 && __pWindowInfo->isAppcontrolTriggered == true) + { + LoadUrl(__pWindowInfo->pageUrl); + __pWindowInfo->isAppcontrolTriggered = false; + } + else if (__pWindowInfo->isJavascriptInitiated == true && __pWindowInfo->isFirstLaunch == true) + { + __pWindowInfo->isFirstLaunch = false; + AppLog("Called"); + InitWebControl(); + __pWindowInfo->pCurrentWeb = __pWebViewer; + if(__pWindowInfo->pageUrl.GetLength() > 0) + LoadUrl(__pWindowInfo->pageUrl); + } + } + + String homePage = SettingPresentationModel::GetInstance()->GetHomepage(); + AppLog("Homepage Value in Onsceneactivated is %ls",homePage.GetPointer()); + if(homePage.CompareTo((L"IDS_BR_BODY_MOST_VISITED_SITES")) == 0) + { + InitMostVisitedSitesView(GetOrientationStatus()); + } + else + { + if(__pMostVisitedListView != null) + { + __pMostVisitedListView->SetShowState(false); + } + } + + if(__pMostVisitedListView && __pMostVisitedListView->GetShowState() == true) + { + __pMostVisitedListView->UpdateList(); + } + if (__pAddressbar != null && pArgs != null && (previousSceneId == IDSCN_BOOKMARK_VIEW || previousSceneId == IDSCN_HISTORY_LIST)) + { + String* pBookmarkUrl = dynamic_cast< String* >(pArgs->GetAt(0)); + + if (pBookmarkUrl == null) + return; + AppLogDebug("bookmarkUrl = %ls",pBookmarkUrl->GetPointer()); + //__pAddressbar->SetUrl(*pBookmarkUrl); + SetUrl(*pBookmarkUrl); + + if (__pWebViewer != null && homePage.CompareTo((L"IDS_BR_BODY_BLANK_PAGE")) != 0) + __pWebViewer->LoadUrl(*pBookmarkUrl); + delete pBookmarkUrl; + } + + bool isPrivateBrowsing = SettingPresentationModel::GetInstance()->GetPrivateOn(); + Bitmap* pBitmap = null; + if (isPrivateBrowsing == true) + { + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_BUTTON_ON); + + if (__pWebViewer != null) + { + __pWebViewer->SetPrivateBrowsingEnabled(true); + } + + if (__pAddressbar != null) + { + // __pAddressbar->UpdateFaviconBitmap(true); + } + + } + else + { + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_BUTTON_OFF); + + if (__pWebViewer != null) + { + __pWebViewer->SetPrivateBrowsingEnabled(false); + } + + if (__pAddressbar != null) + { + // __pAddressbar->UpdateFaviconBitmap(false); + } + } + + if (__pOptionMenu != null && __pOptionMenu->GetItemCount() != 9) + { + __pOptionMenu->SetItemAt(1,CommonUtil::GetString(L"IDS_BR_BODY_PRIVACY_AND_SECURITY_ABB"),IDA_PRIVATEON_CLICKED,*pBitmap); + } + else if (__pOptionMenu != null ) + { + __pOptionMenu->SetItemAt(5,CommonUtil::GetString(L"IDS_BR_BODY_PRIVACY_AND_SECURITY_ABB"),IDA_PRIVATEON_CLICKED,*pBitmap); + } + + if (pBitmap != null) + { + delete pBitmap; + } + + RelayoutControls(false); + AppLog("ABC: OnSceneActivatedN started exit"); + if(__pWebViewer) + { + AppLog("WebControl's width height %d %d,",__pWebViewer->GetWidth(),__pWebViewer->GetHeight()); + __pWebViewer->Resume(); + } + +} + +void +MainForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, + const Tizen::Ui::Scenes::SceneId& nextSceneId) +{ + Canvas* pWebCanvas = null; + if (__pWebViewer != null) + { + pWebCanvas = __pWebViewer->GetCanvasN(); + + } + if (pWebCanvas == null) + { + return; + } + if (__pWindowInfo != null) + { + if (__pWindowInfo->pWebCanvasBitmap != null) + { + delete __pWindowInfo->pWebCanvasBitmap; + } + __pWindowInfo->pWebCanvasBitmap = new(std::nothrow) Bitmap(); + result r = __pWindowInfo->pWebCanvasBitmap->Construct(*pWebCanvas,Rectangle(0,0,pWebCanvas->GetBounds().width,pWebCanvas->GetBounds().height)); + AppLog("Bitmap Construction result %s",GetErrorMessage(r)); + } + Bitmap* pBitmap = GetCapturedBitmapN(); + AppLog("Coming here"); + Canvas* pCanvas = new(std::nothrow) Canvas(); + pCanvas->Construct(GetClientAreaBounds()); + if(pBitmap != null) + { + pCanvas->DrawBitmap(Point(0,0),*pBitmap); + delete pBitmap; + } + if(__pWebViewer != null && __pWindowInfo != null && __pWindowInfo->pWebCanvasBitmap != null) + pCanvas->DrawBitmap(__pWebViewer->GetPosition(),*__pWindowInfo->pWebCanvasBitmap); + + WindowInfo::pFormCanvasBitmap = new(std::nothrow) Bitmap(); + if (__pFooterPanel) + { + WindowInfo::pFormCanvasBitmap->Construct(*pCanvas,Rectangle(0,0,GetClientAreaBounds().width,GetClientAreaBounds().height - __pFooterPanel->GetHeight())); + } + delete pCanvas; + delete pWebCanvas; + if(__pAddressbar) + __pAddressbar->SetShowState(false); + if(__pWebViewer) + { + __pWebViewer->Pause(); + } + AppLog("Coming here"); +} + +bool +MainForm::OnHttpAuthenticationRequestedN(const Tizen::Base::String& host, + const Tizen::Base::String& realm, + const Tizen::Web::Controls::AuthenticationChallenge& authentication) +{ + return false; +} + +void +MainForm::OnHttpAuthenticationCanceled(void) +{ +} + +void +MainForm::OnLoadingStarted(void) +{ + AppLogDebug("MainForm::OnLoadingStarted entered"); + __isLoaded = true; + if(__pAddressbar == NULL || __pWebViewer == null) + { + return; + } + + // this is added in case if menu is opened and user load the page + if(__pOptionMenu != null && __pOptionMenu->GetShowState() == true) + { + __pOptionMenu->SetShowState(false); + __pOptionMenu->Invalidate(true); + } + + + + if(__pImageMenu != null && __pImageMenu->GetShowState() == true) + { + __pImageMenu->SetShowState(false); + __pImageMenu->Invalidate(true); + } + String url = __pWebViewer->GetUrl(); + if(url.Contains(IDS_TIZEN_SERVICE)) + { + String appId; + String delim(L":;,"); + + // Creates a StringTokenizer instance + StringTokenizer strTok(url, delim); + + int count = strTok.GetTokenCount(); // count == 4 + + HashMap *pMap = new HashMap(); + pMap->Construct(); + String token; + String key; + String value; + while (strTok.HasMoreTokens()) + { + AppLog("Token: %ls", token.GetPointer()); + strTok.GetNextToken(token); // Tizen, StringTokenizer, Sample, code + if(token.Contains(IDS_APPID)) + { + token.SubString(6, appId); + AppLog("AppID:%ls", appId.GetPointer()); + } + else if(token.Contains(IDS_KEY)) + { + token.SubString(4, key); + AppLog("key:%ls", key.GetPointer()); + } + else if(token.Contains(IDS_VALUE)) + { + token.SubString(6, value); + AppLog("value:%ls", value.GetPointer()); + } + } + pMap->Add(key, value); + + if(appId != "") + { + AppControl *pAppControl = null; + String operationId = L"http://tizen.org/appcontrol/operation/main"; + pAppControl = dynamic_cast(AppManager::FindAppControlN(appId, operationId)); + if(pAppControl) + { + AppLog("Starting AppControl"); + result r = pAppControl->Start(null, null, pMap, null); + AppLog("Result of Start %s", GetErrorMessage(r)); + } + else + { + AppLogException("AppControl not found"); + } + return; + } + } + if ( __pAddressbar != null && __pAddressbar->GetShowState() == true) + { + __pAddressbar->SetShowState(false); + AddressBarCancelledClicked(*__pAddressbar); + __pAddressbar->Invalidate(true); + } + Bitmap* pBitmap = FaviconManager::GetInstance()->GetDefaultFaviconN(); + if(pBitmap != null) + { + __pAddressbar->SetFaviconBitmap(*pBitmap); + } + delete pBitmap; + if (__adressPanelPosition.y < (0 - __pAddressbar->GetHeight() + 12)) + { + // updating the address bar position with respect to web control + __adressPanelPosition.y = 0 - __pAddressbar->GetHeight() + 12; //-12 is for the progress label + __distanceMoved = 0; + MoveUiControls(); + } + + //__pAddressbar->SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING); + SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING); + if (__pWebViewer != null) + { + AppLog("MainForm::OnLoadingStarted __pWebViewer->GetUrl() %ls",__pWebViewer->GetUrl().GetPointer()); + //__pAddressbar->SetUrl(__pWebViewer->GetUrl()); + SetUrl(__pWebViewer->GetUrl()); + if (__pWindowInfo != NULL) + { + // resetting the page title to blank, it will be received in OnPageTitleReceived() +// __pWindowInfo->pageTitle = L""; + __pWindowInfo->pageUrl = __pWebViewer->GetUrl(); + } + __pAddressbar->Invalidate(true); + } + +} + +void +MainForm::OnLoadingCanceled(void) +{ + +} + +void +MainForm::OnKeypadWillOpen(Tizen::Ui::Control& source) +{ + AppLog("XYZ::MainForm::OnKeypadWillOpen"); + +} + +void +MainForm::OnKeypadOpened(Tizen::Ui::Control& source) +{ + AppLog("XYZ::MainForm::OnKeypadOpened"); + __isKeypadOpened = true; + __pFooterPanel->SetShowState(false); + RelayoutControls(false); +} + +void +MainForm::OnKeypadClosed(Tizen::Ui::Control& source) +{ + AppLog("XYZ::MainForm::OnKeypadClosed"); + __isKeypadOpened = false; + __pFooterPanel->SetShowState(true); + RelayoutControls(true); +} + +void +MainForm::OnKeypadBoundsChanged(Tizen::Ui::Control &source) +{ + AppLog("XYZ::KeypadBoundsChanged"); + RelayoutControls(false); +} + +void +MainForm::OnLoadingErrorOccurred(LoadingErrorType error, + const Tizen::Base::String& reason) +{ + AppLogDebug("Error: %d, %ls", error, reason.GetPointer()); +} + +void +MainForm::OnLoadingCompleted(void) +{ + AppLog("MainForm::OnLoadingCompleted start"); + DateTime date; + result r = E_SUCCESS; + + if (__pWebViewer == null) + { + return; + } + + if (__pAddressbar == null) + { + return; + } + + if(__pWindowInfo && __pWebViewer) + __pWindowInfo->pageTitle = __pWebViewer->GetTitle(); + if(__pImageMenu && __pImageMenu->GetShowState()) + { + __pImageMenu->SetShowState(false); + __pImageMenu->Invalidate(true); + } + + if (__pWebViewer->CanGoForward()) + { + //__pAddressbar->SetForwardButtonEnabled(true); + SetForwardButtonEnabled(true); + } + else + { + //__pAddressbar->SetForwardButtonEnabled(false); + SetForwardButtonEnabled(false); + } + + /*if (__pAddressbar->GetAddressbarMode() != ADDRESSBAR_MODE_EDIT) + { + __pAddressbar->SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING_COMPLETE); + + //__pAddressbar->UpdateProgress(0); + UpdateProgress(0); + }*/ + + if(GetAddressbarMode() != ADDRESSBAR_MODE_EDIT) + { + SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING_COMPLETE); + UpdateProgress(0); + } + + AppLog("PrivateBrowsing %d",__pWebViewer->IsPrivateBrowsingEnabled()); + bool isPrivateBrowsing = SettingPresentationModel::GetInstance()->GetPrivateOn(); + if (isPrivateBrowsing == false) + { + if(__pHistory != null) + { + delete __pHistory; + __pHistory = null; + } + + __pHistory = new(std::nothrow) History; + HistoryPresentationModel::GetCurrentDateTime(date); + if (__pWindowInfo) + { + __pHistory->SetHistoryTitle(__pWindowInfo->pageTitle); + AppLogDebug("MainForm::OnLoadingCompleted pagetitle = %ls", __pWindowInfo->pageTitle.GetPointer()); + + __pHistory->SetHistoryUrl(__pWindowInfo->pageUrl); + AppLogDebug("MainForm::OnLoadingCompleted pageUrl = %ls", __pWindowInfo->pageUrl.GetPointer()); + } + __pHistory->SetVisitedTime(date); + + if (__pWebViewer != null) + { + AppLog("MainForm::OnLoadingCompleted setting the fav icon 0"); + + Bitmap* pTempBitmap = __pWebViewer->GetFaviconN(); + if (pTempBitmap != null) + { + AppLog("MainForm::OnLoadingCompleted setting the fav icon 1"); + __pHistory->SetFavIconBitmap(*pTempBitmap); + } + + } + + Canvas* pCanvas = __pWebViewer->GetCanvasN(); + Bitmap* pBitmap = new(std::nothrow) Bitmap(); + if ( pCanvas != null && pCanvas != null && pBitmap != null) + { + pBitmap->Construct(*pCanvas, pCanvas->GetBounds()); + pBitmap->Scale(Dimension(pBitmap->GetWidth()/4, pBitmap->GetHeight()/4)); + __pHistory->SetThumbnail(pBitmap); + } + Bitmap *pFavIcon = __pWebViewer->GetFaviconN(); + if (pFavIcon) + { + Tizen::Graphics::BufferInfo bmpInfo; + pFavIcon->Lock(bmpInfo); + AppLog("rrrr:: width %d height %d of the faviconbitmap from bufferinfo", bmpInfo.width, bmpInfo.height); + + AppLog("MainForm::OnLoadingCompleted setting the fav icon 2"); + + AppLog("rrrr:: width %d height %d of the faviconbitmap",pFavIcon->GetWidth(),pFavIcon->GetHeight()); + __pHistory->SetFavIconBitmap(*pFavIcon); + delete pFavIcon; + } + + HistoryPresentationModel::GetInstance()->SaveTempHistory(*__pHistory); + //delete pHistory; + } + else + { + return; + } +// if (__pWindowInfo && __pWindowInfo->faviconUrl == "") + { + // temperary fixed (webpage can be not loaded) + UpdateFavicon(); + } + + bool isReaderEnabled = SettingPresentationModel::GetInstance()->IsRunReaderEnabled(); + if (isReaderEnabled == true) + { + if (__pReaderData) + { + delete __pReaderData; + __pReaderData = null; + } + String filePath = Tizen::App::UiApp::GetInstance()->GetAppRootPath(); + filePath.Append(L"data/reader.js"); + File file; + char buffer[10]; + char buffer2[5]; + int i; + int readCnt; + result r = E_SUCCESS; + FileAttributes attr; + + File::GetAttributes(filePath,attr); + // Creates file + r = file.Construct(filePath, L"r+"); + if (IsFailed(r)) + { + AppLogDebug("File construct failed with %s", GetErrorMessage(r)); + return; + } + char* pScript = new(std::nothrow) char[attr.GetFileSize()+1]; + if(pScript == null) + { + AppLogDebug("Memory allocation for file failed %s", GetErrorMessage(r)); + return; + } +// file.Read(pScript,attr.GetFileSize()); +// +// AppLogDebug("scipt length %d",strlen(pScript)); + String strScript = L""; +// strScript.Append(pScript); +// for(int i=0; i<25; i++) + { + file.Read(pScript,attr.GetFileSize()); +// AppLog("xyzz tell %d",file.Tell()); +// r = strScript.Append(pScript); +// AppLog("xyzz append result %s",GetErrorMessage(r)); +// AppLog("xyzz strScript length %d",strScript.GetLength()); + } +// AppLog("xyzz final strScript length %d",strScript.GetLength()); + + __pReaderData = __pWebViewer->EvaluateJavascriptN(pScript); + if (__pReaderData == null) + { + AppLog("MainScene::data is null Error :%s",GetErrorMessage(GetLastResult())); + __pReaderData = new String(L"

Chinese PM Li Keqiang vows to open up markets to India

Chinese PM Li Keqiang vows to open up markets to India

"); +// return; + } + AppLogDebug("evaluateJavascript result %s , __pReaderData %ls",GetErrorMessage(GetLastResult()),__pReaderData->GetPointer()); + if (__pReaderData->CompareTo(L"undefined") != 0 && __pReaderData->CompareTo(L"") != 0) + { + //__pAddressbar->SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_READER); + SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_READER); + } + delete[] pScript; + } + + + AppLog("MainForm::OnLoadingCompleted done"); +} + +void +MainForm::OnEstimatedProgress(int progress) +{ + AppLogDebug("MainForm::OnEstimatedProgress entered %d",progress); + + if (progress < DEFAULT_PROGRESS_PERCENTAGE) + progress = DEFAULT_PROGRESS_PERCENTAGE; + //if(__pAddressbar) + // __pAddressbar->UpdateProgress(progress); + UpdateProgress(progress); +} + +void MainForm::OnFaviconReceived(const Tizen::Graphics::Bitmap& favicon) +{ + AppLog("MainForm::OnFaviconReceived"); + if (__pWebViewer != null && __pHistory != null && __pWindowInfo != null && (__pWindowInfo->pageUrl.CompareTo(__pHistory->GetHistoryUrl()) == 0)) + { + Bitmap* favIcon = __pWebViewer->GetFaviconN(); + if(favIcon != null) + { + HistoryPresentationModel::GetInstance()->UpdateHistoryFavIcon(*__pHistory, *favIcon); + delete favIcon; + } + } +} + +void +MainForm::OnUrlValueChanged(Addressbar&) +{ + Invalidate(true); +} + +void +MainForm::OnUrlSubmitted(Addressbar& addBar) +{ + AppLog("MainForm::OnUrlSubmitted"); + String url = addBar.GetUrl(); + AppLog("MainForm::OnUrlSubmitted url is %ls", url.GetPointer()); + + + if(__pFooterUrlField) + { + AppLog("Position:: %d, %ls",__pFooterUrlField->GetTextLength(),__pFooterUrlField->GetText().GetPointer()); + __pFooterUrlField->SetCursorPosition(__pFooterUrlField->GetTextLength()); + } + AddressBarCancelledClicked(*__pAddressbar); + LoadUrl(url); +} + +void +MainForm::LoadUrl(String& url) +{ + url.Trim(); + String encodedUrl; +// UrlEncoder::Encode(url, L"UTF-8", encodedUrl); + AppLogDebug("MainForm::LoadUrl enter"); + + if (__pWebViewer != null) + { + __pWebViewer->SetShowState(true); + __pWebViewer->Invalidate(true); + } + + if (url.CompareTo(L"") == 0) + { + return; + } + if(__pFooterPanel != null) + { + __pFooterPanel->SetShowState(true); + __pFooterPanel->Invalidate(true); + } + InitWebControl(); + + bool ret = false; + bool flag = false; + + String firstPattern(L"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)"); + String secondPattern(L"^[A-Za-z0-9\.\+-:#@%/;$~?]+\\.[A-Za-z0-9!\+-=:#@%/;$~()_?\\\.&]{2,}$"); // URL of type abc.com (i.e without protocol in front of it) + + RegularExpression firstRegex; + RegularExpression secondRegex; + + firstRegex.Construct(firstPattern, REGEX_CASELESS); + secondRegex.Construct(secondPattern, REGEX_CASELESS); + + // Match + ret = firstRegex.Match(url, false); // This returns true value + flag = secondRegex.Match(url, false); // Checks whether URL typed is of type abc.com (i.e without protocol in front of it) + + + + if (ret == true && __pWebViewer != null) + { + SetUrl(url); + __pWebViewer->LoadUrl(url); + } + else if(__pWebViewer != null) + { + String tempUrl = L"http://"; + tempUrl.Append(url); + + if (flag == true) + { + __pWebViewer->LoadUrl(tempUrl); + } + else + { + UrlEncoder::Encode(url, L"UTF-8", encodedUrl); + __pWebViewer->LoadUrl(SettingPresentationModel::GetInstance()->GetSearchUrl(encodedUrl)); + } + } + if (__pAddressbar != null) + { + //__pAddressbar->SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING); + SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING); + } + + AppLogDebug("MainForm::LoadUrl exit"); + + return; + +} + +void +MainForm::OnFocusGained(const Tizen::Ui::Control& source) +{ + AppLog("MainForm::OnFocusGained"); + if(__pFooterPanel) + { + __pFooterPanel->SetShowState(false); + } + + if(__pWebViewer) + { + __pWebViewer->ReleaseBlock(); + } + + if(__pAddressbar) + { + __pAddressbar->SetShowState(true); + __pAddressbar->SetAddressbarURLFocus(); + } + if(__pFindWordControl && __pFindWordControl->GetShowState() == true) + { + __currentSearchStr = L""; + __currentWordIndex = 0; + __maxOccurrances = 0; + + if (__pFindWordPanelLeftToRight && __pFindWordPanelLeftToRight->GetShowState() == true) + { + __pFindWordEditField->SetText(L""); + __pFindWordEditField->HideKeypad(); + __pFindWordControl->SetShowState(false); + __pFindWordCountLabel->SetText(L"0/0"); + } + else if(__pFindWordPanelRightToLeft && __pFindWordPanelRightToLeft->GetShowState() == true) + { + __pFindWordEditFieldRightToLeft->SetText(L""); + __pFindWordEditFieldRightToLeft->HideKeypad(); + __pFindWordControl->SetShowState(false); + __pFindWordCountLabelRightToLeft->SetText(L"0/0"); + } + + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); + + if(__pWebViewer) + __pWebViewer->SearchTextAllAsync(L"",true); + __pFindWordControl->SetShowState(false); + } + RelayoutControls(false); +} + +void +MainForm::OnFocusLost(const Tizen::Ui::Control& source) +{ + AppLog("MainForm::OnFocusLost called"); +} + +void +MainForm::OnStopClicked(Addressbar& addBar) +{ + AppLogDebug("MainForm::OnStopClicked called"); + if (__pWebViewer) + { + //__pAddressbar->SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING_COMPLETE); + SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING_COMPLETE); + __pWebViewer->StopLoading(); + RequestRedraw(true); + } +} + +void +MainForm::OnBackClicked(/*const Addressbar& addBar*/) +{ + // AppLog("MainForm::OnBackClicked"); + result r = E_FAILURE; + if(__pImageMenu && __pImageMenu->GetShowState() == true) + { + AppLog("Hiding the menu"); + __pImageMenu->SetShowState(false); + } + + if (__pWebViewer && __pWebViewer->CanGoBack()) + { + __pWebViewer->GoBack(); + } + else if(__pWindowInfo && __pWindowInfo->isJavascriptInitiated == false) + { + UiApp* pApp = null; + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + } + } + else + { + UiApp* pApp = null; + WindowInfo* pWindowInfo = null; + int totalCount = 0; + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return; + } + ArrayList* pAllWindowList = MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList(); + if (pAllWindowList == NULL) + { + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + } + } + if (pAllWindowList != null) + { + totalCount = pAllWindowList->GetCount(); + } + for (int count = 0; count < totalCount; count++) + { + pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(count)); + if (pWindowInfo == null) + { + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + } + } + if (pSceneManager != null && pWindowInfo != null && pSceneManager->GetCurrentSceneId() == pWindowInfo->sceneID && pWindowInfo->isJavascriptInitiated == true) + { + r = SceneRegister::DestroyAndUnRegisterScene(pWindowInfo->sceneID); + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + r = pAllWindowList->RemoveAt(count, true); + __pWindowInfo = null; + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + if(count > 0) + { + pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(count - 1)); + } + else if(pAllWindowList->GetCount() > 0) + { + pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(pAllWindowList->GetCount() - 1)); + } + else + { + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + return; + } + + } + if (pWindowInfo == null) + { + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + return; + } + } + else + { + r = pSceneManager->GoForward(ForwardSceneTransition(pWindowInfo->sceneID ,SCENE_TRANSITION_ANIMATION_TYPE_NONE,SCENE_HISTORY_OPTION_ADD_HISTORY,SCENE_DESTROY_OPTION_DESTROY)); +// r = pSceneManager->GoBackward(BackwardSceneTransition(pWindowInfo->sceneID ,SCENE_TRANSITION_ANIMATION_TYPE_NONE)); + if (IsFailed(r)) + { + AppLogException("OnActionPerformed failed with %s", GetErrorMessage(r)); + return; + } + } + break; + } + + } + + } + +} + +void +MainForm::OnForwardClicked(/*const Addressbar& addBar*/) +{ + AppLog("MainForm::OnForwardClicked"); + if (__pWebViewer == null) + return; + + if (__pWebViewer->CanGoForward()) + { + __pWebViewer->GoForward(); + } +} + +void +MainForm::OnAddressBarFocusGained(const Addressbar& addBar) +{ + AppLog("XYZ::MainForm::OnAddressBarFocusGained"); + if(__pFooterPanel != null) + { + __pFooterPanel->SetShowState(false); + } + + if (__pAddressbar != null && __pAddressbar->GetShowState() == false) + { + __pAddressbar->SetShowState(true); + __pAddressbar->SetBounds(Rectangle(0,0,GetClientAreaBounds().width,__pAddressbar->GetHeight())); + } + + RelayoutControls(false); +} + +void +MainForm::OnAddressBarFocusLost(const Addressbar& addBar, bool addressbarKeyPadState) +{ + AppLog("XYZ::MainForm::OnAddressBarFocusLost"); + + int Height = GetClientAreaBounds().height; + AppLog("MainForm::OnAddressBarFocusLost height is %d",Height); + + RelayoutControls(false); +} + +void +MainForm::OnAddressCancelledClicked(const Addressbar& addBar) +{ + AddressBarCancelledClicked(addBar); +} + +void +MainForm::OnAddressBarModeChanged(/*const Addressbar& addBar*/) +{ + __prevAddressBarMode = __curAddressBarMode; + + if (__pAddressbar != null) + { + __curAddressBarMode = GetAddressbarMode(); + } + + if (__curAddressBarMode == ADDRESSBAR_MODE_EDIT) + { + __adressPanelPosition.y = 0; + if (__pAddressbar != null) + { + __webControlPosition.y = __pAddressbar->GetHeight() - 12; + __webControlPositionF.y = __pAddressbar->GetHeightF() - 12.0f; + __pAddressbar->SetBounds(Rectangle(0,0,GetClientAreaBounds().width,__pAddressbar->GetHeight())); + __pAddressbar->Invalidate(true); + } + if (__pWebViewer != null) + { + __pWebViewer->StopLoading(); + } + } + else if(__curAddressBarMode == ADDRESSBAR_MODE_LOADING) + { + __adressPanelPosition.y = 0; + if (__pAddressbar != null) + { + __webControlPosition.y = 0; + __webControlPositionF.y = 0.0f; + __pAddressbar->SetBounds(Rectangle(0, __pAddressbar->GetY() - __pAddressbar->GetHeight(), GetClientAreaBounds().width, __pAddressbar->GetHeight())); + __pAddressbar->Invalidate(true); + } + } +} + +void +MainForm::OnClipboardClosed(const Addressbar& addBar) +{ + AppLog("XYZ::MainForm::OnClipboardClosed"); + if (__pFooterPanel && __pAddressbar->GetShowState() == false) + { + AppLog("akjshdasd 3"); + __pFooterPanel->SetShowState(true); + } + __isKeypadOpened = false; + RelayoutControls(false); +} + +void +MainForm::OnAddressBarKeypadClosed(const Addressbar& addBar, bool footerState) +{ + AppLog("XYZ::MainForm::OnAddressBarKeypadClosed"); + if (__pFooterPanel && __pAddressbar->GetShowState() == false) + { + AppLog("akjshdasd 3"); + __pFooterPanel->SetShowState(true); + } + __isKeypadOpened = false; + if(__pNotification && __pNotification->GetShowState()) + { + __pNotification->SetPosition(0,GetClientAreaBounds().height - __pNotification->GetHeight()); + } + + RelayoutControls(false,footerState); +} + +void +MainForm::OnAddressBarKeypadOpened(const Addressbar& addBar) +{ + AppLog("XYZ::MainForm::OnAddressBarKeypadOpened"); + __isKeypadOpened = true; + if(__pNotification && __pNotification->GetShowState()) + { + __pNotification->SetPosition(0,GetClientAreaBounds().height - __pNotification->GetHeight()); + } + RelayoutControls(false); +} + +void +MainForm::OnAddressBarKeypadWillOpen(const Addressbar& addBar) +{ + __isKeypadOpened = true; + __pFooterPanel->SetShowState(false); +} + +void +MainForm::OnAddressBarKeypadBoundsChanged(const Addressbar& addBar) +{ + AppLog("XYZ::MainForm::OnAddressBarKeypadBoundsChanged"); + RelayoutControls(false); +} + +void +MainForm::OnPageTitleReceived(const Tizen::Base::String& title) +{ + AppLog("MainForm::OnPageTitleReceived %ls",title.GetPointer()); + if (__pWindowInfo) + { + __pWindowInfo->pageTitle = title; + if (__pWebViewer != null) + { + __pWindowInfo->pageUrl = __pWebViewer->GetUrl(); + AppLog("MainForm::OnPageTitleReceived url %ls",__pWindowInfo->pageUrl.GetPointer()); + } + } + if (__pAddressbar != null && __pWebViewer != null) + { + SetUrl(__pWebViewer->GetUrl()); + __pAddressbar->Invalidate(true); + } +} + +void +MainForm::UpdateFavicon(void) +{ + AppLog("MainForm::UpdateFavicon called"); + bool urlImageType = false; + String *tempPath = null; + if(__pWebViewer) + tempPath = __pWebViewer->EvaluateJavascriptN(L"var getFavicon = function() { var favicon = '/favicon.ico'; var nodeList = document.getElementsByTagName('link'); if(nodeList) { for (var i = 0; i < nodeList.length; i++) { if ((nodeList[i].getAttribute('rel') == 'icon')||(nodeList[i].getAttribute('rel') == 'shortcut icon')) { favicon = nodeList[i].getAttribute('href'); } } } return favicon; }; getFavicon();"); + Bitmap* pBitmap = null; + + if (tempPath && tempPath->GetLength() > 0 && tempPath->CompareTo(L"undefined") != 0) + { + if (__pWindowInfo != null) + { + Uri url; + url.SetUri(*tempPath); + if (url.GetHost().GetLength() == 0) + { + Uri webUrl; + if(__pWebViewer) + webUrl.SetUri(__pWebViewer->GetUrl()); + result r = url.SetHost(webUrl.GetHost()); + if(IsFailed(r)) + { + delete tempPath; + return; + } + } + if (url.GetScheme().GetLength() == 0) + { + Uri webUrl; + if(__pWebViewer) + webUrl.SetUri(__pWebViewer->GetUrl()); + url.SetScheme(webUrl.GetScheme()); + } + __pWindowInfo->faviconUrl = url.ToString(); + + pBitmap = __pWebViewer->GetFaviconN(); + + if (pBitmap != null) + { + AppLog("__pWindowInfo->pFavicon updating favicon"); + if (__pWindowInfo->pFavicon != NULL) + { + __pWindowInfo->pFavicon = null; + } + __pWindowInfo->pFavicon = new(std::nothrow) Bitmap(); + __pWindowInfo->pFavicon->Construct(*pBitmap,Rectangle(0,0,pBitmap->GetWidth(),pBitmap->GetHeight())); + + __pAddressbar->SetFaviconBitmap(*__pWindowInfo->pFavicon); + + FaviconManager::GetInstance()->SaveFavicon(*__pWindowInfo->pFavicon, __pWindowInfo->faviconUrl); + } + else if(__pWindowInfo->pFavicon != null) + { + __pAddressbar->SetFaviconBitmap(*__pWindowInfo->pFavicon); + } + else + { + Bitmap *pDefaultBmp = FaviconManager::GetInstance()->GetDefaultFaviconN(); + if(pDefaultBmp != null) + { + __pAddressbar->SetFaviconBitmap(*pDefaultBmp); + } + } + if(pBitmap) + { + delete pBitmap; + pBitmap = null; + } + } + delete tempPath; + } + else + { + // do not remove + if(tempPath != null) + { + delete tempPath; + } + AppLogDebug("Error occured: %s", GetErrorMessage(GetLastResult())); + } + +} + +bool +MainForm::OnLoadingRequested(const Tizen::Base::String& url, + Tizen::Web::Controls::WebNavigationType type) +{ + AppLog("urlk %ls",url.GetPointer()); + // when load new page if find word panel is open its show state is false + if(__pFindWordControl && __pFindWordControl->GetShowState() == true) + { + __currentSearchStr = L""; + __currentWordIndex = 0; + __maxOccurrances = 0; + __pFindWordEditField->SetText(L""); + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); + __pFindWordCountLabel->SetText(L"0/0"); + __pFindWordControl->SetShowState(false); + __pFindWordEditField->HideKeypad(); + RelayoutControls(false); + } + + __pFooterPanel->Invalidate(true); + + Uri uriInfo; + uriInfo.SetUri(url); + + if(url.Contains(IDS_TIZEN_SERVICE)) + { + String appId; + String delim(L":;,"); + + // Creates a StringTokenizer instance + StringTokenizer strTok(url, delim); + + int count = strTok.GetTokenCount(); // count == 4 + + HashMap *pMap = new HashMap(); + pMap->Construct(); + + String token; + String key; + String value; + while (strTok.HasMoreTokens()) + { + AppLog("Token: %ls", token.GetPointer()); + strTok.GetNextToken(token); // Tizen, StringTokenizer, Sample, code + if(token.Contains(IDS_APPID)) + { + token.SubString(6, appId); + AppLog("AppID:%ls", appId.GetPointer()); + } + else if(token.Contains(IDS_KEY)) + { + token.SubString(4, key); + AppLog("key:%ls", key.GetPointer()); + } + else if(token.Contains(IDS_VALUE)) + { + token.SubString(6, value); + AppLog("value:%ls", value.GetPointer()); + } + } + pMap->Add(key, value); + + if(appId != "") + { + AppControl *pAppControl = null; + String operationId = L"http://tizen.org/appcontrol/operation/main"; + pAppControl = dynamic_cast(AppManager::FindAppControlN(appId, operationId)); + if(pAppControl) + { + result r = pAppControl->Start(null, null, pMap, null); + } + else + { + AppLogException("AppControl not found"); + } + return true; + } + } + + return false; +} + +DecisionPolicy +MainForm::OnWebDataReceived(const Tizen::Base::String& mime, + const Tizen::Net::Http::HttpHeader& httpHeader) +{ + return Tizen::Web::Controls::WEB_DECISION_CONTINUE; +} + +void +MainForm::OnWebPageBlockSelected(Web& source, FloatPoint& startPoint, FloatPoint& endPoint) +{ + AppLog("LMN::MainForm::OnWebPageBlockSelected"); +// if(__isLongPressedDone == false) +// return; + + if (__pHitElementResult != null) + { + delete __pHitElementResult; + __pHitElementResult = null; + } + + if (__pWebViewer != null) + { + AppLog("MainForm::OnWebPageBlockSelected web not null"); + __pHitElementResult = __pWebViewer->GetElementByPointN(startPoint); + + if(GetLastResult() == E_INVALID_ARG || (__pHitElementResult->GetTagName().Equals(L"INPUT",false) == false && __pHitElementResult->GetTagName().Equals(L"TEXTAREA",false) == false)) + { + AppLog("datafirst startpoint error %s",GetErrorMessage(GetLastResult())); + __pHitElementResult = __pWebViewer->GetElementByPointN(endPoint); + if(GetLastResult() == E_INVALID_ARG || (__pHitElementResult->GetTagName().Equals(L"INPUT",false) == false && __pHitElementResult->GetTagName().Equals(L"TEXTAREA",false) == false)) + { + __pHitElementResult = __pWebViewer->GetElementByPointN(__longPressPoint); + if(__pHitElementResult == null) + { + __pHitElementResult = __pWebViewer->GetElementByPointN(endPoint); + } + } + AppLog("datafirst endpoint error %s",GetErrorMessage(GetLastResult())); + } + } + + if (__pHitElementResult == null) + { + return; + } + + if (__pHitElementResult->HasImage() != true) + { + String tagName = __pHitElementResult->GetTagName(); + String type = __pHitElementResult->GetAttributeValue("type"); + String contenteditable = __pHitElementResult->GetAttributeValue("contenteditable"); + + + AppLog("TagName %ls",tagName.GetPointer()); + __currentSelectedStr.Clear(); + AppLog("__currentSelectedStr after clear %ls",__currentSelectedStr.GetPointer()); + __currentSelectedStr = __pWebViewer->GetTextFromBlock(); + AppLog("__currentSelectedStr after GetTextFromBlock %ls",__currentSelectedStr.GetPointer()); + if(tagName.Equals(L"TEXTAREA",false) == true) + { + AppLog("Tagnameseemstobe TEXTAREA"); + } + else if(tagName.Equals(L"INPUT",false) == true) + { + AppLog("Tagnameseemstobe INPUT"); + } + + if (((tagName.Equals(L"INPUT",false) == true) || tagName.Equals(L"TEXTAREA",false) == true) || contenteditable.Equals(L"true",false) == true/*&& __isLongPressedDone == true*/ && __currentSelectedStr.CompareTo(L"") !=0 ) + { + AppLog("MainForm::OnWebPageBlockSelected show paste option"); + + InitSelectTextContextMenuF(FloatPoint(startPoint.x,startPoint.y + __pWebViewer->GetY()),true); + if(__pImageMenu) + { + __pImageMenu->SetShowState(true); + __pImageMenu->Show(); + __pImageMenu->Invalidate(true); + } + } + else /*if(__isLongPressedDone == true)*/ + { + AppLog("MainForm::OnWebPageBlockSelected no paste option"); + + if(__pHitElementResult->GetUrl().GetLength() > 0) + { + __currentSelectedStr.Clear(); + __currentSelectedStr = __pHitElementResult->GetUrl(); + } + InitSelectTextContextMenuF(FloatPoint(startPoint.x,startPoint.y + __pWebViewer->GetY()),false); + if(__pImageMenu) + { + __pImageMenu->SetShowState(true); + __pImageMenu->Show(); + __pImageMenu->Invalidate(true); + } + } + + AppLog("MainForm::OnWebPageBlockSelected block text is %ls",__currentSelectedStr.GetPointer()); + AppLog("MainForm::OnWebPageBlockSelected tag name is %ls",tagName.GetPointer()); + AppLog("MainForm::OnWebPageBlockSelected type name is %ls",type.GetPointer()); + } + +} + +void +MainForm::OnWebPageShowRequested(Tizen::Web::Controls::Web& source) +{ + +} + +Web* +MainForm::OnWebWindowCreateRequested(void) +{ + AppLog("MainForm::OnWebWindowCreateRequested entered"); + WindowInfo* pNewWindowInfo = MultipleWindowPresentationModel::GetInstance()->CreateNewMainViewSceneN(); + + if (pNewWindowInfo == null) + { + return null; + } + result r = E_SUCCESS; + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == NULL) + { + return null; + } + ArrayList* pArgList = new(std::nothrow) ArrayList(); + if (pArgList == NULL) + { + return null; + } + r = pArgList->Construct(); + if (r == E_SUCCESS) + { + pNewWindowInfo->isJavascriptInitiated = true; + pArgList->Add(*pNewWindowInfo); + r = pSceneManager->GoForward(ForwardSceneTransition(pNewWindowInfo->sceneID, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList); + delete pArgList; + if (IsFailed(r)) + { + AppLogDebug("EditHistoryListForm::OnFormBackRequested Failed to GoBackward %s",GetErrorMessage(r)); + return null; + } + } else { + delete pArgList; + } + + return pNewWindowInfo->pCurrentWeb; +} + +void +MainForm::OnWebWindowCloseRequested(Tizen::Web::Controls::Web& source) +{ + AppLog("OnWebWindowCloseRequested"); + ArrayList* pAllWindowList = MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList(); + SceneManager* pSceneManager = SceneManager::GetInstance(); + WindowInfo* pWindowInfo = null; + WindowInfo* pNewWindowInfo = null; + int totalCount = 0; + UiApp* pApp = null; + result r = E_FAILURE; + + if (pAllWindowList != null) + { + totalCount = pAllWindowList->GetCount(); + } + + for (int count = 0; count < totalCount; count++) + { + pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(count)); + + if (__pWindowInfo != null && pWindowInfo != null && __pWindowInfo->sceneID == pWindowInfo->sceneID) + { + r = SceneRegister::DestroyAndUnRegisterScene(__pWindowInfo->sceneID); + r = pAllWindowList->RemoveAt(count, true); + + Form* pCurrentForm = null; + if(SceneManager::GetInstance()->GetCurrentScene() != null) + pCurrentForm = (SceneManager::GetInstance()->GetCurrentScene()->GetForm()); + if (pCurrentForm) + { + pCurrentForm->SendUserEvent(UPDATE_MAINFORM_FOOTER_ON_WINDOWCLOSED, null); + } + + if (pAllWindowList->GetCount() > 0) + { + pNewWindowInfo = null; + pNewWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(pAllWindowList->GetCount() - 1)); + } + else + { + WindowInfo* pNewWindowInfo = MultipleWindowPresentationModel::GetInstance()->CreateNewMainViewSceneN(); + + if (pNewWindowInfo == null) + { + return; + } + result r = E_SUCCESS; + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == NULL) + { + return; + } + ArrayList* pArgList = new(std::nothrow) ArrayList(); + if (pArgList == NULL) + { + return; + } + r = pArgList->Construct(); + if (r == E_SUCCESS) + { + pArgList->Add(*pNewWindowInfo); + result r = pSceneManager->GoForward(ForwardSceneTransition(pNewWindowInfo->sceneID, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList); + if (pArgList != null) + { + delete pArgList; + pArgList = null; + } + if(IsFailed(r)) + { + AppLogDebug("MultipleWindowForm::OnActionPerformed GoForward failed %s",GetErrorMessage(r)); + return; + } + } + + pApp = UiApp::GetInstance(); + if (pApp != null) + { + r = pApp->GetFrameAt(0)->SetShowMode(FRAME_SHOW_MODE_MINIMIZED); + return; + } + } + if(pNewWindowInfo) + r = pSceneManager->GoForward(ForwardSceneTransition(pNewWindowInfo->sceneID ,SCENE_TRANSITION_ANIMATION_TYPE_NONE,SCENE_HISTORY_OPTION_ADD_HISTORY,SCENE_DESTROY_OPTION_DESTROY)); + + break; + } + + } + + +} + +void +MainForm::RelayoutControls(bool showAddressbar,bool relayoutFooter) +{ + AppLog("xyz:: MainForm::RelayoutControls called"); + __webControlPosition.y = 0; + __webControlPositionF.y = 0.0f; + __webControlHeight = GetClientAreaBounds().height; + __webControlHeightF = GetClientAreaBoundsF().height; + AppLog("Client area height: %d width %d", __webControlHeight,GetClientAreaBounds().width); + + AppLog("Client area height: %d", __webControlHeight); + if(__pAddressbar != null && __pAddressbar->GetShowState() == true) + { + __webControlPosition.y += __pAddressbar->GetHeight(); + __webControlPositionF.y += __pAddressbar->GetHeightF(); + __webControlHeight -= __pAddressbar->GetHeight(); + __webControlHeightF -= __pAddressbar->GetHeightF(); + __pAddressbar->SetBounds(0, 0, __pAddressbar->GetWidth(), __pAddressbar->GetHeight()); + } + else if(__pFindWordControl != null && __pFindWordControl->GetShowState() == true) + { + __webControlPosition.y += __pFindWordControl->GetHeight(); + __webControlPositionF.y += __pFindWordControl->GetHeightF(); + __webControlHeight -= __pFindWordControl->GetHeight(); + __webControlHeightF -= __pFindWordControl->GetHeightF(); + __pFindWordControl->SetBounds(0, 0, GetClientAreaBounds().width, __pFindWordControl->GetHeight()); + } + + if(__pFooterPanel != null && __pFooterPanel->GetShowState() == true && relayoutFooter == true) + { + __webControlHeight -= __pFooterPanel->GetHeight(); + __webControlHeightF -= __pFooterPanel->GetHeightF(); + + __pFooterPanel->SetBounds(CoordinateSystem::AlignToDevice(FloatRectangle(0.0F, __webControlPositionF.y + __webControlHeightF, GetClientAreaBoundsF().width, __pFooterPanel->GetHeightF()))); + __webControlHeight = __webControlHeight + 12; + __webControlHeightF = __webControlHeightF + 12.0f; + } + + + + if (__pWebViewer != null && __pWebViewer->GetShowState() == true) + { + if(__pWebViewer->GetX() == 0 && __pWebViewer->GetY() == __webControlPosition.y &&__pWebViewer->GetWidth() == GetClientAreaBounds().width &&__pWebViewer->GetHeight() == __webControlHeight ) + { + } + else + { + __pWebViewer->SetBounds(CoordinateSystem::AlignToDevice(FloatRectangle(0.0f, __webControlPositionF.y, GetClientAreaBoundsF().width, __webControlHeightF))); + AppLog("xyz:: MainForm::RelayoutControls called __webControlHeight %d",__webControlHeight); + __pWebViewer->Invalidate(false); + } + } + + if(__pMostVisitedListView != null && __pAddressbar != null && __pFooterPanel != null) + { + __pMostVisitedListView->SetBounds(Tizen::Graphics::Rectangle(0,__webControlPosition.y , GetClientAreaBounds().width, __webControlHeight)); + } + + Invalidate(true); +} + +void +MainForm::ShowFindWordPanel(bool show , bool isTouchPressed) +{ + if (__pFindWordControl == null) + { + return; + } + + Tizen::Locales::LocaleManager localeManager; + Tizen::Locales::Locale local = localeManager.GetSystemLocale(); + + String languageCode; + result r = SettingInfo::GetValue(L"Language", languageCode); + // int languagecode = local.GetLanguageCode(); + AppLog("rahul language is %S", languageCode.GetPointer()); + + if (show == true) + { + InitFindWordPanel(); + + if (languageCode.CompareTo("ara") == 0) + { + AppLog("rahul language is arabic"); + + __pFindWordPanelLeftToRight->SetShowState(false); + __pFindWordPanelRightToLeft->SetShowState(true); + + __pFindWordClear->SetShowState(false); + __pFindWordCountLabel->SetShowState(false); + __pFindWordEditField->SetShowState(false); + + __pFindWordClearRightToLeft->SetShowState(true); + __pFindWordCountLabelRightToLeft->SetShowState(true); + __pFindWordEditFieldRightToLeft->SetShowState(true); + } + else + { + AppLog("rahul language is not arabic"); + + + __pFindWordPanelLeftToRight->SetShowState(true); + __pFindWordPanelRightToLeft->SetShowState(false); + + __pFindWordClear->SetShowState(true); + __pFindWordCountLabel->SetShowState(true); + __pFindWordEditField->SetShowState(true); + + __pFindWordClearRightToLeft->SetShowState(false); + __pFindWordCountLabelRightToLeft->SetShowState(false); + __pFindWordEditFieldRightToLeft->SetShowState(false); + } + __pFindWordControl->SetShowState(true); + } + else + { + if(__pFindWordControl != null) + { + __pFindWordControl->SetShowState(false); + } + } + + AppLog("MainForm::ShowFindWordPanel %d",show); + if (show && !isTouchPressed) + { + if (languageCode.CompareTo("ara") == 0) + { + if (__pFindWordEditFieldRightToLeft) + { + __pFindWordEditFieldRightToLeft->SetFocus(); + __pFindWordEditFieldRightToLeft->ShowKeypad(); + } + } + else + { + if (__pFindWordEditField) + { + __pFindWordEditField->SetFocus(); + __pFindWordEditField->ShowKeypad(); + } + } + } + else + { + if (languageCode.CompareTo("ara") == 0) + { + if (__pFindWordEditFieldRightToLeft) + __pFindWordEditFieldRightToLeft->HideKeypad(); + } + else + { + if (__pFindWordEditField) + __pFindWordEditField->HideKeypad(); + } + } + + RelayoutControls(false); +} + +void +MainForm::StartWordSearch() +{ + //Get the count of occurances of the word in the current page + __maxOccurrances = 0; + __currentWordIndex = 0; + + __pFindWordPrev->SetEnabled(false); + String *pCountStr = null; + if (__pWebViewer) + { + result r = __pWebViewer->SearchTextAllAsync(__currentSearchStr, false); + AppLog("Search Result %s",GetErrorMessage(r)); + } + + /*__pWebViewer->EvaluateJavascriptN(L"document.body.textContent.match(/" + __currentSearchStr + "/gi).length;"); + if (pCountStr != null) + { + Integer::Parse(*pCountStr, 10, __maxOccurrances); + delete pCountStr; + } + + AppLogDebug("'%ls' is found %d times", __currentSearchStr.GetPointer(), __maxOccurrances); + */ + +} + +void MainForm::OnTextFound(int totalCount, int currentOrdinal) +{ + AppLog("MainForm::OnTextFound totalCount %d",totalCount); + AppLog("MainForm::OnTextFound currentOrdinal %d",currentOrdinal); + + if(totalCount <= 9) + { + if (__pFindWordCountLabel) + { + __pFindWordCountLabel->SetBounds(__pFindWordCountLabel->GetX(),__pFindWordCountLabel->GetY(),84,__pFindWordCountLabel->GetHeight()); + } + if (__pFindWordEditField) + { + __pFindWordEditField->SetBounds(__pFindWordEditField->GetX(),__pFindWordEditField->GetY(),214+80,__pFindWordEditField->GetHeight()); + } + } + else if(totalCount >= 100) + { + if (__pFindWordCountLabel) + { + __pFindWordCountLabel->SetBounds(__pFindWordCountLabel->GetX(),__pFindWordCountLabel->GetY(),124,__pFindWordCountLabel->GetHeight()); + } + if (__pFindWordEditField) + { + __pFindWordEditField->SetBounds(__pFindWordEditField->GetX(),__pFindWordEditField->GetY(),174,__pFindWordEditField->GetHeight()); + } + } + else + { + if (__pFindWordCountLabel) + { + __pFindWordCountLabel->SetBounds(__pFindWordCountLabel->GetX(),__pFindWordCountLabel->GetY(),124,__pFindWordCountLabel->GetHeight()); + } + if (__pFindWordEditField) + { + __pFindWordEditField->SetBounds(__pFindWordEditField->GetX(),__pFindWordEditField->GetY(),174,__pFindWordEditField->GetHeight()); + } + } + + __maxOccurrances = totalCount; + __currentWordIndex = currentOrdinal; + + //Reset the UI controls as per the maxOccurrance value + if (totalCount <= 0) + { + AppLog("Word not found"); + //Show error notification to user + if(__pFindWordNext) + __pFindWordNext->SetEnabled(false); + if(__pFindWordCountLabel && __pFindWordCountLabel->GetShowState() == true) + { + __pFindWordCountLabel->SetText(L"0/0"); + __pFindWordCountLabel->Invalidate(false); + } + else if(__pFindWordCountLabelRightToLeft && __pFindWordCountLabelRightToLeft->GetShowState() == true) + { + __pFindWordCountLabelRightToLeft->SetText(L"0/0"); + __pFindWordCountLabelRightToLeft->Invalidate(false); + } + if(__pFindWordNext) + __pFindWordNext->Invalidate(false); + __pFindWordPrev->Invalidate(false); + + return; + } + + if (totalCount == 1 || totalCount == currentOrdinal) + { + if(__pFindWordNext) + __pFindWordNext->SetEnabled(false); + } + else + { + if(__pFindWordNext) + __pFindWordNext->SetEnabled(true); + } + + String countStr = L""; + countStr.Append(__currentWordIndex); + countStr.Append(L"/"); + countStr.Append(__maxOccurrances); + if (__pFindWordCountLabel && __pFindWordCountLabel->GetShowState() == true) + { + __pFindWordCountLabel->SetText(countStr); + __pFindWordCountLabel->Invalidate(false); + __pFindWordCountLabel->Invalidate(false); + } + else if (__pFindWordCountLabelRightToLeft && __pFindWordCountLabelRightToLeft->GetShowState() == true) + { + __pFindWordCountLabelRightToLeft->SetText(countStr); + __pFindWordCountLabelRightToLeft->Invalidate(false); + __pFindWordCountLabelRightToLeft->Invalidate(false); + } + if (__pFindWordNext) + { + __pFindWordNext->Invalidate(false); + } + if (__pFindWordPrev) + { + __pFindWordPrev->Invalidate(false); + } + +} + +void +MainForm::FindNextWord(bool next) +{ + if (next == true) + { + //if (__pWebViewer->SearchText(__currentSearchStr, true) == true) + if (__pWebViewer->SearchNextAsync(true) == E_SUCCESS) + { + if (__currentWordIndex < __maxOccurrances) + { + __currentWordIndex++; + } + } + } + else + { + //if (__pWebViewer->SearchText(__currentSearchStr, false) == true) + if (__pWebViewer->SearchNextAsync(false) == E_SUCCESS) + { + if(__currentWordIndex > 1) + { + __currentWordIndex--; + } + } + } + + String countStr = L""; + countStr.Append(__currentWordIndex); + countStr.Append(L"/"); + countStr.Append(__maxOccurrances); + + if (__pFindWordCountLabel && __pFindWordCountLabel->GetShowState() == true) + { + __pFindWordCountLabel->SetText(countStr); + __pFindWordCountLabel->Invalidate(false); + } + else if(__pFindWordCountLabelRightToLeft && __pFindWordCountLabelRightToLeft->GetShowState() == true) + { + __pFindWordCountLabelRightToLeft->SetText(countStr); + __pFindWordCountLabelRightToLeft->Invalidate(false); + } + + if (__currentWordIndex >= __maxOccurrances) + { + __pFindWordNext->SetEnabled(false); + } + else + { + __pFindWordNext->SetEnabled(true); + } + if (__currentWordIndex <= 1) + { + __pFindWordPrev->SetEnabled(false); + } + else + { + __pFindWordPrev->SetEnabled(true); + } + __pFindWordPrev->Invalidate(false); + __pFindWordNext->Invalidate(false); + + __pFindWordControl->Invalidate(true); +} + +void +MainForm::OnWebKeypadWillOpen(Tizen::Web::Controls::Web& source) +{ + AppLog("xyz::MainForm::OnWebKeypadWillOpen"); + __isKeypadOpened = true; + __pFooterPanel->SetShowState(false); + // OnAddressBarKeypadOpened(*__pAddressbar); +} + +void +MainForm::OnWebKeypadOpened(Tizen::Web::Controls::Web& source) +{ + __isKeypadOpened = true; + AppLog("xyz::MainForm::OnWebKeypadOpened"); + + if(__pFindWordControl && __pFindWordControl->GetShowState() == true) + { + __currentSearchStr = L""; + __currentWordIndex = 0; + __maxOccurrances = 0; + __pFindWordEditField->SetText(L""); + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); + __pFindWordCountLabel->SetText(L"0/0"); + __pWebViewer->SearchTextAllAsync(L"",false); + __pFindWordControl->SetShowState(false); + __pFindWordEditField->HideKeypad(); + } + + + if (__pWebViewer != null && __pFooterPanel != null) + { + AppLog("MainForm::OnWebKeypadOpened GetClientAreaBounds().height %d ", GetClientAreaBounds().height); + if(__pAddressbar != null) + { + __pAddressbar->SetShowState(false); + } + if(__pFindWordControl != null) + { + __pFindWordControl->SetShowState(false); + } + __pFooterPanel->SetShowState(false); + __pWebViewer->SetBounds(Rectangle(0, 0,GetClientAreaBounds().width, GetClientAreaBounds().height)); + } +// if(__pImageMenu && __pImageMenu->GetShowState() == true) +// { +// __pImageMenu->SetAnchorPosition(Point(__pImageMenu->GetAnchorPosition().x/2,__pImageMenu->GetAnchorPosition().y/2)); +// AppLog("omgomgomg"); +// } + Invalidate(true); +} + +void +MainForm::OnWebKeypadClosed(Tizen::Web::Controls::Web& source) +{ + AppLog("abcde::MainForm::OnWebKeypadClosed"); + AppLog("xyz::MainForm::OnWebKeypadClosed"); + AppLog("akjshdasd 4"); + __pFooterPanel->SetShowState(true); +// OnAddressBarKeypadClosed(*__pAddressbar); + RelayoutControls(false); + __isKeypadOpened = false; + + + if(__pImageMenu && __pImageMenu->GetShowState() == true) + { + AppLog("abcde: imagemenu visible."); + Point p(0,0); + Point q(0,0); + __pWebViewer->GetBlockRange(p,q); + if (p == Point(0,0) && q == Point(0,0)) + return; + if(p.y < 150) + { + p.y = p.y + 100; + + } + + __pImageMenu->SetAnchorPosition(p); + __pImageMenu->Show(); + Invalidate(true); + } +} + +void +MainForm::OnWebKeypadBoundsChanged(Tizen::Web::Controls::Web& source) +{ + // RelativeLayout(false); + if(__pWebViewer != null) + { + __pWebViewer->SetBounds(Rectangle(0,__webControlPosition.y,GetClientAreaBounds().width,GetClientAreaBounds().height)); + } +} + +void +MainForm::OnTouchDoublePressed(const Control& source, const Point& currentPosition, const TouchEventInfo& touchInfo) +{ + Control* temp = const_cast< Control* >(&source); + Header* pHeader = dynamic_cast< Header* >(temp); + if (pHeader != null) + { + //Header double - clicked + AppLog("Header double clicked"); + } + if(__pFindWordControl) + { + AppLog("MainForm::OnTouchPressed %d",__pFindWordControl->GetShowState()); + ShowFindWordPanel(__pFindWordControl->GetShowState(), true); + } + + + AppLog("MainScene::OnTouchDoublePressed"); + +} + +void MainForm::OnTouchLongPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo) +{ + AppLog("LMN::abcde::MainForm::OnTouchLongPressed %d, %d" ,currentPosition.x,currentPosition.y); + if(TouchEventManager::GetInstance() && TouchEventManager::GetInstance()->GetTouchInfoListN() && TouchEventManager::GetInstance()->GetTouchInfoListN()->GetCount() >1) + { + AppLog("Returning because of more than one touch point."); + return; + } +// if(__pWebViewer) +// __pWebViewer->ReleaseBlock(); + if(__pWebViewer) + __pWebViewer->SetFocus(); + __longPressPoint = currentPosition; + + if (__pHitElementResult != null) + { + delete __pHitElementResult; + __pHitElementResult = null; + } + + if (__pWebViewer != null) + { + AppLog("MainForm::OnTouchLongPressed web not null"); + __pHitElementResult = __pWebViewer->GetElementByPointN(currentPosition); + } + + if (__pHitElementResult == null) + { + return; + } + + if (__pHitElementResult->HasImage() == true) + { + if(__pWebViewer != null) + { + __pWebViewer->ReleaseBlock();//N_SE-52389 + InitImageContextMenu(Point(currentPosition.x,currentPosition.y + __pWebViewer->GetY())); + } + __pImageMenu->SetShowState(true); + __pImageMenu->Show(); + __pImageMenu->Invalidate(true); + } + else if(__pHitElementResult->HasUrl() == true) + { + if(__pWebViewer != null) + __pWebViewer->ReleaseBlock();//N_SE-52389 + String tempURl = __pHitElementResult->GetUrl(); + AppLog("tempURl is %ls", tempURl.GetPointer()); + const Bitmap* pBitmap = __pHitElementResult->GetImage(); + if (pBitmap != null) + { + AppLog("not null"); + } + else + { + AppLog(null); + } + InitImageLinkContextMenu(Point(currentPosition.x,currentPosition.y + __pWebViewer->GetY())); + __pImageMenu->SetShowState(true); + __pImageMenu->Show(); + __pImageMenu->Invalidate(true); + } + else + { + String tagName = __pHitElementResult->GetTagName(); + String type = __pHitElementResult->GetAttributeValue("type"); + String value = __pHitElementResult->GetAttributeValue(L"value"); + String innerHtml = __pHitElementResult->GetAttributeValue(L"innerHTML"); + result r = E_FAILURE; + __currentSelectedStr.Clear(); + __currentSelectedStr = __pWebViewer->GetTextFromBlock(); + + AppLog("tag name is %ls", tagName.GetPointer()); + AppLog("type is %ls", type.GetPointer()); + + + + __isLongPressedDone = true; + if( type.Equals(L"submit",false) !=true && type.Equals(L"checkbox",false) !=true && type.Equals(L"range",false) !=true && type.Equals(L"file",false) !=true) + r =__pWebViewer->SetBlockSelectionPosition(currentPosition); + if (((tagName.Equals(L"INPUT",false) == true) || tagName.Equals(L"TEXTAREA",false) == true) && innerHtml.GetLength() == 0 && type.Equals(L"submit",false) !=true && type.Equals(L"checkbox",false) !=true && type.Equals(L"range",false) !=true && type.Equals(L"file",false) !=true/*&& __isWebKeypadOpened == true*/ && __currentSelectedStr.Equals(L"",false) == true && r == E_INVALID_ARG) + { + AppLog("MainForm::OnWebPageBlockSelected show paste option"); + + InitSelectTextContextMenu(Point(currentPosition.x , currentPosition.y + __pWebViewer->GetY()),true, true); + if(__pImageMenu) + { + __pImageMenu->SetShowState(true); + __pImageMenu->Show(); + __pImageMenu->Invalidate(true); + } + } + AppLog("setselectionselectedornot %s",GetErrorMessage(r)); + + } +// __inputEventToBeSupressed = true; +} + +void +MainForm::OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo) +{ + AppLog("xyz:: MainForm::OnTouchReleased called"); + + if (__pAddressbar && __pAddressbar->GetShowState() == true) + { + __pAddressbar->SetShowState(false); + } + if(__pFooterPanel && __isKeypadOpened == false) + { + __pFooterPanel->SetShowState(true); + } + + // Not reuired now. + /*HitElementResult* pHitElement = __pWebViewer->GetElementByPointN(currentPosition); + if(pHitElement != null && pHitElement->HasUrl() == true && __inputEventToBeSupressed == true) + { + __pWebViewer->ConsumeInputEvent(); + } + if(pHitElement != null) + { + delete pHitElement; + } + __inputEventToBeSupressed = false;*/ +} + +bool +MainForm::OnTouchPressed(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo) +{ + + return true; +} + +bool +MainForm::OnTouchReleased(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo) +{ + if(__pFindWordControl && __pFindWordControl->GetShowState() == true) + { + __currentSearchStr = L""; + __currentWordIndex = 0; + __maxOccurrances = 0; + + if (__pFindWordPanelLeftToRight && __pFindWordPanelLeftToRight->GetShowState() == true) + { + __pFindWordEditField->SetText(L""); + __pFindWordEditField->HideKeypad(); + __pFindWordControl->SetShowState(false); + __pFindWordCountLabel->SetText(L"0/0"); + } + else if(__pFindWordPanelRightToLeft && __pFindWordPanelRightToLeft->GetShowState() == true) + { + __pFindWordEditFieldRightToLeft->SetText(L""); + __pFindWordEditFieldRightToLeft->HideKeypad(); + __pFindWordControl->SetShowState(false); + __pFindWordCountLabelRightToLeft->SetText(L"0/0"); + } + + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); + + __pWebViewer->SearchTextAllAsync(L"",true); + __pFindWordControl->SetShowState(false); + } + AppLog("__pAddressbar->GetShowState() %d",__pAddressbar->GetShowState()); + if(__pAddressbar->GetShowState() == false) + { + __pAddressbar->SetAddressbarURLFocus(); + __pFooterPanel->SetShowState(false); + } + + return false; +} + +bool +MainForm::OnTouchMoved(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo) +{ + return true; +} + +bool +MainForm::OnTouchCanceled(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo) +{ + return true; +} + +bool +MainForm::OnPreviewTouchPressed(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo) +{ + return true; +} + +bool +MainForm::OnPreviewTouchReleased(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo) +{ + return true; +} + +bool +MainForm::OnPreviewTouchMoved(Tizen::Ui::Control& source, const Tizen::Ui::TouchEventInfo& touchEventInfo) +{ + return true; +} + +void +MainForm::OnOrientationChanged (const Tizen::Ui::Control &source, Tizen::Ui::OrientationStatus orientationStatus) +{ + AppLog("MainForm::OnOrientationChanged GetClientAreaBounds %d, %d",GetClientAreaBounds().width,GetClientAreaBounds().height); + int widthContextItem = 0; + //if(__pFindWordCountLabel) + // __pFindWordCountLabel->SetBounds(__pFindWordCountLabel->GetX(),__pFindWordCountLabel->GetY(),124,__pFindWordCountLabel->GetHeight()); + // As per the platform engineer comment removed this line + /*if(__pWebViewer != null) + { + // this is added because if any text is selected on long press followed by on rotation we are hiding the context menu therefore we should release the text block also + __pWebViewer->ReleaseBlock(); + }*/ + +// if(__pFindWordControl != null) +// ShowFindWordPanel(__pFindWordControl->GetShowState(), false); + + if(__pOptionMenu && __pOptionMenu->GetShowState() == true) + { + if( GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE) + { + AppLog(" Orientation landscape"); + __pOptionMenu->SetMaxVisibleItemsCount(5); + } + else + { + AppLog(" Orientation potrait"); + __pOptionMenu->SetMaxVisibleItemsCount(6); + } + } + if(__pNotification && __pNotification->GetShowState() == true) + { + __pNotification->SetShowState(false); + __pNotification->Invalidate(false); + } + if ( __pFooterLabel != null) + { + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_SEARCH_INPUT_FIELD_BG, __pFooterLabel->GetWidth(), __pFooterLabel->GetHeight()); + if(pBitmap != null) + { + __pFooterLabel->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + + + } + if (__pFindWordBgLabel != null) + { + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_FINDWORD_INPUT_FIELD_BG, __pFindWordBgLabel->GetWidth(), __pFindWordBgLabel->GetHeight()); + if (pBitmap != null) + { + __pFindWordBgLabel->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + } + + if (__pFindWordBgLabelRightToLeft != null) + { + Bitmap *pBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_FINDWORD_INPUT_FIELD_BG, __pFindWordBgLabelRightToLeft->GetWidth(), __pFindWordBgLabelRightToLeft->GetHeight()); + if (pBitmap != null) + { + __pFindWordBgLabelRightToLeft->SetBackgroundBitmap(*pBitmap); + delete pBitmap; + } + } + + +// if(__pOptionMenu != null) +// __pOptionMenu->SetShowState(false); + + if( GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE) + { + widthContextItem = WIDTH_CONTEXT_MENU_BUTTON_LANDSCAPE; + } + else + { + widthContextItem = WIDTH_CONTEXT_MENU_BUTTON_PORTRAIT; + } + + if (__pFooterPanel) + { + AppLog("__pFooterPanel->GetShowState() is true"); + InitFooter(); + __pFooterPanel->SetBounds(CoordinateSystem::AlignToDevice(FloatRectangle(0, GetClientAreaBoundsF().height - __pFooterPanel->GetHeightF(), __pFooterPanel->GetWidthF(), __pFooterPanel->GetHeightF()))); + __pFooterPanel->Invalidate(true); + } + InitAddressbar(); + + String homePage = SettingPresentationModel::GetInstance()->GetHomepage(); + if (homePage.CompareTo((L"IDS_BR_BODY_MOST_VISITED_SITES")) == 0) + { + InitMostVisitedSitesView(orientationStatus); + } + + RelayoutControls(false); + if (__pArticleReaderPanel != null) + { + if (__pArticleReaderPanel->GetShowState() == true) + { + __pArticleReaderPanel->SetBounds((GetClientAreaBounds().width - __pArticleReaderPanel->GetWidth())/2,(GetClientAreaBounds().height - __pArticleReaderPanel->GetHeight())/2, __pArticleReaderPanel->GetWidth(), __pArticleReaderPanel->GetHeight()); + + if (__pBlankPanel != null) + __pBlankPanel->SetBounds(0,0,GetClientAreaBounds().width,GetClientAreaBounds().height); + + if (__pWebReader != null) + { + __pWebReader->SetBounds(Rectangle(2,2, __pArticleReaderPanel->GetWidth(),__pArticleReaderPanel->GetHeight() - 96)); + } + Bitmap* pBitmap = CommonUtil::GetNinepatchedBitmapN(L"I01_popup_bg.9.png",__pArticleReaderPanel->GetWidth(),__pArticleReaderPanel->GetHeight()); + Bitmap* pSrcBitmap = CommonUtil::GetNinepatchedBitmapN(L"I01_popup_bottom_bg.9.png",__pArticleReaderPanel->GetWidth(),__pArticleReaderPanel->GetHeight()); + + if ( pBitmap != null && pSrcBitmap != null) + { + AppLog("CreateReaderPanel ninepatchbitmap found"); + pBitmap->Merge(Point(0,__pArticleReaderPanel->GetHeight() - 96),*pSrcBitmap,Rectangle(0,0,pSrcBitmap->GetWidth(),pSrcBitmap->GetHeight())); + } + + __pArticleReaderLabel->SetBounds(Rectangle(__pArticleReaderPanel->GetX(),__pArticleReaderPanel->GetY(),__pArticleReaderPanel->GetWidth(),__pArticleReaderPanel->GetHeight())); + __pArticleReaderLabel->SetBackgroundBitmap(*pBitmap); + if (pBitmap != null) + { + delete pBitmap; + pBitmap = null; + } + if (pSrcBitmap != null) + { + delete pSrcBitmap; + pSrcBitmap = null; + } + } + } + Invalidate(true); + + if (__pAddressbar != null) + { + int width = GetClientAreaBounds().width; + __pAddressbar->OrientationChanged(width); + } +} + +void +MainForm::OnSettingsChange(int settingvalue) +{ + AppLogDebug("MainForm::OnSettingsChange entered"); + + if(settingvalue == (int)REGISTRY_SETTING_HOMEPAGE) + { + __pAddressbar->ResetGuideText(); + } + if (__pWebViewer == null) + { + AppLogDebug("Webviewer is not initialized yet."); + return; + } + + if (settingvalue == (int) REGISTRY_SETTING_DEFAULT_VIEW) + { + WebSetting settings = __pWebViewer->GetSetting(); + if (SettingPresentationModel::GetInstance()->GetDefaultView().CompareTo((L"IDS_BR_BODY_FIT_TO_WIDTH")) == 0) + { + settings.SetAutoFittingEnabled(true); + } + else if (SettingPresentationModel::GetInstance()->GetDefaultView().CompareTo((L"IDS_BR_BODY_READABLE")) == 0) + { + settings.SetAutoFittingEnabled(false); + } + __pWebViewer->SetSetting(settings); + + } + else if (settingvalue == (int) REGISTRY_SETTING_RUN_JAVASCRIPT) + { + WebSetting settings = __pWebViewer->GetSetting(); + settings.SetJavascriptEnabled(SettingPresentationModel::GetInstance()->IsRunJavascriptEnabled()); + __pWebViewer->SetSetting(settings); + } + else if (settingvalue == (int) REGISTRY_SETTING_DISPLAY_IMAGES) + { + WebSetting settings = __pWebViewer->GetSetting(); + settings.SetAutoImageLoadEnabled(SettingPresentationModel::GetInstance()->IsDisplayImagesEnabled()); + __pWebViewer->SetSetting(settings); + __pWebViewer->Reload(); + } + else if (settingvalue == (int) REGISTRY_SETTING_BLOCK_POPUP) + { + WebSetting settings = __pWebViewer->GetSetting(); + settings.SetJavaScriptPopupEnabled(SettingPresentationModel::GetInstance()->IsBlockPopUp()); + __pWebViewer->SetSetting(settings); + } + else if (settingvalue == (int) REGISTRY_SETTING_ACCEPT_COOKIES) + { + if (__pWebViewer) + { + __pWebViewer->SetCookieEnabled(SettingPresentationModel::GetInstance()->IsCookiesEnabled()); + } + } + else if(settingvalue == (int) REGISTRY_SETTING_REMEMBER_FORM_DATA) + { + if (__pWebViewer) + { + WebSetting settings = __pWebViewer->GetSetting(); + settings.SetAutoFormDataShowEnabled(SettingPresentationModel::GetInstance()->IsRememberFormData()); + __pWebViewer->SetSetting(settings); + } + } + else if(settingvalue == (int) REGISTRY_SETTING_REMEMBER_PASSWORD) + { + if (__pWebViewer) + { + WebSetting settings = __pWebViewer->GetSetting(); + settings.SetAutoLoginFormFillEnabled(SettingPresentationModel::GetInstance()->IsRememberPassword()); + __pWebViewer->SetSetting(settings); + } + } + else if (settingvalue == (int) REGISTRY_SETTING_SHOW_SECURITY_WARNINGS) + { + WebSetting settings = __pWebViewer->GetSetting(); + if (SettingPresentationModel::GetInstance()->IsSecurityWarningsEnabled() == true) + { + settings.SetCertificateErrorHandlingMode(WEB_CERTIFICATE_ERROR_HANDLING_MODE_USER_CONFIRM); + } + else + { + settings.SetCertificateErrorHandlingMode(WEB_CERTIFICATE_ERROR_HANDLING_MODE_CONTINUE); + } + __pWebViewer->SetSetting(settings); + } + else if (settingvalue == (int) REGISTRY_SETTING_READER_FONT_SIZE) + { + if (__pWebReader) + { + AppLogDebug("IntMainForm fontsize Changed to %d",SettingPresentationModel::GetInstance()->GetReaderFontSize()); + WebSetting settings = __pWebReader->GetSetting(); + settings.SetFontSize(SettingPresentationModel::GetInstance()->GetReaderFontSize()); + __pWebReader->SetSetting(settings); + } + } +} + +void +MainForm::OnSettingsReset() +{ + if (__pWebViewer) + { + __pWebViewer->SetCookieEnabled(SettingPresentationModel::GetInstance()->IsCookiesEnabled()); + __pWebViewer->SetSetting(SettingPresentationModel::GetInstance()->GetWebSettings()); + } +} + +void +MainForm::OnClearCache() +{ + result r = E_SUCCESS; + + if (__pWebViewer != NULL) + { + r = __pWebViewer->ClearCache(); + if (r == E_SUCCESS) + { + AppLogDebug("Cache cleared success"); + } + else + { + AppLogDebug("Cache cleared fail"); + } + } +} + +void +MainForm::OnClearCookie() +{ + result r = E_SUCCESS; + + if (__pWebViewer != NULL) + { + __pWebViewer->ClearCookie(); + } + if (r == E_SUCCESS) + { + AppLogDebug("Cookie cleared success"); + } + else + { + AppLogDebug("Cache cleared fail"); + } +} + +void +MainForm::OnClearFormData() +{ + result r = E_SUCCESS; + + if (__pWebViewer != NULL) + { + __pWebViewer->ClearFormData(); + } + if (r == E_SUCCESS) + { + AppLogDebug("Cookie cleared success"); + } + else + { + AppLogDebug("Cache cleared fail"); + } +} + +void +MainForm::OnClearPasswords() +{ + result r = E_SUCCESS; + + if (__pWebViewer != NULL) + { + __pWebViewer->ClearLoginFormData(); + } + if (r == E_SUCCESS) + { + AppLogDebug("Cookie cleared success"); + } + else + { + AppLogDebug("Cache cleared fail"); + } +} + + +double +MainForm::findDistance(int x1,int y1,int x2, int y2) +{ + int deltaX = Math::Abs(x2 - x1); + int deltaY = Math::Abs(y2 - y1); + double num = deltaX*deltaX + deltaY*deltaY; + + if (num >= 0) + { + double x = num; + int i; + for (i = 0; i < 20; i++) + { + x = (((x*x)+ num)/(2*x)); + } + return num; + } + else + { + return 0.0; + } +} + +void +MainForm::OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo) +{ + AppLog("xyz:: MainForm::OnTouchPressed called"); + if(__pFindWordControl) + { + AppLog("MainForm::OnTouchPressed %d",__pFindWordControl->GetShowState()); +// ShowFindWordPanel(__pFindWordControl->GetShowState(), true); + } + __isLongPressedDone = false; + + + + Touch touch; + IList* pList = null; + pList = touch.GetTouchInfoListN(source); + + if (pList != null) + { + int count = pList->GetCount(); + if (count == 1) + { + TouchInfo* pTouchInfo = static_cast(pList->GetAt(0)); + __touchPoint1 = pTouchInfo->position; + + /*if (__pAddressbar != null) + { + if (__pAddressbar->GetAddressbarMode() != ADDRESSBAR_MODE_LOADING_COMPLETE && __pAddressbar->GetAddressbarMode() != ADDRESSBAR_MODE_LOADING) + { + if (__pAddressbar->GetAddressbarMode() == ADDRESSBAR_MODE_EDIT) + { + __pAddressbar->SaveAddressbarEditText(); + } + __pAddressbar->SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING_COMPLETE); + } + + __pAddressbar->Invalidate(true); + }*/ + if (GetAddressbarMode() != ADDRESSBAR_MODE_LOADING_COMPLETE && GetAddressbarMode() != ADDRESSBAR_MODE_LOADING) + { + if (GetAddressbarMode() == ADDRESSBAR_MODE_EDIT) + { + //__pAddressbar->SaveAddressbarEditText(); + } + SetAddressbarMode((AddressBarMode)ADDRESSBAR_MODE_LOADING_COMPLETE); + } + } + else if (count == 2) + { + AppLogDebug("MainForm::OnTouchPressed count is two"); + TouchInfo* pTouchInfo = static_cast(pList->GetAt(0)); + __touchPoint1 = pTouchInfo->position; + + pTouchInfo = static_cast(pList->GetAt(1)); + __touchPoint2 = pTouchInfo->position; + } + } + if( pList != NULL) + { + pList->RemoveAll(true); + delete pList; + } + if(__pAddressbar) + { + __pAddressbar->SetShowState(false); + } + if(__pFooterPanel && __isKeypadOpened == false) + { + __pFooterPanel->SetShowState(true); + } + RelayoutControls(false); + return; +} + +void +MainForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo) +{ + AppLog("LMN::MainForm::OnTouchMoved entered"); +// __currentWordIndex = 0; + __isLongPressedDone = false; + +} + +void +MainForm::MoveUiControls() +{ +} + +void +MainForm::OnTextValueChanged (const Tizen::Ui::Control &source) +{ + if(&source == dynamic_cast(__pFooterUrlField) && __pFooterUrlField != null) + { + if(__pFooterUrlField->GetTextLength() == 0) + { + __pFooterUrlField->SetKeypadActionEnabled(false); + } + else + { + __pFooterUrlField->SetKeypadActionEnabled(true); + } + } + if (__pFindWordEditField != null && __pFindWordEditField->GetShowState() == true) + { + __currentSearchStr = __pFindWordEditField->GetText(); + if (__currentSearchStr.GetLength() > 0) + { + __pFindWordCountLabel->SetShowState(true); + } + else + { +// __pFindWordCountLabel->SetShowState(false); + __pFindWordCountLabel->SetBounds(__pFindWordCountLabel->GetX(),__pFindWordCountLabel->GetY(),84,__pFindWordCountLabel->GetHeight()); + __pFindWordEditField->SetBounds(__pFindWordEditField->GetX(),__pFindWordEditField->GetY(),214+80,__pFindWordEditField->GetHeight()); + + } + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); + __pFindWordNext->Invalidate(true); + __pFindWordPrev->Invalidate(true); + __pFindWordCountLabel->SetText(L"0/0"); + __pFindWordCountLabel->Invalidate(true); + } + else if (__pFindWordEditFieldRightToLeft != null && __pFindWordEditFieldRightToLeft->GetShowState() == true) + { + __currentSearchStr = __pFindWordEditFieldRightToLeft->GetText(); + if (__currentSearchStr.GetLength() > 0) + { + __pFindWordCountLabelRightToLeft->SetShowState(true); + } + else + { + __pFindWordCountLabelRightToLeft->SetShowState(false); + } + + __pFindWordNext->SetEnabled(false); + __pFindWordPrev->SetEnabled(false); + __pFindWordNext->Invalidate(true); + __pFindWordPrev->Invalidate(true); + __pFindWordCountLabelRightToLeft->SetText(L"0/0"); + __pFindWordCountLabelRightToLeft->Invalidate(true); + } + AppLog("__currentSearchStr %ls",__currentSearchStr.GetPointer()); + if (__currentSearchStr.GetLength() > 0) + { + StartWordSearch(); + } + else + { + __currentSearchStr = L"aaaaaaaabbbbbbbccccccc"; + StartWordSearch(); + __currentSearchStr = L""; + AppLogDebug("Enter something"); + } +} + +result +MainForm::InitMostVisitedSitesPanel(Tizen::Ui::OrientationStatus orientationStatus) +{ + return E_SUCCESS; + +} + +result +MainForm::InitMostVisitedSitesView(Tizen::Ui::OrientationStatus orientationStatus) +{ + if(__pWebViewer != null) + return E_SUCCESS; + + AppLog("MainForm::InitMostVisitedSitesView"); + result r = E_SUCCESS; + + + if (__pMostVisitedListView != null) + { + __pMostVisitedListView->SetShowState(true); + return E_SUCCESS; + } + + if (__pMostVisitedListView != null) + { + RemoveControl(__pMostVisitedListView); + } + if(__pMostVisitedSites != null) + { + __pMostVisitedSites->RemoveAll(true); + } + + HistoryPresentationModel::GetInstance()->GetMostVisitedSites(*__pMostVisitedSites); + + __webControlHeight = GetClientAreaBounds().height - __pFooterPanel->GetHeight(); + __webControlHeightF = GetClientAreaBoundsF().height - __pFooterPanel->GetHeightF(); + __pMostVisitedListView = new(std::nothrow) ListView(); + + int height = GetClientAreaBounds().height; + + if(__pFooterPanel->GetShowState() == true) + { + height = height - __pFooterPanel->GetHeight(); + } + if(__pAddressbar->GetShowState() == true) + { + height -= __pAddressbar->GetHeight(); + } + + r = __pMostVisitedListView->Construct(Tizen::Graphics::Rectangle(0,0 , GetClientAreaBounds().width, height),true,false); + + if (r != E_SUCCESS) + { + delete __pMostVisitedListView; + AppLogDebug("Addressbar init failed with %s", GetErrorMessage(r)); + return r; + } + __pMostVisitedListView->SetItemProvider(*this); + __pMostVisitedListView->AddListViewItemEventListener(*this); + __pMostVisitedListView->SetTextOfEmptyList(CommonUtil::GetString(L"IDS_BR_BODY_NO_VISITED_SITES")); + AddControl(__pMostVisitedListView); + __pMostVisitedListView->UpdateList(); + + return E_SUCCESS; + +} + +String +MainForm::GetImagePath(void) +{ + + String str; + String formattedTime; + DateTime currentTime; + LocaleManager localManager; + SystemTime::GetCurrentTime(TIME_MODE_WALL, currentTime); + + localManager.Construct(); + Locale locale = localManager.GetSystemLocale(); + //Locale locale(LANGUAGE_ENG, COUNTRY_US); + + // Get date formatter + DateTimeFormatter* pTimeFormatter = DateTimeFormatter::CreateDateTimeFormatterN(locale, DATE_TIME_STYLE_DEFAULT); + + if (pTimeFormatter) + { + pTimeFormatter->Format(currentTime, formattedTime); + } + + AppLog("current time stamp is %ls", formattedTime.GetPointer()); + String delim(L" :"); + StringTokenizer strTok(formattedTime, delim); + String token; + String imageName; + String str1("GMT+00"); + while (strTok.HasMoreTokens()) + { + strTok.GetNextToken(token); // Osp, StringTokenizer, Sample, code + if(token.Equals(str1)) + break; + AppLog("token is %ls", token.GetPointer()); + imageName.Append(token); + } + return imageName; + +} + +void MainForm::UpdateImageContent(ByteBuffer* aBuffer, String imageName) +{ + result r = E_FAILURE; + AppLog("Content manager 1"); + ContentId contentId; + ContentManager contentManager; + r = contentManager.Construct(); + if(IsFailed(r)) + { + AppLog("Content manager update content result %s" ,GetErrorMessage(r)); + return; + } + Tizen::Base::String contentPath = Tizen::System::Environment::GetMediaPath() + L"Downloads/"; + Tizen::Io::Directory::Create(contentPath,true); + if(GetLastResult() == E_FILE_ALREADY_EXIST) + { + AppLog("Already exists"); + } + else if(GetLastResult() == E_SUCCESS) + { + AppLog("created success"); + } + contentPath.Append(imageName); + contentPath.Append(".jpg"); + contentId = contentManager.CreateContent(*aBuffer, contentPath); + ShowIndicatorNotification(L"Download Complete",contentPath); + AppLog("Content manager update content result %s" ,GetErrorMessage(GetLastResult())); +} + +void +MainForm::ShowIndicatorNotification(const String& messageText, const String& contentPath) +{ + AppLogDebug("ENTER"); + + NotificationRequest request; + request.SetAlertText(messageText); + request.SetTitleText(L""); + request.SetAppMessage(contentPath); + + Tizen::App::App* pApp = Tizen::App::App::GetInstance(); + String homePath = pApp->GetAppRootPath(); + String iconPath = homePath + L"res/screen-density-xhigh/Notification_download_complete.png"; + AppLog("The iconPath is : %ls", homePath.GetPointer()); + request.SetIconFilePath(iconPath); + + Tizen::Shell::NotificationManager notiMgr; + notiMgr.Construct(); + notiMgr.Notify(request); + AppLogDebug("EXIT: %s", GetErrorMessage(GetLastResult())); + return; +} + +void +MainForm::SetForwardButtonEnabled(bool isEnabled) +{ + __pGoForwardBtn->SetEnabled(isEnabled); + __pGoForwardBtn->Invalidate(true); +} + +void +MainForm::SetBackButtonEnabled(bool isEnabled) +{ + __pGoBackBtn->SetEnabled(isEnabled); + __pGoBackBtn->Invalidate(true); +} + +void +MainForm::UpdateProgress(int percentage) +{ + __progressPercentage = percentage; + if (percentage == 0 || percentage == 100) + { + __isLoadingData = false; + if (percentage == 100) + { + __isLoadingCompleted = true; + __progressPercentage = 0; + } + else + { + __isLoadingCompleted = false; + } + } + else + { + __isLoadingData = true; + } + UpdateProgressBitmap(); +} + +int +MainForm::GetProgress(void) +{ + return __progressPercentage; +} + +void +MainForm::UpdateProgressBitmap(void) +{ + result r = E_SUCCESS; + if (__pProgressbarLabel == null) + return; + int w = __pProgressbarLabel->GetWidth(); + int h = __pProgressbarLabel->GetHeight(); + Canvas canvas; + int progressWidth = 0; + Bitmap* pRetBitmap = null; + + if (__progressPercentage == 0 || __progressPercentage == 100) + { + __pProgressbarLabel->SetShowState(false); + __pProgressbarLabel->Invalidate(false); + return; + } + else + { + __pProgressbarLabel->SetShowState(true); + __pProgressbarLabel->Invalidate(false); + } + + r = canvas.Construct(Rectangle(0, 0, w, h)); + + if (r != E_SUCCESS) + { + AppLogException("Canvas construction failed with %s", GetErrorMessage(r)); + return; + } + + canvas.Clear(); + Bitmap *pBgBmp = AppResource::GetInstance()->GetBitmapN(IDB_TITLE_PROGRESS_BAR_BG); + + if (pBgBmp != null) + { + pBgBmp->Scale(Dimension(w, h)); + canvas.DrawBitmap(Point(0,0), *pBgBmp); + delete pBgBmp; + } + + progressWidth = (double) (w) * __progressPercentage / 100; + AppLogDebug("progressWidth: %d", progressWidth); + Bitmap *pProgressBmp = AppResource::GetInstance()->GetBitmapN(IDB_TITLE_PROGRESS_BAR); + + if (pProgressBmp != null) + { + pProgressBmp->Scale(Dimension(progressWidth, h)); + canvas.DrawBitmap(Point(0,0), *pProgressBmp); + delete pProgressBmp; + } + + pRetBitmap = new (std::nothrow) Bitmap(); + + if (pRetBitmap == null) + { + AppLogException("Bitmap creation failed with %s", GetErrorMessage(r)); + return; + } + + pRetBitmap->Construct(canvas, canvas.GetBounds()); + + if (__pProgressbarLabel != null && pRetBitmap != null) + { + __pProgressbarLabel->SetBackgroundBitmap(*pRetBitmap); + __pProgressbarLabel->Invalidate(false); + } + + if (pRetBitmap != null) + { + delete pRetBitmap; + pRetBitmap = null; + } + return; +} + +void +MainForm::ReaderClicked() +{ + result r = E_SUCCESS; + ArrayList* pArgList = new(std::nothrow) ArrayList(); + if (pArgList != null) + { + r = pArgList->Construct(); + if (IsFailed(r)) + { + delete pArgList; + return; + } + + r = pArgList->Add(*new(std::nothrow) String(*__pReaderData)); + if (IsFailed(r)) + { + delete pArgList; + return; + } + + r = pArgList->Add(*new(std::nothrow) String(__pWebViewer->GetUrl())); + if (IsFailed(r)) + { + delete pArgList; + return; + } + + r = pArgList->Add(*new(std::nothrow) String(__pWindowInfo->pageTitle)); + if (IsFailed(r)) + { + delete pArgList; + return; + } + } + + SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_ARTICLE_READER, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList); + return; + + +} + +void MainForm::SetAddressbarMode(AddressBarMode addMode) +{ + AppLogDebug("AddressBar::setAddressbarMode to %d",addMode); + + __currentAddMode = addMode; + + switch(addMode) + { + case ADDRESSBAR_MODE_INVALID: + { + // do nothing + } + break; + case ADDRESSBAR_MODE_READER: + { + __pStopBtn->SetShowState(false); + __pRefreshBtn->SetShowState(false); + __pClearBtn->SetShowState(false); + __pReaderBtn->SetShowState(false); + } + break; + case ADDRESSBAR_MODE_LOADING: + { + __pRefreshBtn->SetShowState(false); + __pStopBtn->SetShowState(true); + __pClearBtn->SetShowState(false); + __pReaderBtn->SetShowState(false); + } + break; + case ADDRESSBAR_MODE_LOADING_COMPLETE: + { +// SetUrl(__pAddressbar->GetUrl()); + + __pRefreshBtn->SetShowState(true); + __pStopBtn->SetShowState(false); + __pClearBtn->SetShowState(false); + __pReaderBtn->SetShowState(false); + } + break; + case ADDRESSBAR_MODE_EDIT: + { + __pRefreshBtn->SetShowState(false); + __pStopBtn->SetShowState(false); + __pReaderBtn->SetShowState(false); + __pClearBtn->SetShowState(true); + } + break; + } + + Invalidate(true); + + OnAddressBarModeChanged(); +} + +AddressBarMode MainForm::GetAddressbarMode(void) +{ + return __currentAddMode; +} + +void MainForm::SetUrl(const String& url) +{ + __displayUrl = url; + if(__displayUrl.GetLength() > 2048) + __displayUrl.SubString(0,2048,__displayUrl); + + if (__pFooterUrlField != NULL) + { + String removedHttpUrl = RemoveHttpTextFromDisplayURL(); + if (removedHttpUrl.IsEmpty() == false) + { + __pFooterUrlField->SetText(removedHttpUrl); + if(__pAddressbar != NULL && __pAddressbar->HasCurrentFocus() == false) + __pAddressbar->SetUrl(__displayUrl); + } + else + { + __pFooterUrlField->SetText(__displayUrl); + if(__pAddressbar != NULL && __pAddressbar->HasCurrentFocus() == false) + __pAddressbar->SetUrl(__displayUrl); + } + if(__pFooterUrlField) + { + AppLog("Position:: %d, %ls",__pFooterUrlField->GetTextLength(),__pFooterUrlField->GetText().GetPointer()); + __pFooterUrlField->SetCursorPosition(__pFooterUrlField->GetTextLength()); + } + __pFooterUrlField->Invalidate(false); + if(__pAddressbar != NULL && __pAddressbar->HasFocus()) + __pAddressbar->Invalidate(true); +// __pFooterUrlField->SetCursorPosition(0); + } +} + +String +MainForm::RemoveHttpTextFromDisplayURL(void) +{ + AppLog("MainForm::RemoveHttpTextFromDisplayURL __displayUrl %ls",__displayUrl.GetPointer()); + int index = -1; +// bool isHttpText = __displayUrl.Contains(L"http://"); + String updatedDisplayUrl; + updatedDisplayUrl.Clear(); + if(__displayUrl.IndexOf(L"http://",0,index) == E_SUCCESS && index == 0) + { + __displayUrl.SubString(7,updatedDisplayUrl); + } + else if(__displayUrl.IndexOf(L"https://",0,index) == E_SUCCESS && index == 0) + { + __displayUrl.SubString(8,updatedDisplayUrl); + } + return updatedDisplayUrl; +} + +void MainForm::OnSharePopupControlStarted(void) +{ + __pWebViewer->AddTouchEventListener(*this); +} + +void +MainForm::OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs) +{ + if (requestId == UPDATE_MAINFORM_FOOTER_ON_WINDOWCLOSED) + { + AppLog("OnWebWindowCloseRequested mainform test 1 OnUserEventReceivedN"); + InitFooter(); + } + else if (requestId == BACK_GROUND_APP_EVENT) + { + if(__pWebViewer != null) + { + __pWebViewer->Pause(); + } + if(__pImageMenu) + { + __pImageMenu->SetShowState(false); + } + if(__pAddressbar != null) + { + __pAddressbar->SendUserEvent(BACK_GROUND_APP_EVENT,NULL); + } + } + else if(requestId == FORE_GROUND_APP_EVENT) + { + if(__pWebViewer != null) + { + __pWebViewer->Resume(); + } + if(__pAddressbar != null) + { + __pAddressbar->SendUserEvent(FORE_GROUND_APP_EVENT,NULL); + } + } +} + +void +MainForm::AddressBarCancelledClicked(const Addressbar& addBar) +{ + AppLog("XYZ::MainForm::AddressBarCancelledClicked"); + result r = E_SUCCESS; + + if (__pAddressbar) + __pAddressbar->SetShowState(false); + + AppLog("akjshdasd 5"); + __pFooterPanel->SetShowState(true); + + if(__pWebViewer) + __pWebViewer->SetFocus(); + else if(__pMostVisitedListView) + __pMostVisitedListView->SetFocus(); + else if(__pMultiWindowButton) + __pMultiWindowButton->SetFocus(); + else if(__pMoreButton) + __pMoreButton->SetFocus(); + + __pAddressbar->SetShowState(false); + + RelayoutControls(false); +} + +void +MainForm::OnFormMenuRequested (Tizen::Ui::Controls::Form &source) +{ + AppLog("MainForm::OnFormMenuRequested called"); + InitOptionMenu(); + if (__pWindowInfo != NULL && __pWindowInfo->pageUrl != NULL && __pWebViewer && __pWebViewer->GetShowState() == true) + { + int bookmarkCount=0; + bool exist = false; + String url=L""; + url=__pWindowInfo->pageUrl; + AppLog("MainForm::OnFormMenuRequested url %ls",url.GetPointer()); + result r = E_SUCCESS; + Bitmap* pBitmap = null; + String lastChar = L""; +// if(url.SubString(url.GetLength()-1,lastChar)); +// if(lastChar == L"/") +// { +// bool exist1 = false; +// bool exist2 = false; +// r=BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(url,exist1); +// url.SubString(0,url.GetLength() - 1,url); +// r=BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(url,exist2); +// exist = exist1 | exist2; +// } +// else +// { + r=BookmarkPresentationModel::GetInstance()->DoesBookmarkExist(url,exist); + if (IsFailed(r)) + { + AppLogDebug("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED failed"); + return; + } +// } + if ( exist == true) + { + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_ICON_BOOKMARK_ON_TEMP); + } + else + { + pBitmap = AppResource::GetInstance()->GetBitmapN(IDB_ICON_BOOKMARK_OFF_TEMP); + } + AppLogDebug("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED 3"); + + if (__pOptionMenu->GetItemCount() == 9) + { + r = __pOptionMenu->SetItemAt(1,CommonUtil::GetString(L"IDS_BR_OPT_ADDTOBOOKMARKS"), IDA_ADDTOBOOKMARK_CLICKED,*pBitmap); + } + else + { + r = __pOptionMenu->InsertItemAt(1,CommonUtil::GetString(L"IDS_BR_OPT_ADDTOBOOKMARKS"), IDA_ADDTOBOOKMARK_CLICKED,*pBitmap); + } + + if (IsFailed(r)) + { + AppLogException("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED Add to Bookmark failed with %s", GetErrorMessage(r)); + delete pBitmap; + return ; + } + AppLogDebug("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED 4"); + if (__pOptionMenu->GetItemCount() != 9) + { + __pOptionMenu->InsertItemAt(1,CommonUtil::GetString(L"IDS_BR_OPT_ADDTOBOOKMARKS"), IDA_ADDTOBOOKMARK_CLICKED); + __pOptionMenu->InsertItemAt(2,CommonUtil::GetString(L"IDS_BR_BODY_PRINT"), IDA_PRINT_CLICKED); +// __pOptionMenu->InsertItemAt(2,L"Add to Home"/*CommonUtil::GetString(L"IDS_BR_OPT_SHARE")*/, IDA_ADD_TO_HOME_CLICKED); + __pOptionMenu->InsertItemAt(3,CommonUtil::GetString(L"IDS_BR_OPT_SHARE"), IDA_SHARE_CLICKED); + __pOptionMenu->InsertItemAt(4,CommonUtil::GetString(L"IDS_BR_OPT_FIND_ON_PAGE_ABB"), IDA_FINDONPAGE_CLICKED); + __pOptionMenu->SetMaxVisibleItemsCount(6); + } + if( GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE) + { + AppLog(" Orientation landscape"); + __pOptionMenu->SetMaxVisibleItemsCount(5); + } + else + { + AppLog(" Orientation potrait"); + __pOptionMenu->SetMaxVisibleItemsCount(6); + } + + AppLogDebug("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED 5"); + delete pBitmap; + } + AppLogDebug("ONACTION_PERFORMED:IDA_MOREBTN_CLICKED end"); + if(__pAddressbar) + __pAddressbar->SetShowState(false); + SetFocus(); + __pFooterPanel->SetShowState(true); + result r = __pOptionMenu->SetShowState(true); + AppLog("ajsghd %s",GetErrorMessage(r)); + RelayoutControls(false); + __pOptionMenu->Invalidate(true); + __pOptionMenu->Show(); + +} diff --git a/src/IntMainFrame.cpp b/src/IntMainFrame.cpp new file mode 100644 index 0000000..9638413 --- /dev/null +++ b/src/IntMainFrame.cpp @@ -0,0 +1,78 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet InternetFrame class +/*@file: IntInternetFrame.cpp + *@brief: Internet Frame + */ + + +#include +#include +#include "IntMainFrame.h" +#include "IntSceneRegister.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::System; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; + +MainFrame::MainFrame(void) +{ +// SetBackgroundColor(Tizen::Graphics::Color(255,255,255)); +} + +MainFrame::~MainFrame(void) +{ +} + +result +MainFrame::OnInitializing(void) +{ + result r = E_SUCCESS; + + // SceneManagement initializing + SceneRegister::RegisterAllScenes(); + AddFrameEventListener(*this); + + + return r; +} + +result +MainFrame::OnTerminating(void) +{ + result r = E_SUCCESS; + + return r; +} + +void +MainFrame::OnFrameActivated (const Tizen::Ui::Controls::Frame &source) +{ + AppRegistry* pAppRegistry = App::GetInstance()->GetAppRegistry(); + String sliderKey("SliderValue"); + + int sliderValue = 10; + + result r = pAppRegistry->Get(sliderKey, sliderValue); + r = PowerManager::SetScreenBrightness(sliderValue); +// r = PowerManager::RestoreScreenBrightness(); + + AppLog("Settingscreenbrightness to %d result %s",sliderValue , GetErrorMessage(r)); +} diff --git a/src/IntMultipleWindowForm.cpp b/src/IntMultipleWindowForm.cpp new file mode 100644 index 0000000..6e2f458 --- /dev/null +++ b/src/IntMultipleWindowForm.cpp @@ -0,0 +1,673 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet MultipleWindowForm class +/*@file: MultipleWindowForm.cpp + *@brief: The MultipleWindowForm provides multiple instance of mainscenes and displays them in a Listview + * + */ + +#include +#include + +#include "IntCommonLib.h" +#include "IntConfirmationPopup.h" +#include "IntMainForm.h" +#include "IntMultipleWindowForm.h" +#include "IntMultipleWindowPresentationModel.h" +#include "IntSceneRegister.h" +#include "IntSettingPresentationModel.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + +static const int W_ICON_IMAGE_WIDTH = 72; + +MultipleWindowForm::MultipleWindowForm(void) +: __pList(null) +, __pListIconImage(null) +, __pListDeleteImage(null) +,__pConfirmationPopup(null) +{ + __startPosition.x = -1; + __startPosition.y = -1; + __fontSize = 44; +} + +MultipleWindowForm::~MultipleWindowForm(void) +{ + if (__pListIconImage) + { + delete __pListIconImage; + __pListIconImage = null; + } + if (__pListDeleteImage) + { + delete __pListDeleteImage; + __pListDeleteImage = null; + } +} + +bool +MultipleWindowForm::Initialize(void) +{ + result r = E_SUCCESS; + + r = Construct(L"IDL_MULTIPLE_WINDOW"); + if (r == E_SUCCESS) + { + return true; + } + else + { + return false; + } +} + +result +MultipleWindowForm::OnInitializing(void) +{ + result r = E_SUCCESS; + FooterItem closeButton; + FooterItem newButton; + + __fontSize = CommonUtil::GetFontSize(); + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager == null) + { + return E_FAILURE; + } + + Footer* pFooter = GetFooter(); + + if (pFooter == NULL) + { + return E_FAILURE; + } + +// SetFormStyle(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_HEADER | FORM_STYLE_FOOTER); + + r = pSceneManager->AddSceneEventListener(IDSCN_MULTIPLE_WINDOW, *this); + + // Setup back event listener + SetFormBackEventListener(this); + pFooter->AddActionEventListener(*this); + + AppResource* pAppResource = Application::GetInstance()->GetAppResource(); + + if (pAppResource) + { + __pListIconImage = pAppResource->GetBitmapN(L"ListIcon.png"); + __pListDeleteImage = pAppResource->GetBitmapN(L"deleteIcon.png"); + } + + __pList = static_cast< ListView* >(GetControl(L"IDC_LISTVIEW")); + + if (__pList != null) + { + __pList->SetItemProvider(*this); + __pList->AddListViewItemEventListener(*this); + + } + + AddOrientationEventListener(*this); +// r = pFooter->SetStyle(FOOTER_STYLE_BUTTON_TEXT); + r = closeButton.Construct(IDA_BUTTON_CLOSEALL); + r = closeButton.SetText(CommonUtil::GetString(L"IDS_BR_OPT_CLOSE_ALL")); + r = pFooter->AddItem(closeButton); + r = newButton.Construct(IDA_BUTTON_NEW); + r = newButton.SetText(CommonUtil::GetString(L"IDS_BR_OPT_NEW_WINDOW")); + r = pFooter->AddItem(newButton); + + return r; +} + +void +MultipleWindowForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs) +{ + if (MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList()->GetCount() >= 9) + { + GetFooter()->SetItemEnabled(1,false); + } + else + { + GetFooter()->SetItemEnabled(1,true); + } + if (__pList) + { + __pList->UpdateList(); + } + GetFooter()->Invalidate(true); + return; +} + +void +MultipleWindowForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + if (__pListIconImage) + { + delete __pListIconImage; + __pListIconImage = NULL; + } + return; +} + +result +MultipleWindowForm::OnTerminating(void) +{ + result r = E_SUCCESS; + + if (__pListIconImage) + { + delete __pListIconImage; + __pListIconImage = NULL; + } + if (__pListDeleteImage) + { + delete __pListDeleteImage; + __pListDeleteImage = NULL; + } + + return r; +} + +void +MultipleWindowForm::OnActionPerformed(const Control& source, int actionId) +{ + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager == null) + { + return; + } + + String closeWarning = CommonUtil::GetString(L"IDS_BR_POP_CLOSE_ALL_OPENED_WINDOWS_AND_GO_TO_THE_HOMEPAGE"); + + switch (actionId) + { + case IDA_BUTTON_NEW: + { + WindowInfo* pNewWindowInfo = MultipleWindowPresentationModel::GetInstance()->CreateNewMainViewSceneN(); + + if (pNewWindowInfo == null) + { + return; + } + result r = E_SUCCESS; + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == NULL) + { + return; + } + ArrayList* pArgList = new(std::nothrow) ArrayList(); + if (pArgList == NULL) + { + return; + } + pArgList->Construct(); + + pArgList->Add(*pNewWindowInfo); + r = pSceneManager->GoForward(ForwardSceneTransition(pNewWindowInfo->sceneID, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList); + if (pArgList != null) + { + delete pArgList; + pArgList = null; + } + if(IsFailed(r)) + { + AppLogDebug("MultipleWindowForm::OnActionPerformed GoForward failed %s",GetErrorMessage(r)); + return; + } + } + break; + + case IDA_BUTTON_BACK: + { + String* pSelectedScene = NULL; + Object* value = NULL; + MultipleWindowPresentationModel::GetInstance()->GetValue(SELECTED_SCENE_ID, &value); + pSelectedScene = (String*) value; + + if (pSelectedScene) + { + result r = pSceneManager->GoBackward(BackwardSceneTransition(*pSelectedScene, SCENE_TRANSITION_ANIMATION_TYPE_NONE)); + delete pSelectedScene; + pSelectedScene = null; + if(IsFailed(r)) + { + AppLogDebug("MultipleWindowForm::OnActionPerformed GoForward failed %s",GetErrorMessage(r)); + return; + } + } + } + break; + + case IDA_BUTTON_CLOSEALL: + { + if(__pConfirmationPopup) + { + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + if (!__pConfirmationPopup) + { + __pConfirmationPopup = new(std::nothrow) ConfirmationPopup(); + __pConfirmationPopup->Initialize(); + + __pConfirmationPopup->RemoveActionListener(*this); + __pConfirmationPopup->AddActionListener(*this); + __pConfirmationPopup->setMessage(closeWarning); + __pConfirmationPopup->Show(); + } + } + break; + case IDA_CONFIRMATION_NO: + { + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + + delete __pConfirmationPopup; + __pConfirmationPopup = null; + + } + break; + case IDA_CONFIRMATION_YES: + { + ArrayList* pAllWindowList = MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList(); + if (pAllWindowList == NULL) + { + return; + } + int totalCount = pAllWindowList->GetCount(); + + for (int count = 0; count < totalCount; count++) + { + WindowInfo* pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(count)); + SceneRegister::DestroyAndUnRegisterScene(pWindowInfo->sceneID); + } + pAllWindowList->RemoveAll(true); + String homePage = SettingPresentationModel::GetInstance()->GetHomepage(); + if (homePage == (L"IDS_BR_BODY_MOST_VISITED_SITES") || homePage == (L"IDS_BR_BODY_BLANK_PAGE")) + { + homePage = L""; + } + else if (homePage == CommonUtil::GetString(L"IDS_BR_BODY_USER_HOMEPAGE")) + { + AppLog("InternetApp::OnAppInitialized homaepage = userhomepage"); + homePage = SettingPresentationModel::GetInstance()->GetFavoriteUrl(); + AppLog("InternetApp::OnAppInitialized fav URL = %ls ",homePage.GetPointer()); + } + + WindowInfo* pNewWindowInfo = MultipleWindowPresentationModel::GetInstance()->CreateNewMainViewSceneN(homePage); + + if (pNewWindowInfo == null) + { + return; + } + pNewWindowInfo->isAppcontrolTriggered = true; + result r = E_SUCCESS; + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == NULL) + { + return; + } + ArrayList* pArgList = new(std::nothrow) ArrayList(); + if (pArgList == NULL) + { + return; + } + r = pArgList->Construct(); + if (r == E_SUCCESS) + { + pArgList->Add(*pNewWindowInfo); + result r = pSceneManager->GoForward(ForwardSceneTransition(pNewWindowInfo->sceneID, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList); + if (pArgList != null) + { + delete pArgList; + pArgList = null; + } + if(IsFailed(r)) + { + AppLogDebug("MultipleWindowForm::OnActionPerformed GoForward failed %s",GetErrorMessage(r)); + return; + } + } + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + + delete __pConfirmationPopup; + __pConfirmationPopup = null; + + } + break; + default: + break; + } + +} + +void +MultipleWindowForm::OnFormBackRequested(Form& source) +{ + + String* pSelectedScene = NULL; + Object* value = NULL; + + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return; + } + + MultipleWindowPresentationModel::GetInstance()->GetValue(SELECTED_SCENE_ID, &value); + pSelectedScene = (String*) value; + if (pSelectedScene != NULL) + { + result r = pSceneManager->GoBackward(BackwardSceneTransition(*pSelectedScene, SCENE_TRANSITION_ANIMATION_TYPE_NONE)); +// delete pSelectedScene; + if(IsFailed(r)) + { + AppLogDebug("MultipleWindowForm::OnFormBackRequested GoForward failed %s",GetErrorMessage(r)); + return; + } + } + return; +} + +void +MultipleWindowForm::OnListViewContextItemStateChanged(ListView& listView, int index, int elementId, ListContextItemStatus state) +{ + return; +} + +void +MultipleWindowForm::OnListViewItemStateChanged(ListView& listView, int index, int elementId, ListItemStatus status) +{ + result r = E_SUCCESS; + ArrayList* pAllWindowList = MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList(); + int count = 0; + + if (elementId == IDA_FORMAT_DELETE_BITMAP) + { + // get current scene ID and check if it is matching with deleted scene id + WindowInfo* pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(index)); + String* pSelectedScene = NULL; + Object* pValue = NULL; + + if (pWindowInfo) + { + SceneRegister::DestroyAndUnRegisterScene(pWindowInfo->sceneID); + MultipleWindowPresentationModel::GetInstance()->GetValue(SELECTED_SCENE_ID, &pValue); + pSelectedScene = (String*) pValue; + pAllWindowList->RemoveAt(index, true); + if (pSelectedScene->CompareTo(pWindowInfo->sceneID) == 0) + { + //set current scene id to last scene id + int totalCount = pAllWindowList->GetCount() - 1; + WindowInfo* pLastIndexWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(totalCount)); + if (pLastIndexWindowInfo != NULL) + { + String* pSelectedSceneID = new(std::nothrow) String(pLastIndexWindowInfo->sceneID); + if (pSelectedSceneID != NULL) + { + MultipleWindowPresentationModel::GetInstance()->SetValue(SELECTED_SCENE_ID, (Object*) pSelectedSceneID); + + } + } + } + } + + count = MultipleWindowPresentationModel::GetInstance()->GetInstance()->GetAllWindowArrayList()->GetCount(); + + if (count >= 9) + { + GetFooter()->SetItemEnabled(1,false); + } + else + { + GetFooter()->SetItemEnabled(1,true); + } + + if ( count <= 1) + { + GetFooter()->SetItemEnabled(0,false); + } + + GetFooter()->Invalidate(true); + __pList->RefreshList(index, LIST_REFRESH_TYPE_ITEM_REMOVE); + __pList->UpdateList(); + } + else if(elementId == IDA_FORMAT_BITMAP || elementId == IDA_FORMAT_TITLE_STRING + || elementId == IDA_FORMAT_URL_STRING || elementId == -1) + { + + // launch the browser + WindowInfo* pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(index)); + if (pWindowInfo == NULL) + { + return; + } + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == NULL) + { + return; + } + ArrayList* pArgList = new(std::nothrow) ArrayList(); + if (pArgList == NULL) + { + return; + } + r = pArgList->Construct(); + if (IsFailed(r)) + { + return; + } + pArgList->Add(*pWindowInfo); + result r = pSceneManager->GoForward(ForwardSceneTransition(pWindowInfo->sceneID, SCENE_TRANSITION_ANIMATION_TYPE_NONE),pArgList); + + if (r == E_SUCCESS) + { + AppLogDebug("go forward success"); + } + else + { + AppLogDebug("go forward failed"); + } + if (pArgList != null) + { + delete pArgList; + pArgList = null; + } + + } + + return; +} + +void +MultipleWindowForm::OnListViewItemSwept(ListView& listView, int index, SweepDirection direction) +{ + return; +} + +void +MultipleWindowForm::OnListViewItemLongPressed(ListView& listView, int index, int elementId, bool& invokeListViewItemCallback) +{ + return; +} + +ListItemBase* +MultipleWindowForm::CreateItem(int index, int itemWidth) +{ + Rectangle listImageRect; + Rectangle pagetTitleRect; + Rectangle pageURLRect; + Rectangle deleteImageRect; + String pageTitle(L""); + String pageURL(L""); + result r = E_SUCCESS; + int width = W_ICON_IMAGE_WIDTH; + + AppResource* pAppResource = Application::GetInstance()->GetAppResource(); + ListAnnexStyle style = LIST_ANNEX_STYLE_NORMAL; + ArrayList* pAllWindowList = MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList(); + + if (pAllWindowList == null) + { + return null; + } + WindowInfo* pWindowInfo = dynamic_cast< WindowInfo* >(pAllWindowList->GetAt(index)); + if(pWindowInfo == null) + { + return NULL; + } + CustomItem* pItem = new(std::nothrow) CustomItem(); + pageTitle = pWindowInfo->pageTitle; + pageURL = pWindowInfo->pageUrl; + if (pageURL.GetLength() == 0) + { + String nourl; + pAppResource->GetString(L"IDS_BR_BODY_BLANK_PAGE", nourl); + pageURL = L"<"+ nourl +">"; + } + + if (pageTitle.GetLength() == 0) + { + String nourl; + pAppResource->GetString(L"IDS_BR_BODY_BLANK_PAGE", pageTitle); + } + + Rectangle screenBounds = GetBounds(); + r = pItem->Construct(Dimension(itemWidth, 128 + (__fontSize - 44)), style); + if (IsFailed(r)) + { + return NULL; + } + + if (pWindowInfo->pFavicon) + { + + if( __pListIconImage != NULL) + { + delete __pListIconImage; + __pListIconImage = null; + } + + __pListIconImage = new Bitmap(); + __pListIconImage->Construct(*(pWindowInfo->pFavicon),Rectangle(0,0,pWindowInfo->pFavicon->GetWidth(),pWindowInfo->pFavicon->GetHeight())); + } + else + { + if( __pListIconImage != NULL) + { + delete __pListIconImage; + __pListIconImage = null; + } + + __pListIconImage = pAppResource->GetBitmapN(L"I01_icon_default_favicon.png"); + } + + + listImageRect.SetBounds(screenBounds.x + 16, screenBounds.y + 28 + (__fontSize - 44)/2,width, 72 ); + pagetTitleRect.SetBounds(listImageRect.x + width + 16,10, screenBounds.width - 2 * width - 24 - 64, 72 + (__fontSize - 44)); + pageURLRect.SetBounds(pagetTitleRect.x, pagetTitleRect.y + pagetTitleRect.height, screenBounds.width - 2 * width - 120, 48); + if(__pListDeleteImage != null) + { + deleteImageRect.SetBounds(screenBounds.width - __pListDeleteImage->GetWidth() - 24, (128 + (__fontSize - 44) - __pListDeleteImage->GetHeight() - 8)/2, __pListDeleteImage->GetWidth() + 8, __pListDeleteImage->GetHeight() + 8); + } + pItem->AddElement(listImageRect, IDA_FORMAT_BITMAP, *__pListIconImage, null, null); + + if (pageTitle.CompareTo(L"") != 0) + { + pItem->AddElement(pagetTitleRect, IDA_FORMAT_TITLE_STRING, pageTitle, __fontSize, CUSTOM_COLOR_TRANSPARENT, CUSTOM_COLOR_TRANSPARENT, CUSTOM_COLOR_TRANSPARENT, true); + } + + if (pageURL.CompareTo(L"") != 0) + { + pItem->AddElement(pageURLRect, IDA_FORMAT_URL_STRING, pageURL, 32, CUSTOM_COLOR_GREY, CUSTOM_COLOR_LISTVIEW_TEXT, CUSTOM_COLOR_LISTVIEW_TEXT, true); + } + + if (pAllWindowList) + { + if (pAllWindowList->GetCount() > 1) + { + pItem->AddElement(deleteImageRect, IDA_FORMAT_DELETE_BITMAP, *__pListDeleteImage, null, null); + pItem->SetElementSelectionEnabled(IDA_FORMAT_DELETE_BITMAP, true); + } + } + return pItem; +} + +bool +MultipleWindowForm::DeleteItem(int index, ListItemBase* pItem, int itemWidth) +{ + delete pItem; + pItem = null; + return true; +} + +int +MultipleWindowForm::GetItemCount(void) +{ + ArrayList* pAllWindowList = MultipleWindowPresentationModel::GetInstance()->GetAllWindowArrayList(); + int windowCount = 0; + + if (pAllWindowList != null) + { + windowCount = pAllWindowList->GetCount(); + } + if (windowCount < 2) + { + GetFooter()->SetItemEnabled(0, false); + } + else + { + GetFooter()->SetItemEnabled(0, true); + } + GetFooter()->Invalidate(true); + return windowCount; +} + +void +MultipleWindowForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus) +{ + if (__pList) + { + __pList->UpdateList(); + } +} + +void +MultipleWindowForm::OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs) +{ + AppLog("receiving userevent for appcontrol %d",requestId); + if (requestId == APPCONTROL_LAUNCH_MAX_LIMIT_REACHED) + { + AppLog("receiving userevent for appcontrol %d ",requestId); + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + } +} diff --git a/src/IntMultipleWindowPresentationModel.cpp b/src/IntMultipleWindowPresentationModel.cpp new file mode 100644 index 0000000..37bd4bc --- /dev/null +++ b/src/IntMultipleWindowPresentationModel.cpp @@ -0,0 +1,288 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet MultipleWindowScene class +/*@file: IntMultipleWindowScene.cpp + *@brief: The MultipleWindowScene provides multiple instance of mainscenes and displays them in a Listview + * + */ +#include + +#include "IntCommonLib.h" +#include "IntMultipleWindowPresentationModel.h" + +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Graphics; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + +MultipleWindowPresentationModel* MultipleWindowPresentationModel::__pMultiWindowManager = NULL; +ArrayList* MultipleWindowPresentationModel::__pAllWindowList = NULL; +HashMapT< Key, Object* > MultipleWindowPresentationModel::__keyAndValues; +int WindowInfo::__windowId = 0; +String MultipleWindowPresentationModel::__currentSceneId = L"" ; +WindowInfo* MultipleWindowPresentationModel::__pCurWindowInfo = null; +Bitmap* WindowInfo::pFormCanvasBitmap = null; + +WindowInfo::WindowInfo(void) +{ + __windowId++; + ID = __windowId; + sceneID.Clear(); + sceneID.Append(IDSCN_MAIN_VIEW); + sceneID.Append(ID); + formID.Clear(); + formID.Append(IDL_FORM_MAIN_VIEW_SCENE); + formID.Append(ID); + isAppcontrolTriggered = false; + isJavascriptInitiated = false; + isFirstLaunch = true; + faviconFilePath = ""; + faviconUrl = ""; + pageUrl = L""; + pageTitle = ""; + pFavicon = FaviconManager::GetInstance()->GetDefaultFaviconN(); + pCurrentWeb = null; + pWebCanvasBitmap = null; + pFormCanvasBitmap = null; + +} + +WindowInfo::~WindowInfo(void) +{ +// if ( pFavicon != NULL) +// { +// delete pFavicon; +// pFavicon = null; +// } +} + +MultipleWindowPresentationModel::MultipleWindowPresentationModel(void) +{ + __isShowInProcess = false; +} + +MultipleWindowPresentationModel::~MultipleWindowPresentationModel(void) +{ + if (__pAllWindowList) + { + delete __pAllWindowList; + __pAllWindowList = NULL; + } + __keyAndValues.RemoveAll(); +} + +void +MultipleWindowPresentationModel::CreateInstance(void) +{ + if (__pMultiWindowManager == NULL) + { + __pMultiWindowManager = new(std::nothrow) MultipleWindowPresentationModel(); + result r = __pMultiWindowManager->Construct(); + if(IsFailed(r)) + { + delete __pMultiWindowManager; + __pMultiWindowManager = null; + } + } +} + +MultipleWindowPresentationModel* +MultipleWindowPresentationModel::GetInstance(void) +{ + if (__pMultiWindowManager == NULL) + { + CreateInstance(); + } + return __pMultiWindowManager; +} + + +void +MultipleWindowPresentationModel::DestroyInstance(void) +{ + if (__pMultiWindowManager) + { + delete __pMultiWindowManager; + __pMultiWindowManager = null; + } +} + +result +MultipleWindowPresentationModel::Construct(void) +{ + result r = E_SUCCESS; + __pAllWindowList = new(std::nothrow) ArrayList(); + r = __pAllWindowList->Construct(); + if(IsFailed(r)) + { + return r; + } + r = __keyAndValues.Construct(); + if(IsFailed(r)) + { + return r; + } + return E_SUCCESS; +} + +void +MultipleWindowPresentationModel::UnInitialize(void) +{ + AppLogDebug(" MultiWindowManager::Denitialize"); + return; +} + +result +MultipleWindowPresentationModel::AddWindoInfo(WindowInfo* pWindowInfo) +{ + result r = E_FAILURE; + + if (pWindowInfo != NULL) + { + r = __pAllWindowList->Add(*pWindowInfo); + } + + return r; +} + +ArrayList* +MultipleWindowPresentationModel::GetAllWindowArrayList(void) +{ + return __pAllWindowList; +} + +result +MultipleWindowPresentationModel::GetValue(Key key, Object** value) +{ + result r = E_FAILURE; + bool containKey = false; + + AppLogDebug("Workspace::GetValue"); + r = __keyAndValues.ContainsKey(key, containKey); + TryCatch(!IsFailed(r),,"ContainsKey failed %s",GetErrorMessage(r)); + + if (containKey == true) + r = __keyAndValues.GetValue(key, *value); + + CATCH: + return r; +} + +result +MultipleWindowPresentationModel::SetValue(Key key, Object* value) +{ + result r = E_FAILURE; + bool containKey = false; + + r = __keyAndValues.ContainsKey(key, containKey); + TryCatch(!IsFailed(r),,"ContainsKey failed %s",GetErrorMessage(r)); + + if (containKey == false) + r = __keyAndValues.Add(key, value); + else + r = __keyAndValues.SetValue(key, value); + + CATCH: + return r; +} + +WindowInfo* +MultipleWindowPresentationModel::CreateNewMainViewSceneN(const String& Url, bool isAppControlTriggered) +{ + + if (GetInstance()->GetAllWindowArrayList()->GetCount() >= 9) + { + AppLog("9 windows already opened"); + + String strTitle = L"";//CommonUtil::GetString(L"IDS_COM_SK_MAX_LIMIT_REACHED"); + String strText = CommonUtil::GetString(L"IDS_BR_BODY_COULD_NOT_OPEN_NEW_WINDOW_BECAUSE_YOU_HAVE_ALREADY_OPENED_MAXIMUM_NUMBER"); + ShowPopup(strTitle, strText); +// ShowPopup(strTitle, strText); +// ShowPopup(strTitle, strText); + + return null; + } + WindowInfo* pWindowInfo = new(std::nothrow) WindowInfo(); + if (pWindowInfo == NULL) + { + return null; + } + pWindowInfo->pageTitle = CommonUtil::GetString(L"IDS_BR_BODY_BLANK_PAGE"); + pWindowInfo->pageUrl = Url; + pWindowInfo->isAppcontrolTriggered = isAppControlTriggered; + MultipleWindowPresentationModel::GetInstance()->AddWindoInfo(pWindowInfo); + SceneRegister::RegisterNewMainView(pWindowInfo->sceneID, pWindowInfo->formID); + + return pWindowInfo; +} + + +void +MultipleWindowPresentationModel::SetCurrentSceneID(const String& currentSceneId) +{ + + __currentSceneId.Clear(); + __currentSceneId.Append(currentSceneId); + for (int index = 0; index < GetInstance()->GetAllWindowArrayList()->GetCount(); index ++) + { + WindowInfo* pWindowInfo = static_cast< WindowInfo* >(GetInstance()->GetAllWindowArrayList()->GetAt(index)); + + if ( pWindowInfo == NULL ) + { + return; + } + + if (pWindowInfo->sceneID.CompareTo(__currentSceneId) == 0) + { + __pCurWindowInfo = pWindowInfo; + } + } + + return ; +} + +void +MultipleWindowPresentationModel::GetCurrentSceneId(String& currentSceneId) +{ + currentSceneId = __currentSceneId; + return ; +} + +WindowInfo* +MultipleWindowPresentationModel::GetActiveWindowInfo() +{ + return __pCurWindowInfo; +} + + +void +MultipleWindowPresentationModel::ShowPopup(String& pTitle, String& pText) +{ + if(__isShowInProcess) + return; + + MessageBox* pMessageBox = new(std::nothrow) MessageBox(); + pMessageBox->Construct(pTitle, pText,MSGBOX_STYLE_OK,3000); + int modalResult = 0; + __isShowInProcess = true; + pMessageBox->ShowAndWait(modalResult); + __isShowInProcess = false; + + delete pMessageBox; +} diff --git a/src/IntNotificationPanel.cpp b/src/IntNotificationPanel.cpp new file mode 100644 index 0000000..9b68982 --- /dev/null +++ b/src/IntNotificationPanel.cpp @@ -0,0 +1,135 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// !Internet +/*@file: IntNotification.cpp + *@brief: This defines the behaviour of the Notification Class + * + */ + +#include +#include + +#include "IntNotificationPanel.h" +#include "IntSceneRegister.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + + +NotificationPanel::NotificationPanel(Form& aForm) +:__pTimer(null) +,__pLabel(null) +,__form(aForm) +,__position(0) +{ + Construct("IDL_NOTIFICATION_PANEL"); +} + +NotificationPanel::~NotificationPanel() +{ + if (__pTimer) + { + __pTimer->Cancel(); + delete __pTimer; + } +} + +void +NotificationPanel::SetText(Tizen::Base::String& message) +{ + __pLabel = static_cast(GetControl(L"IDC_NOTIFICATION_LABEL")); + if (__pLabel == null) + { + return; + } + __pLabel->SetText(message); + __pLabel->SetTextConfig(32, LABEL_TEXT_STYLE_BOLD); + __pLabel->Invalidate(true); +} + +void +NotificationPanel::OnTimerExpired(Tizen::Base::Runtime::Timer& timer) +{ + SetShowState(false); + Invalidate(true); +} + +void +NotificationPanel::ShowNotification(void) +{ + SceneManager* pSceneManager = SceneManager::GetInstance(); + if ( __pLabel != NULL) + { + AddControl(__pLabel); + __pLabel->SetBackgroundColor(CUSTOM_COLOR_INFO_LABEL); + } + __form.AddControl(this); + + SceneId sceneId = pSceneManager->GetInstance()->GetCurrentSceneId(); + + if (sceneId == IDSCN_EDIT_HISTORY_LIST || sceneId == IDSCN_EDIT_BOOKMARK_LIST /*|| sceneId == IDSCN_SETTINGS*/) + { + SetPosition(0,__form.GetClientAreaBounds().height - GetHeight()); + SetSize(__form.GetWidth(),GetHeight()); + } + else + { + // Since there is a footer panel for the Main form need to subtract __position which is equal to footer panel height. + SetPosition(0,__form.GetClientAreaBounds().height -__position - GetHeight()); + } + Invalidate(true); + + __pTimer = new (std::nothrow) Timer; + if (__pTimer != NULL) + { + __pTimer->Construct(*this); + __pTimer->Start(2000); + } + +} + +void +NotificationPanel::SetPositionDiff(int pos) +{ + __position = pos ; +} + +void +NotificationPanel::OrientationChanged() +{ + SceneManager* pSceneManager = SceneManager::GetInstance(); + SceneId sceneId = pSceneManager->GetInstance()->GetCurrentSceneId(); + + if (sceneId == IDSCN_EDIT_HISTORY_LIST || sceneId == IDSCN_EDIT_BOOKMARK_LIST /*|| sceneId == IDSCN_SETTINGS*/) + { + SetPosition(0,__form.GetClientAreaBounds().height - GetHeight()); + SetSize(__form.GetWidth(),GetHeight()); + } + else + { + // Since there is a footer panel for the Main form need to subtract __position which is equal to footer panel height. + SetPosition(0,__form.GetClientAreaBounds().height -__position - GetHeight()); + } + Invalidate(true); +} diff --git a/src/IntPresentationModelBase.cpp b/src/IntPresentationModelBase.cpp new file mode 100644 index 0000000..7e53afd --- /dev/null +++ b/src/IntPresentationModelBase.cpp @@ -0,0 +1,1033 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntPresentationModelBase.cpp + *@brief: Defines the database/storage functions. + */ + +#include +#include + +#include "IntPresentationModelBase.h" +#include "IntTypes.h" + +const wchar_t* BOOKMARK_URL_TABLE = L"Bookmarks"; +//const wchar_t* BOOKMARK_FOLDER_TABLE = L"BookmarkFolder"; +const wchar_t* HISTORY_DATA_TABLE = L"History"; + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Utility; +using namespace Tizen::Io; +using namespace Tizen::Locales; +using namespace Tizen::System; + +const int PresentationModelBase::MAX_DB_QUERY_SIZE = 21474836; +const int PresentationModelBase::QUERY_TYPE_LENGTH = 6; + +PresentationModelBase::PresentationModelBase(void) +{ + __pDataBase = null; + __pDbEnum = null; + __pDbStatement = null; + __isBeginTransaction = false; + DB_FILE_PATH = L"/opt/usr/dbspace/.browser-history.db"; +} + +PresentationModelBase::~PresentationModelBase(void) +{ + +} + +result +PresentationModelBase::Initialize(void) +{ + result r = E_FAILURE; + + r = OpenDb(); + + return r; +} + +result +PresentationModelBase::UnInitialize(void) +{ + result r = E_FAILURE; + + r = PresentationModelBase::CloseDb(); + + return r; +} + +result +PresentationModelBase::OpenDb(void) +{ + result r = E_FAILURE; + + if (__pDataBase != null) + { + if (__pDbEnum != null) + { + delete __pDbEnum; + __pDbEnum = null; + } + if (__pDbStatement != null) + { + delete __pDbStatement; + __pDbStatement = null; + } + return r; + } + __pDataBase = new(std::nothrow) Database(); + if (null == __pDataBase) + { + return E_OUT_OF_MEMORY; + } + String dbName = DB_FILE_PATH; + + r = __pDataBase->Construct(dbName, true); + if (IsFailed(r)) + { + AppLogDebug("DB construction failed:%s", GetErrorMessage(r)); + delete __pDataBase; + __pDataBase = null; + return r; + } + + + __isBeginTransaction = false; + if (File::IsFileExist(dbName)) + { + r = InitializeDBTables(); + if (IsFailed(r)) + { + delete __pDataBase; + __pDataBase = null; + return r; + } + } + return r; +} + +result +PresentationModelBase::CloseDb(void) +{ + if (__pDbEnum != null) + { + delete __pDbEnum; + __pDbEnum = null; + } + if (__pDbStatement != null) + { + delete __pDbStatement; + __pDbStatement = null; + } + if (__pDataBase != null) + { + delete __pDataBase; + __pDataBase = null; + } + + __isBeginTransaction = false; + + return E_SUCCESS; +} + +result +PresentationModelBase::CreateDBTables(BrowserDbTableTypes tableType) +{ + result r = E_FAILURE; + String query; + int resultCount = -1; + + if (DB_FILE_PATH.CompareTo(L"/opt/usr/dbspace/.internet_bookmark.db") == 0) + { + switch (tableType) + { + case DB_TYPE_BOOKMARKURLS: + { + query.Append(L"CREATE TABLE IF NOT EXISTS "); + query.Append(BOOKMARK_URL_TABLE); + //query.Append(L" ( ID INTEGER PRIMARY KEY AUTOINCREMENT, TITLE TEXT, URL TEXT, PARENT_BOOKMARK_ID INTEGER DEFAULT -1, CREATED_TIME DATETIME, MODIFIED_TIME DATETIME, ICON_PATH TEXT, FAVICON_ID INTEGER)"); + query.Append(L" ( ID INTEGER PRIMARY KEY AUTOINCREMENT, TYPE INTEGER, PARENT INTEGER DEFAULT -1, ADDRESS TEXT, TITLE TEXT, CREATIONDATE DATETIME, SEQUENCE INTEGER, UPDATEDATE DATETIME, VISITDATE DATETIME, EDITABLE INTEGER, ACCESSACCOUNT INTEGER, FAVICON BLOB, FAVICON_LENGTH INTEGER, FAVICON_W INTEGER, FAVICON_H INTEGER, CREATED_DATE DATETIME, ACCOUNT_NAME TEXT, ACCOUNT_TYPE TEXT, THUMBNAIL BLOB, THUMBNAIL_LENGTH INTEGER, THUMBNAIL_W INTEGER, THUMBNAIL_H INTEGER, VERSION INTEGER, SYNC TEXT, TAG1 TEXT, TAG2 TEXT, TAG3 TEXT, TAG4 TEXT)"); + + break; + } + case DB_TYPE_FAVICON: + { + query.Append(L"CREATE TABLE IF NOT EXISTS FaviconData ( ID INTEGER PRIMARY KEY AUTOINCREMENT, URL TEXT, FILE_PATH TEXT )"); + break; + } + default: + { + AppLogDebug("PresentationModelBase::CreateDBTables: Table Type:%d is invalid", tableType); + return E_SUCCESS; + } + } + } + else if(DB_FILE_PATH.CompareTo(L"/opt/usr/dbspace/.browser-history.db") == 0) + { + switch (tableType) + { + case DB_TYPE_HISTORYDATA: + { + query.Append(L"CREATE TABLE IF NOT EXISTS "); + query.Append(HISTORY_DATA_TABLE); + //query.Append(L" ( ID INTEGER PRIMARY KEY AUTOINCREMENT, TITLE TEXT, URL TEXT, VISITED_TIME DATETIME, ICON_PATH TEXT, FAVICON_ID INTEGER, THUMBNAIL_PATH TEXT)"); + query.Append(L"(ID INTEGER PRIMARY KEY AUTOINCREMENT, ADDRESS TEXT, TITLE TEXT, COUNTER INTEGER, VISITDATE DATETIME, FAVICON BLOB, FAVICON_LENGTH INTEGER, FAVICON_W INTEGER, FAVICON_H INTEGER, SNAPSHOT BLOB, SNAPSHOT_STRIDE INTEGER, SNAPSHOT_W INTEGER, SNAPSHOT_H INTEGER)"); + break; + } + case DB_TYPE_FAVICON: + { + query.Append(L"CREATE TABLE IF NOT EXISTS FaviconData ( ID INTEGER PRIMARY KEY AUTOINCREMENT, URL TEXT, FILE_PATH TEXT )"); + break; + } + default: + { + AppLogDebug("PresentationModelBase::CreateDBTables: Table Type:%d is invalid", tableType); + return E_SUCCESS; + } + } + + } + r = PresentationModelBase::ExecuteQuery(query, resultCount); + TryCatch(!IsFailed(r),,"PresentationModelBase::CreateDBTables query failed %s",GetErrorMessage(r)); + + CATCH: return r; +} + +result +PresentationModelBase::InitializeDBTables(void) +{ + result r = E_FAILURE; + AppLog("DB_FILE_PATH :%ls", String(DB_FILE_PATH).GetPointer()); + for (register int nDbTblIndex = DB_TYPE_INVALID + 1; nDbTblIndex < DB_TYPE_MAX; nDbTblIndex++) + { + r = CreateDBTables((BrowserDbTableTypes) nDbTblIndex); + TryCatch(!IsFailed(r),,"PresentationModelBase::InitializeDBTables failed %s",GetErrorMessage(r)); + } + + CATCH: return r; +} + +result +PresentationModelBase::DropDBTables(void) +{ + result r = E_FAILURE; + String query; + int resultCount = -1; + + for (register int tableIndex = DB_TYPE_INVALID + 1; tableIndex < DB_TYPE_MAX; tableIndex++) + { + switch (tableIndex) + { + case DB_TYPE_BOOKMARKURLS: + { + query.Clear(); + query.Format(MAX_DB_QUERY_SIZE, L"DROP TABLE IF EXISTS Bookmark"); + break; + } + /*case DB_TYPE_BOOKMARKFOLDERS: + { + query.Clear(); + query.Format(MAX_DB_QUERY_SIZE, L"DROP TABLE IF EXISTS BookmarkFolder"); + break; + }*/ + + case DB_TYPE_HISTORYDATA: + { + query.Clear(); + query.Format(MAX_DB_QUERY_SIZE, L"DROP TABLE IF EXISTS HistoryData"); + break; + } + + case DB_TYPE_FAVICON: + { + query.Clear(); + query.Format(MAX_DB_QUERY_SIZE, L"DROP TABLE IF EXISTS FaviconData"); + break; + } + } + + r = PresentationModelBase::ExecuteQuery(query, resultCount); + TryCatch( !IsFailed(r),,"PresentationModelBase::DropDBTables query failed %s",GetErrorMessage(r)); + } + + CATCH: return r; +} + +result +PresentationModelBase::ExecuteQuery(const String& formatQuery, int& count) +{ + AppLogDebug("rahul Query: %ls", formatQuery.GetPointer()); + + result r = E_FAILURE; + String queryType; + + if (__pDataBase == null) + { + return E_INIT_FAILED; + } + + if (__pDbEnum != null) + { + delete __pDbEnum; + __pDbEnum = null; + } + + if (__pDbStatement != null) + { + delete __pDbStatement; + __pDbStatement = null; + } + + +#if defined(FBK_DB_QUERY_LOG) + { + File file; + file.Construct(L"/Home/Query.txt", "a+", true); + file.Write(formatQuery); + file.Write(String("\r\n")); + } +#endif + + r = formatQuery.SubString(0, QUERY_TYPE_LENGTH, queryType); + if (r == E_SUCCESS) + { + if (queryType == "SELECT") + { + __pDbEnum = __pDataBase->QueryN(formatQuery); + r = GetLastResult(); + if (IsFailed(r)) + { + AppLogException("Failed Database::QueryN(). (error: %s, query: %ls)", GetErrorMessage(r), formatQuery.GetPointer()); + return r; + } + count = 0; + + if (__pDbEnum != null) + { + while (__pDbEnum->MoveNext() == E_SUCCESS) + { + count++; + } + __pDbEnum->Reset(); + } + + } + else + { + if (__isBeginTransaction == false && + (queryType == L"INSERT" || queryType == L"UPDATE" || queryType == L"DELETE")) + { + r = __pDataBase->BeginTransaction(); + if (IsFailed(r)) + { + AppLogException("Failed Database::BeginTransaction() . (error: %s)", GetErrorMessage(r)); + return r; + } + + __isBeginTransaction = true; + } + + r = __pDataBase->ExecuteSql(formatQuery, false); + if (IsFailed(r)) + { + AppLogException("Failed Database::ExecuteSql(). (error: %s, query: %ls)", GetErrorMessage(r), formatQuery.GetPointer()); + return r; + } + count = 0; + } + } + + return r; +} + +result +PresentationModelBase::ExecuteBookmarkQuery(const Tizen::Base::String& formatQuery, int& count, BookmarkData& bookmark) +{ + AppLogDebug("PresentationModelBase::ExecuteBookmarkQuery Query: %ls", formatQuery.GetPointer()); + + result r = E_FAILURE; + String queryType; + + DateTime dt; + String bookmarkId; + String bookmarkTitle = bookmark.GetBookmarkTitle(); + bookmarkTitle.Replace(L"'", L"\'"); + String bookmarkUrl = bookmark.GetUrl(); + bookmarkUrl.Replace(L"'", L"\'"); + + PresentationModelBase::GetCurrentDateTime(dt); + + if (__pDataBase == null) + { + return E_INIT_FAILED; + } + + if (__pDbEnum != null) + { + delete __pDbEnum; + __pDbEnum = null; + } + + if (__pDbStatement != null) + { + delete __pDbStatement; + __pDbStatement = null; + } + + +#if defined(FBK_DB_QUERY_LOG) + { + File file; + file.Construct(L"/Home/Query.txt", "a+", true); + file.Write(formatQuery); + file.Write(String("\r\n")); + } +#endif + + r = formatQuery.SubString(0, QUERY_TYPE_LENGTH, queryType); + if (r == E_SUCCESS) + { + if (queryType == "SELECT") + { + __pDbEnum = __pDataBase->QueryN(formatQuery); + r = GetLastResult(); + if (IsFailed(r)) + { + AppLogException("Failed Database::QueryN(). (error: %s, query: %ls)", GetErrorMessage(r), formatQuery.GetPointer()); + return r; + } + count = 0; + + if (__pDbEnum != null) + { + while (__pDbEnum->MoveNext() == E_SUCCESS) + { + count++; + } + __pDbEnum->Reset(); + } + } + else + { + if (__isBeginTransaction == false && (queryType == L"INSERT" )) + { + r = __pDataBase->BeginTransaction(); + if (IsFailed(r)) + { + AppLogException("Failed Database::BeginTransaction() . (error: %s)", GetErrorMessage(r)); + return r; + } + + __isBeginTransaction = true; + __pDbStatement = __pDataBase->CreateStatementN(formatQuery); + __pDbStatement->BindInt(0,bookmark.GetBookmarkType()); + __pDbStatement->BindString(1,bookmark.GetParentId()); + __pDbStatement->BindString(2,bookmarkUrl); + __pDbStatement->BindString(3,bookmarkTitle); + DateTimeFormatter *pFormatter = DateTimeFormatter::CreateDateFormatterN(DATE_TIME_STYLE_DEFAULT); + pFormatter->ApplyPattern(L"yyyy-mm-dd hh:mm:ss"); + String dateStr; + pFormatter->Format(dt, dateStr); + AppLog("DateStr: %ls", dateStr.GetPointer()); + __pDbStatement->BindString(4,dateStr); + __pDbStatement->BindString(5,dateStr); + + if(bookmark.GetFavIconBuffer() != null) + { + __pDbStatement->BindBlob(6,*(bookmark.GetFavIconBuffer())); + } + __pDbStatement->BindInt(7,bookmark.GetFavIconWidth()); + __pDbStatement->BindInt(8,bookmark.GetFavIconHeight()); + + __pDataBase->ExecuteStatementN(*__pDbStatement); + + if (IsFailed(GetLastResult())) + { + AppLog("PresentationModelBase::ExecuteBookmarkQuery Failed Database::ExecuteSql(). (error: %s, query: %ls)", GetErrorMessage(r), formatQuery.GetPointer()); + return r; + } + else + { + AppLog("PresentationModelBase::ExecuteBookmarkQuery success database"); + } + delete pFormatter; + } + else if (__isBeginTransaction == false && (queryType == L"UPDATE" || queryType == L"DELETE")) + { + r = __pDataBase->ExecuteSql(formatQuery, false); + if (IsFailed(r)) + { + AppLogException("Failed Database::ExecuteSql(). (error: %s, query: %ls)", GetErrorMessage(r), formatQuery.GetPointer()); + return r; + } + } + + count = 0; + } + } + + return r; +} + +result +PresentationModelBase::ExecuteHistoryQuery(const Tizen::Base::String& formatQuery, int& nRowCount, History& history) +{ + + AppLogDebug("Query: %ls", formatQuery.GetPointer()); + + result r = E_FAILURE; + String queryType; + DateTime date; + int count; + + String historyTitle = history.GetHistoryTitle(); + historyTitle.Replace(L"'", L"\'"); + + String historyUrl = history.GetHistoryUrl(); + historyUrl.Replace(L"'", L"\'"); + + GetCurrentDateTime(date); + + if (__pDataBase == null) + { + return E_INIT_FAILED; + } + + if (__pDbEnum != null) + { + delete __pDbEnum; + __pDbEnum = null; + } + + if (__pDbStatement != null) + { + delete __pDbStatement; + __pDbStatement = null; + } + + r = formatQuery.SubString(0, QUERY_TYPE_LENGTH, queryType); + if (r == E_SUCCESS) + { + if (queryType == "SELECT") + { + __pDbEnum = __pDataBase->QueryN(formatQuery); + r = GetLastResult(); + if (IsFailed(r)) + { + AppLogException("Failed Database::QueryN(). (error: %s, query: %ls)", GetErrorMessage(r), formatQuery.GetPointer()); + return r; + } + count = 0; + + if (__pDbEnum != null) + { + while (__pDbEnum->MoveNext() == E_SUCCESS) + { + count++; + } + __pDbEnum->Reset(); + } + + } + else + { + if (__isBeginTransaction == false && (queryType == L"INSERT")) + { + r = __pDataBase->BeginTransaction(); + if (IsFailed(r)) + { + AppLogException("Failed Database::BeginTransaction() . (error: %s)", GetErrorMessage(r)); + return r; + } + + __isBeginTransaction = true; + __pDbStatement = __pDataBase->CreateStatementN(formatQuery); + if(GetLastResult() != E_SUCCESS) + { + AppLog("CreateStatementN error: %s", GetErrorMessage(GetLastResult())); + return GetLastResult(); + } + r = __pDbStatement->BindString(0,historyUrl); + AppLog("BindString result historyUrl %s",GetErrorMessage(r)); + r = __pDbStatement->BindString(1,historyTitle); + AppLog("BindString result historyTitle %s historyTitle %ls",GetErrorMessage(r),historyTitle.GetPointer()); + + String visitedTime = GetStringFromDate(date); + /*DateTimeFormatter *pFormatter = DateTimeFormatter::CreateDateFormatterN(DATE_TIME_STYLE_DEFAULT); + pFormatter->ApplyPattern(L"YYYY-MM-dd hh:mm:ss"); + String dateStr; + pFormatter->Format(date, dateStr); + AppLog("DateStr: %ls", dateStr.GetPointer());*/ + __pDbStatement->BindString(2, visitedTime); + if(history.GetFavIconBuffer() != null) + { + __pDbStatement->BindBlob(3,*(history.GetFavIconBuffer())); + } + __pDbStatement->BindInt(4,history.GetFavIconWidth()); + __pDbStatement->BindInt(5,history.GetFavIconHeight()); + + __pDataBase->ExecuteStatementN(*__pDbStatement); + + if (IsFailed(GetLastResult())) + { + AppLog("PresentationModelBase::ExecuteBookmarkQuery Failed Database::ExecuteSql(). (error: %s, query: %ls)", GetErrorMessage(r), formatQuery.GetPointer()); + return r; + } + else + { + AppLog("PresentationModelBase::ExecuteBookmarkQuery success database"); + } + } + else if(__isBeginTransaction == false && (queryType == L"UPDATE" || queryType == L"DELETE")) + { + r = __pDataBase->ExecuteSql(formatQuery, false); + if (IsFailed(r)) + { + AppLogException("Failed Database::ExecuteSql(). (error: %s, query: %ls)", GetErrorMessage(r), formatQuery.GetPointer()); + return r; + } + } + count = 0; + } + } + + return r; +} + +result PresentationModelBase::ExecuteUpdateHistoryFavIconQuery(const Tizen::Base::String& formatQuery, int& nRowCount, History& history) +{ + result r = E_FAILURE; + String queryType; + int historyID; + r = Integer::Parse(history.GetHistoryId(), historyID); + + if (__pDataBase == null) + { + return E_INIT_FAILED; + } + + if (__pDbEnum != null) + { + delete __pDbEnum; + __pDbEnum = null; + } + + if (__pDbStatement != null) + { + delete __pDbStatement; + __pDbStatement = null; + } + r = formatQuery.SubString(0, QUERY_TYPE_LENGTH, queryType); + + if (__isBeginTransaction == false ) + { + r = __pDataBase->BeginTransaction(); + if (IsFailed(r)) + { + AppLogException("Failed Database::BeginTransaction() . (error: %s)", GetErrorMessage(r)); + return r; + } + + __isBeginTransaction = true; + __pDbStatement = __pDataBase->CreateStatementN(formatQuery); + if(GetLastResult() != E_SUCCESS) + { + AppLog("CreateStatementN error: %s", GetErrorMessage(GetLastResult())); + return GetLastResult(); + } + __pDbStatement->BindBlob(0,*(history.GetFavIconBuffer())); + __pDbStatement->BindInt(1,history.GetFavIconWidth()); + __pDbStatement->BindInt(2,history.GetFavIconHeight()); + __pDbStatement->BindInt(3,historyID); + + __pDataBase->ExecuteStatementN(*__pDbStatement); + + if (IsFailed(GetLastResult())) + { + AppLog("PresentationModelBase::ExecuteBookmarkQuery Failed Database::ExecuteSql(). (error: %s, query: %ls)", GetErrorMessage(r), formatQuery.GetPointer()); + return r; + } + else + { + AppLog("PresentationModelBase::ExecuteBookmarkQuery success database"); + } + } + + return r; +} + +result +PresentationModelBase::DbIsNextRowPresent(bool& nextRowpresent) +{ + result r = E_FAILURE; + + if (null == __pDataBase || null == __pDbEnum) + { + if (__pDbEnum == null) + { + AppLogException("PresentationModelBase : pdbenum is null"); + } + if (__pDataBase == null) + { + AppLogException("PresentationModelBase : __pDataBase is null"); + } + return E_OUT_OF_MEMORY; + } + r = __pDbEnum->MoveNext(); + if (IsFailed(r)) + { + nextRowpresent = false; + return r; + } + nextRowpresent = true; + return r; +} + +result +PresentationModelBase::IsNullColumn(int index, bool& isColumNull) +{ + if (null == __pDataBase || null == __pDbEnum) + { + return E_DATABASE; + } + isColumNull = (__pDbEnum->GetColumnType(index) == DB_COLUMNTYPE_NULL ? true : false); + + return E_SUCCESS; +} + +result +PresentationModelBase::GetColumn(int index, String& stringValue) +{ + result r = E_FAILURE; + DbColumnType columnType; + + if (null == __pDataBase || null == __pDbEnum) + { + return E_OUT_OF_MEMORY; + } + // Find column type + columnType = __pDbEnum->GetColumnType(index); + + //if column type is null then assign empty string and return + if (columnType == DB_COLUMNTYPE_NULL) + { + stringValue = ""; + return E_SUCCESS; + } + //Get String value + r = __pDbEnum->GetStringAt(index, stringValue); + if (IsFailed(r)) + { + AppLogDebug("GetStringAt: Failed"); + return r; + } + return r; +} + +result +PresentationModelBase::GetColumn(int index, int& intValue) +{ + result r = E_FAILURE; + DbColumnType columnType; + + if (null == __pDataBase || null == __pDbEnum) + { + return E_OUT_OF_MEMORY; + } + // Find column type + columnType = __pDbEnum->GetColumnType(index); + + //if column type is null then assign empty string and return + if (columnType == DB_COLUMNTYPE_NULL) + { + intValue = 0; + return E_SUCCESS; + } + //Get String value + r = __pDbEnum->GetIntAt(index, intValue); + TryCatch(!IsFailed(r),,"GetIntAt:failed %s",GetErrorMessage(r)); + + CATCH: + return r; +} + +result +PresentationModelBase::GetColumn(int index, DateTime& dateValue) +{ + result r = E_FAILURE; + DbColumnType nType; + + if (null == __pDataBase || null == __pDbEnum) + { + AppLogDebug("__pDataBase or __pDbEnum is null"); + return E_OUT_OF_MEMORY; + } + // Find column type + nType = __pDbEnum->GetColumnType(index); + //if column type is null then assign empty string and return + if (nType == DB_COLUMNTYPE_NULL) + { + return E_SUCCESS; + } + //Get String value + r = __pDbEnum->GetDateTimeAt(index, dateValue); + if (IsFailed(r)) + { + AppLogDebug("GetDateTimeAt: Failed"); + String temp; + int currIndex = -1; + int nextIndex = -1; + + int year = 0; + int month = 0; + int day = 0; + int hour = 0; + int min = 0; + int sec = 0; + + int value = 0; + String dbColoumn = ""; + __pDbEnum->GetStringAt(index, dbColoumn); + dbColoumn.IndexOf("-", 0, currIndex); + if(currIndex != -1) + { + dbColoumn.SubString(0, currIndex ,temp); + Integer::Parse(temp, 10, year); + } + + dbColoumn.IndexOf("-", currIndex + 1, nextIndex); + if(currIndex != -1) + { + dbColoumn.SubString(currIndex + 1, nextIndex - currIndex - 1 ,temp); + Integer::Parse(temp, 10, month); + } + currIndex = nextIndex; + + dbColoumn.IndexOf(" ", currIndex + 1, nextIndex); + if(currIndex != -1) + { + dbColoumn.SubString(currIndex + 1, nextIndex - currIndex -1 ,temp); + Integer::Parse(temp, 10, day); + } + currIndex = nextIndex; + + dbColoumn.IndexOf(":", currIndex + 1, nextIndex); + if(currIndex != -1) + { + dbColoumn.SubString(currIndex + 1, nextIndex - currIndex -1 ,temp); + Integer::Parse(temp, 10, hour); + } + currIndex = nextIndex; + + dbColoumn.IndexOf(":", currIndex + 1, nextIndex); + if(currIndex != -1) + { + dbColoumn.SubString(currIndex + 1, nextIndex - currIndex -1 ,temp); + Integer::Parse(temp, 10, min); + } + currIndex = nextIndex; + + dbColoumn.SubString(currIndex + 1, temp); + Integer::Parse(temp, 10, sec); + + dateValue.SetValue(year, month, day, hour, min, sec); + return E_SUCCESS; + } + + return r; +} + +result +PresentationModelBase::GetColumn(int index, double& doubleValue) +{ + result r = E_FAILURE; + DbColumnType columnType; + + if (null == __pDataBase || null == __pDbEnum) + { + return E_OUT_OF_MEMORY; + } + // Find column type + columnType = __pDbEnum->GetColumnType(index); + + //if column type is null then assign empty string and return + if (columnType == DB_COLUMNTYPE_NULL) + { + doubleValue = 0.0; + return E_SUCCESS; + } + //Get String value + r = __pDbEnum->GetDoubleAt(index, doubleValue); + if (IsFailed(r)) + { + AppLogDebug("GetDateTimeAt: Failed"); + return r; + } + + return r; +} + +result +PresentationModelBase::GetColumn(int index,Tizen::Base::ByteBuffer& favIconBuffer) +{ + result r = E_FAILURE; + DbColumnType columnType; + + if (null == __pDataBase || null == __pDbEnum) + { + return E_OUT_OF_MEMORY; + } + // Find column type + columnType = __pDbEnum->GetColumnType(index); + + //if column type is null then assign empty string and return + if (columnType == DB_COLUMNTYPE_NULL) + { + return E_SUCCESS; + } + favIconBuffer.Construct(__pDbEnum->GetColumnSize(index)); + //Get String value + r = __pDbEnum->GetBlobAt(index, favIconBuffer); + AppLog("PresentationModelBase::GetColumn favicon result is %s", GetErrorMessage(r)); + + + if (IsFailed(r)) + { + AppLogDebug("GetDateTimeAt: Failed"); + return r; + } + + return r; +} + +result +PresentationModelBase::RollbackDb() +{ + result r = E_FAILURE; + + if (__pDataBase != null && __isBeginTransaction == true) + { + r = __pDataBase->RollbackTransaction(); + if (IsFailed(r)) + { + return r; + } + __isBeginTransaction = false; + } + return r; +} + +result +PresentationModelBase::CommitDb() +{ + + result r = E_FAILURE; + + if (__pDataBase != null && __isBeginTransaction == true) + { + r = __pDataBase->CommitTransaction(); + TryCatch(!IsFailed(r),,"PresentationModelBase::Commit Transaction:failed %s",GetErrorMessage(r)); + + __isBeginTransaction = false; + } + + CATCH: + return r; +} + +result +PresentationModelBase::GetLastInsertedId(String& tableName, int& rowId) +{ + String query; + result r = E_FAILURE; + int count = -1; + bool nextRowpresent = false; + + query.Append(L"SELECT last_insert_rowid() FROM "); + query.Append(tableName); + + r = PresentationModelBase::ExecuteQuery(query, count); + TryCatch(!IsFailed(r),,"PresentationModelBase::GetLastInsertedId query failed %s",GetErrorMessage(r)); + + r = PresentationModelBase::DbIsNextRowPresent(nextRowpresent); + + if (nextRowpresent == true) + { + r = PresentationModelBase::GetColumn(0, rowId); + if (IsFailed(r)) + { + AppLogDebug("PresentationModelBase::GetLstInsertedId -(%s)\n", GetErrorMessage(r)); + return r; + } + } + CATCH: return r; +} + +bool +PresentationModelBase::GetCurrentDateTime(DateTime& dt) +{ + DateTime dtNow; + LocaleManager localManager; + result r = E_FAILURE; + TimeZone tz; + + r = SystemTime::GetCurrentTime(dt); + return true; +} + +String +PresentationModelBase::GetStringFromDate(DateTime& date) +{ + String dateFormat = L""; + dateFormat.Append(date.GetYear()); + dateFormat.Append('-'); + if(date.GetMonth() < 10) + { + dateFormat.Append('0'); + } + dateFormat.Append(date.GetMonth()); + dateFormat.Append('-'); + if(date.GetDay() < 10) + { + dateFormat.Append('0'); + } + dateFormat.Append(date.GetDay()); + dateFormat.Append(' '); + if(date.GetHour() < 10) + { + dateFormat.Append('0'); + } + dateFormat.Append(date.GetHour()); + dateFormat.Append(':'); + if(date.GetMinute() < 10) + { + dateFormat.Append('0'); + } + dateFormat.Append(date.GetMinute()); + dateFormat.Append(':'); + if(date.GetSecond() < 10) + { + dateFormat.Append('0'); + } + dateFormat.Append(date.GetSecond()); + return dateFormat; +} diff --git a/src/IntRadioCustomItem.cpp b/src/IntRadioCustomItem.cpp new file mode 100644 index 0000000..1f58b61 --- /dev/null +++ b/src/IntRadioCustomItem.cpp @@ -0,0 +1,85 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet RadioCustomItem class +/*@file: RadioCustomItem.cpp + *@brief: The RadioCustomItem + */ +#include +#include + +#include "IntCommonLib.h" +#include "IntRadioCustomItem.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Graphics; +using namespace Tizen::Ui::Controls; + +const int RadioCustomItem::IDA_FORMAT_STRING = 500; + +RadioCustomItem::RadioCustomItem(void) +{ + __width = 0; + __height = 0; + __text = L""; +} + +RadioCustomItem::~RadioCustomItem(void) +{ + +} + +result +RadioCustomItem::Construct(int width, int height) +{ + result r = E_FAILURE; + __fontSize = CommonUtil::GetFontSize(); + __width = width; + __height = height; + const Dimension dim(width, height); + r = CustomItem::Construct(dim, LIST_ANNEX_STYLE_RADIO); + + return r; +} + +void +RadioCustomItem::SetText(Tizen::Base::String& text) +{ + __text = text; +} + +String +RadioCustomItem::GetText(void) +{ + return __text; +} + +result +RadioCustomItem::Make(void) +{ + result r = E_FAILURE; + Color textColor = CUSTOM_COLOR_LISTVIEW_TEXT2; + Color pressedTextColor = CUSTOM_COLOR_LISTVIEW_TEXT; + + AppLogDebug("RadioCustomItem::the text is %ls",__text.GetPointer()); + r = AddElement(Rectangle(16, 5, __width - 120 , __height), IDA_FORMAT_STRING, __text, __fontSize, textColor, textColor, textColor, true); + TryCatch(!IsFailed(r),,"RadioCustomItem::the value is %s",GetErrorMessage(r)); + + CATCH: + return r; +} diff --git a/src/IntReaderFontSizeForm.cpp b/src/IntReaderFontSizeForm.cpp new file mode 100644 index 0000000..e6d65e6 --- /dev/null +++ b/src/IntReaderFontSizeForm.cpp @@ -0,0 +1,163 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet IntFontSize class +/*@file: IntFontSize.cpp + *@brief: This class defines IntFontSize used to change the font size + * + */ + +#include +#include + +#include "IntCommonLib.h" +#include "IntReaderFontSizeForm.h" +#include "IntSceneRegister.h" +#include "IntSettingPresentationModel.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + + +ReaderFontSizeForm::ReaderFontSizeForm(void) +{ + __pFontSlider = null; + __pFontValue = null; +} + +ReaderFontSizeForm::~ReaderFontSizeForm(void) +{ + +} + +bool +ReaderFontSizeForm::Initialize(void) +{ + Form::Construct(L"IDL_FONT_SIZE"); + + return true; +} + +result +ReaderFontSizeForm::OnInitializing(void) +{ + result r = E_SUCCESS; + + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager != null) + { + r = pSceneManager->AddSceneEventListener(IDSCN_FONT_SIZE, *this); + TryCatch(!IsFailed(r),,"AddSceneEventListener failed with error %s",GetErrorMessage(r)); + } + + SetFormBackEventListener(this); + + r = GetHeader()->SetTitleText(CommonUtil::GetString(L"IDS_BR_BODY_FONT_SIZE")); + TryCatch(!IsFailed(r),,"OnInitialized failed with %s",GetErrorMessage(r)); + + __pFontSlider = static_cast< Slider* >(GetControl( + L"IDC_FONT_SLIDER", true)); + if (__pFontSlider == null) + { + return E_FAILURE; + } + __pFontSlider->AddSliderEventListener(*this); + + r = __pFontSlider->SetBounds(Rectangle(0, 10, GetClientAreaBounds().width, 120)); + TryCatch(!IsFailed(r),,"OnInitialized failed with %s",GetErrorMessage(r)); + + r = __pFontSlider->SetRange(10, 30); + TryCatch(!IsFailed(r),,"OnInitialized failed with %s",GetErrorMessage(r)); + + GetFooter()->AddActionEventListener(*this); + + CATCH: + return r; +} + +void +ReaderFontSizeForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs) +{ + __pFontValue = dynamic_cast(pArgs->GetAt(0)); + + if (__pFontValue == null) + { + return; + } + + if (__pFontSlider != null && __pFontValue != null) + { + __pFontSlider->SetValue(__pFontValue->ToInt()); + } + return; +} + +void +ReaderFontSizeForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + return; +} + +void +ReaderFontSizeForm::OnSliderBarMoved(Tizen::Ui::Controls::Slider& source, int value) +{ + *__pFontValue = value; + return; +} + +void +ReaderFontSizeForm::OnFormBackRequested(Form& source) +{ + result r = E_FAILURE; + SceneManager* pSceneManager = SceneManager::GetInstance(); + ArrayList *pArgList = new(std::nothrow) ArrayList(); + + if (pArgList != null) + { + r = pArgList->Construct(); + TryCatch(!IsFailed(r),,"OnFormBackRequested failed with %s",GetErrorMessage(r)); + + SettingPresentationModel::GetInstance()->SetReaderFontSize(__pFontValue->ToInt()); + TryCatch(!IsFailed(r),,"OnFormBackRequested failed with %s",GetErrorMessage(r)); + + if (pSceneManager != null) + { + r = pSceneManager->GoBackward(BackwardSceneTransition()); + TryCatch(!IsFailed(r), "ReaderFontSizeForm::OnFormBackRequested Failed to GoBackward %s",GetErrorMessage(r)); + } + } + + CATCH: + + if( pArgList != NULL) + { + delete pArgList; + } + + return; +} + +void +ReaderFontSizeForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId) +{ + +} diff --git a/src/IntSceneRegister.cpp b/src/IntSceneRegister.cpp new file mode 100644 index 0000000..bd0dab1 --- /dev/null +++ b/src/IntSceneRegister.cpp @@ -0,0 +1,128 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntSceneRegister.cpp + *@brief: This header file contains the declarations of the %lsceneRegister class. + * + */ + +#include + +#include "IntSceneRegister.h" +#include "IntFormFactory.h" + +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Ui::Scenes; + +const wchar_t* IDSCN_MAIN_VIEW = L"ScnMainMenu"; +const wchar_t* IDSCN_BOOKMARK_VIEW = L"ScnBookmark"; +const wchar_t* IDSCN_HISTORY_LIST = L"ScnHistory"; +const wchar_t* IDSCN_FIND_WORD = L"ScnFindWord"; +const wchar_t* IDSCN_EDIT_HISTORY_LIST = L"ScnEditHistory"; +const wchar_t* IDSCN_SETTINGS_CLEAR_PRIVATE_DATA = L"ScnSettingsClearPrivateData"; +const wchar_t* IDSCN_MULTIPLE_WINDOW = L"ScnMultipleWindow"; +const wchar_t* IDSCN_MULTIPLE_WINDOW_GRID = L"ScnMultipleWindowGrid"; +const wchar_t* IDSCN_SETTINGS = L"ScnSettings"; +const wchar_t* IDSCN_ADD_BOOKMARK = L"ScnAddBookmark"; +const wchar_t* IDSCN_ARTICLE_READER = L"ScnArticleReader"; +const wchar_t* IDSCN_EDIT_BOOKMARK_LIST = L"ScnEditBookmarkList"; +const wchar_t* IDSCN_CREATE_BOOKMARK_FOLDER = L"ScnCreateBookmarkFolder"; +const wchar_t* IDSCN_FONT_SIZE = L"ScnFontSize"; +const wchar_t* IDSCN_EDIT_HOMEPAGE_VIEW = L"ScnEditHomePage"; +const wchar_t* IDSCN_BRIGHTNESS = L"ScnBrightness"; + +SceneRegister::SceneRegister(void) +{ + +} + +SceneRegister::~SceneRegister(void) +{ + +} + +void +SceneRegister::RegisterAllScenes(void) +{ + static const wchar_t* PANEL_BLANK = L""; + static FormFactory formFactory; + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager == null) + { + return; + } + pSceneManager->RegisterFormFactory(formFactory); + + pSceneManager->RegisterScene(IDSCN_BOOKMARK_VIEW, IDL_FORM_BOOKMARK_LIST_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_HISTORY_LIST, IDL_FORM_HISTORY_LIST_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_FIND_WORD, IDL_FORM_FIND_WORD_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_EDIT_HISTORY_LIST, IDL_FORM_EDIT_HISTORY_LIST_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_SETTINGS_CLEAR_PRIVATE_DATA, IDL_FORM_SETTINGS_CLEAR_PRIVATE_DATA_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_MULTIPLE_WINDOW, IDL_FORM_MULTIPLE_WINDOW_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_SETTINGS, IDL_FORM_SETTINGS_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_ADD_BOOKMARK, IDL_FORM_ADD_BOOKMARK_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_ARTICLE_READER, IDL_FORM_ARTICLE_READER_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_EDIT_BOOKMARK_LIST, IDL_FORM_EDIT_BOOKMARK_LIST_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_CREATE_BOOKMARK_FOLDER, IDL_FORM_CREATE_BOOKMARK_FOLDER_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_FONT_SIZE, IDL_FORM_FONT_SIZE_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_EDIT_HOMEPAGE_VIEW, IDL_FORM_EDIT_HOME_PAGE_SCENE, PANEL_BLANK); + pSceneManager->RegisterScene(IDSCN_BRIGHTNESS, IDL_FORM_BRIGHTNESS_SCENE, PANEL_BLANK); + +} + +result +SceneRegister::RegisterNewMainView(const Tizen::Base::String& sceneID, const Tizen::Base::String& FormID) +{ + result r = E_SUCCESS; + static const wchar_t* PANEL_BLANK = L""; + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager == null) + { + return E_FAILURE; + } + + r = pSceneManager->RegisterScene(sceneID, FormID, PANEL_BLANK); + + if (GetLastResult() != E_SUCCESS) + { + AppLogDebug("fail Not registered"); + } + else + { + AppLogDebug("success registered"); + } + return r; +} + +result +SceneRegister::DestroyAndUnRegisterScene(const String& sceneID) +{ + result r = E_SUCCESS; + SceneManager* pSceneManager = SceneManager::GetInstance(); + + if (pSceneManager == null) + { + return E_FAILURE; + } + pSceneManager->UnregisterScene(sceneID); + pSceneManager->DestroyScene(sceneID); + return r; +} diff --git a/src/IntSettingClearPrivateDataForm.cpp b/src/IntSettingClearPrivateDataForm.cpp new file mode 100644 index 0000000..22e9c80 --- /dev/null +++ b/src/IntSettingClearPrivateDataForm.cpp @@ -0,0 +1,338 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet SettingsClearPrivateDataForm class +/*@file: IntSettingsClearPrivateDataForm.cpp + *@brief: The SettingsClearPrivateDataForm used to create private data scene + * + */ + +#include +#include +#include "IntSettingClearPrivateDataForm.h" +#include "IntSceneRegister.h" +#include "IntHistoryPresentationModel.h" +#include "IntSettingPresentationModel.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + +const int SettingsClearPrivateDataForm::IDA_FORMAT_TITLE_STRING = 101; +const int SettingsClearPrivateDataForm::IDA_BUTTON_DELETE = 102; +const int SettingsClearPrivateDataForm::IDA_BUTTON_CANCEL = 103; + +SettingsClearPrivateDataForm::SettingsClearPrivateDataForm() + : __pList(null) + , __clearItem(5) +{ +} + +SettingsClearPrivateDataForm::~SettingsClearPrivateDataForm() +{ +} + +bool +SettingsClearPrivateDataForm::Initialize(void) +{ + Construct(L"IDL_SETTINGS_CLEAR_PRIVATE_DATA"); + //SetBackgroundColor(Color::GetColor(COLOR_ID_BLACK)); + return true; +} + +result +SettingsClearPrivateDataForm::OnInitializing(void) +{ + result r = E_SUCCESS; + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return E_FAILURE; + } + + Footer* pFooter = GetFooter(); + + if ( pFooter == null) + { + return E_FAILURE; + } + FooterItem deleteButton; + FooterItem cancelButton; + + SetFormStyle(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR | FORM_STYLE_HEADER | FORM_STYLE_FOOTER); + + r = pSceneManager->AddSceneEventListener(IDSCN_SETTINGS_CLEAR_PRIVATE_DATA, *this); + + // Setup back event listener + SetFormBackEventListener(this); + pFooter->AddActionEventListener(*this); + + __pList = static_cast< ListView* >(GetControl(L"IDC_CLEAR_LISTVIEW")); + if (__pList != null) + { + __pList->SetItemProvider(*this); + __pList->AddListViewItemEventListener(*this); + } + + AddOrientationEventListener(*this); + + pFooter->SetStyle(FOOTER_STYLE_BUTTON_ICON); + deleteButton.Construct(IDA_BUTTON_DELETE); + deleteButton.SetText(L"Delete"); + + pFooter->AddItem(deleteButton); + cancelButton.Construct(IDA_BUTTON_CANCEL); + cancelButton.SetText(L"Cancel"); + + pFooter->AddItem(cancelButton); + pFooter->SetItemEnabled(0, false); + return r; +} + +result +SettingsClearPrivateDataForm::OnTerminating(void) +{ + result r = E_SUCCESS; + return r; +} + +void +SettingsClearPrivateDataForm::OnActionPerformed(const Control& source, int actionId) +{ + Footer* pFooter = GetFooter(); + if ( pFooter == NULL ) + { + return; + } + + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return; + } + switch (actionId) + { + case IDA_BUTTON_DELETE: + { + AppLog("Delete button is called"); + if (__pList) + { + if (__pList->IsItemChecked(0) || __pList->IsItemChecked(1) || __pList->IsItemChecked(2) || __pList->IsItemChecked(3) || __pList->IsItemChecked(4)) + { + pFooter->SetItemEnabled(0, true); + pFooter->Invalidate(true); + + // Delete the specific index setting + if (__pList->IsItemChecked(0) == true) + { + // clear all private data + AppLog("Clear all private data"); + HistoryPresentationModel::GetInstance()->ClearHistory(); + SettingPresentationModel::GetInstance()->ClearCache(); + SettingPresentationModel::GetInstance()->ClearCookie(); + } + if (__pList->IsItemChecked(1) == true) + { + // clear History + AppLog("Clear all History data"); + HistoryPresentationModel::GetInstance()->ClearHistory(); + } + if (__pList->IsItemChecked(2) == true) + { + // clear cache + AppLog("Clear all cache data"); + SettingPresentationModel::GetInstance()->ClearCache(); + } + if (__pList->IsItemChecked(3) == true) + { + // clear cookie + AppLog("Clear all cookie data"); + SettingPresentationModel::GetInstance()->ClearCookie(); + } + else if (__pList->IsItemChecked(4) == true) + { + // clear saved ID and password + AppLog("Clear saved ID and password"); + } + } + else + { + pFooter->SetItemEnabled(0, false); + pFooter->Invalidate(true); + } + } + SceneManager::GetInstance()->GoBackward(BackwardSceneTransition()); + } + break; + + case IDA_BUTTON_CANCEL: + { + AppLog("cancel button is called"); + SceneManager::GetInstance()->GoBackward(BackwardSceneTransition()); + } + break; + + default: + break; + } +} + +void +SettingsClearPrivateDataForm::OnFormBackRequested(Form& source) +{ + SceneManager* pSceneManager = SceneManager::GetInstance(); + if (pSceneManager == null) + { + return; + } + pSceneManager->GoBackward(BackwardSceneTransition(IDSCN_SETTINGS, SCENE_TRANSITION_ANIMATION_TYPE_RIGHT)); +} + +void +SettingsClearPrivateDataForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs) +{ + if (__pList) + { + __pList->UpdateList(); + } + return; +} + +void +SettingsClearPrivateDataForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + return; +} + +void +SettingsClearPrivateDataForm::OnListViewContextItemStateChanged(ListView& listView, int index, int elementId, ListContextItemStatus state) +{ + return; +} + +void +SettingsClearPrivateDataForm::OnListViewItemStateChanged(ListView& listView, int index, int elementId, ListItemStatus status) +{ + + bool checkstatus = __pList->IsItemChecked(index); + + if (index == 0) + { + if (!checkstatus) + { + __pList->SetItemChecked(0, false); + __pList->SetItemChecked(1, false); + __pList->SetItemChecked(2, false); + __pList->SetItemChecked(3, false); + __pList->SetItemChecked(4, false); + } + else + { + __pList->SetItemChecked(0, true); + __pList->SetItemChecked(1, true); + __pList->SetItemChecked(2, true); + __pList->SetItemChecked(3, true); + __pList->SetItemChecked(4, true); + } + } + if (__pList->IsItemChecked(0) || __pList->IsItemChecked(1) || __pList->IsItemChecked(2) || __pList->IsItemChecked(3) || __pList->IsItemChecked(4)) + { + GetFooter()->SetItemEnabled(0, true); + GetFooter()->Invalidate(true); + } + else + { + GetFooter()->SetItemEnabled(0, false); + GetFooter()->Invalidate(true); + } + return; +} + +void +SettingsClearPrivateDataForm::OnListViewItemSwept(ListView& listView, int index, SweepDirection direction) +{ + return; +} + +void +SettingsClearPrivateDataForm::OnListViewItemLongPressed(ListView& listView, int index, int elementId, bool& invokeListViewItemCallback) +{ + return; +} + +ListItemBase* +SettingsClearPrivateDataForm::CreateItem(int index, int itemWidth) +{ + Rectangle pagetTitleRect; + CustomItem* pItem = new(std::nothrow) CustomItem(); + ListAnnexStyle style = LIST_ANNEX_STYLE_MARK; + pItem->Construct(Tizen::Graphics::Dimension(itemWidth, 112), style); + Rectangle screenBounds = GetBounds(); + + pagetTitleRect.SetBounds(screenBounds.x + 15, 38, screenBounds.width - 10, 40); + + if (index == 0) + { + pItem->AddElement(pagetTitleRect, IDA_FORMAT_TITLE_STRING, L"Select all", 38, Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), true); + } + else if (index == 1) + { + pItem->AddElement(pagetTitleRect, IDA_FORMAT_TITLE_STRING, L"History", 38, Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), true); + } + else if (index == 2) + { + pItem->AddElement(pagetTitleRect, IDA_FORMAT_TITLE_STRING, L"Cache", 38, Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), true); + } + else if (index == 3) + { + pItem->AddElement(pagetTitleRect, IDA_FORMAT_TITLE_STRING, L"Cookie", 38, Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), true); + } + else if (index == 4) + { + pItem->AddElement(pagetTitleRect, IDA_FORMAT_TITLE_STRING, L"Saved ID and password", 38, Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), true); + } + + return pItem; +} + +bool +SettingsClearPrivateDataForm::DeleteItem(int index, ListItemBase* pItem, int itemWidth) +{ + delete pItem; + pItem = null; + return true; +} + +int +SettingsClearPrivateDataForm::GetItemCount(void) +{ + return __clearItem; +} + +void +SettingsClearPrivateDataForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus) +{ + if (__pList) + { + __pList->UpdateList(); + } + return; +} diff --git a/src/IntSettingForm.cpp b/src/IntSettingForm.cpp new file mode 100644 index 0000000..c0b5a30 --- /dev/null +++ b/src/IntSettingForm.cpp @@ -0,0 +1,1259 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet SettingForm class +/*@file: IntSettingForm.cpp + *@brief: The SettingForm + */ + +#include +#include +#include + +#include "IntCommonLib.h" +#include "IntConfirmationPopup.h" +#include "IntDefaultCustomItem.h" +#include "IntDropDownCustomItem.h" +#include "IntHistoryPresentationModel.h" +#include "IntInternetApp.h" +#include "IntMultipleWindowPresentationModel.h" +#include "IntNotificationPanel.h" +#include "IntRadioCustomItem.h" +#include "IntSceneRegister.h" +#include "IntSettingForm.h" +#include "IntSettingPresentationModel.h" +#include "IntSettingToggleCustomItem.h" + + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Graphics; +using namespace Tizen::System; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + + + +SettingForm::SettingForm(void) +: __fontValue(0),__pResetPopup(null),__pWindowInfo(null) , __pConfirmationPopup(null),__pNotification(null) +{ + __currentURL = L""; + __pList = null; + InitializeSettingValues(); + __fontSize = 44; +} + +SettingForm::~SettingForm(void) +{ + if (pGroupItemCount) + { + delete[] pGroupItemCount; + pGroupItemCount = null; + } +} + +void +SettingForm::InitializeSettingValues(void) +{ + AppLog("SettingForm::InitializeSettingValues homepage %ls",SettingPresentationModel::GetInstance()->GetHomepage().GetPointer()); + groupCount = 5; + pGroupItemCount = new(std::nothrow) int[5]; + pGroupItemCount[0] = 5; //Homepage + pGroupItemCount[1] = 6; //Page content settings + pGroupItemCount[2] = 9; //Private and Security + pGroupItemCount[3] = 4; //Search + pGroupItemCount[4] = 1; //Website settings and Reset + + for (int iter = (int) SETTING_INVALID + 1; iter < (int) SETTING_MAX; iter++) + { + settingInfo[iter].isSelected = false; + } + + AppLogDebug("image display %d", (int) SettingPresentationModel::GetInstance()->IsDisplayImagesEnabled()); + settingInfo[SETTING_HOMEPAGE_TITLE].titleText = CommonUtil::GetString(L"IDS_BR_BODY_HOMEPAGE"); + settingInfo[SETTING_HOMEPAGE_TITLE].subText = SettingPresentationModel::GetInstance()->GetHomepage(); + settingInfo[SETTING_HOMEPAGE_TITLE].itemType = ITEM_TYPE_DROPDOWN; + + settingInfo[SETTING_CURRENT_PAGE].titleText = CommonUtil::GetString(L"IDS_BR_BODY_CURRENT_PAGE"); + settingInfo[SETTING_CURRENT_PAGE].subText = L""; + settingInfo[SETTING_CURRENT_PAGE].itemType = ITEM_TYPE_RADIO; + + settingInfo[SETTING_BLANK_PAGE].titleText = CommonUtil::GetString(L"IDS_BR_BODY_BLANK_PAGE"); + settingInfo[SETTING_BLANK_PAGE].subText = L""; + settingInfo[SETTING_BLANK_PAGE].itemType = ITEM_TYPE_RADIO; + if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_BLANK_PAGE")) == 0) + { + settingInfo[SETTING_BLANK_PAGE].isSelected = true; + } + + settingInfo[SETTING_MOST_VISITED_SITE].titleText = CommonUtil::GetString(L"IDS_BR_BODY_MOST_VISITED_SITES"); + settingInfo[SETTING_MOST_VISITED_SITE].subText = L""; + settingInfo[SETTING_MOST_VISITED_SITE].itemType = ITEM_TYPE_RADIO; + if (SettingPresentationModel::GetInstance()->GetHomepage().CompareTo((L"IDS_BR_BODY_MOST_VISITED_SITES")) == 0) + { + settingInfo[SETTING_MOST_VISITED_SITE].isSelected = true; + } + WindowInfo* pWindowInfo = null; + String curUrl = SettingPresentationModel::GetInstance()->GetFavoriteUrl(); + AppLog("SettingForm::OnSceneActivatedN check1"); + + settingInfo[SETTING_FAVORITE_URL].titleText = L"http://www.tizen.org"; + if (SettingPresentationModel::GetInstance()->GetFavoriteUrl().CompareTo(L"") == 0) + { + SettingPresentationModel::GetInstance()->SetFavoriteValue(L"http://www.tizen.org"); + } + settingInfo[SETTING_FAVORITE_URL].subText = L""; + settingInfo[SETTING_FAVORITE_URL].itemType = ITEM_TYPE_RADIO; + + String homePage = SettingPresentationModel::GetInstance()->GetHomepage(); + if (homePage.CompareTo((L"IDS_BR_BODY_MOST_VISITED_SITES")) == 0) + { + settingInfo[SETTING_MOST_VISITED_SITE].isSelected = true; + settingInfo[SETTING_BLANK_PAGE].isSelected = false; + settingInfo[SETTING_CURRENT_PAGE].isSelected = false; + settingInfo[SETTING_FAVORITE_URL].isSelected = false; + SettingPresentationModel::GetInstance()->SetHomepage(L"IDS_BR_BODY_MOST_VISITED_SITES"); + } + else if (homePage.CompareTo((L"IDS_BR_BODY_BLANK_PAGE")) == 0) + { + settingInfo[SETTING_MOST_VISITED_SITE].isSelected = false; + settingInfo[SETTING_BLANK_PAGE].isSelected = true; + settingInfo[SETTING_CURRENT_PAGE].isSelected = false; + settingInfo[SETTING_FAVORITE_URL].isSelected = false; + SettingPresentationModel::GetInstance()->SetHomepage(L"IDS_BR_BODY_BLANK_PAGE"); + } + else + { + settingInfo[SETTING_MOST_VISITED_SITE].isSelected = false; + settingInfo[SETTING_BLANK_PAGE].isSelected = false; + settingInfo[SETTING_CURRENT_PAGE].isSelected = false; + settingInfo[SETTING_FAVORITE_URL].isSelected = true; + } + + settingInfo[SETTING_DEFAULT_VIEW_TITLE].titleText = CommonUtil::GetString(L"IDS_BR_BODY_DEFAULT_VIEW"); + settingInfo[SETTING_DEFAULT_VIEW_TITLE].subText = CommonUtil::GetString(SettingPresentationModel::GetInstance()->GetDefaultView()); + settingInfo[SETTING_DEFAULT_VIEW_TITLE].itemType = ITEM_TYPE_DROPDOWN; + + settingInfo[SETTING_FIT_TO_WIDTH].titleText = CommonUtil::GetString(L"IDS_BR_BODY_FIT_TO_WIDTH"); + settingInfo[SETTING_FIT_TO_WIDTH].subText = L""; + settingInfo[SETTING_FIT_TO_WIDTH].itemType = ITEM_TYPE_RADIO; + settingInfo[SETTING_FIT_TO_WIDTH].isSelected = !(String::Compare(settingInfo[SETTING_FIT_TO_WIDTH].titleText, settingInfo[SETTING_DEFAULT_VIEW_TITLE].subText)); + + settingInfo[SETTING_READABLE].titleText = CommonUtil::GetString(L"IDS_BR_BODY_READABLE"); + settingInfo[SETTING_READABLE].subText = L""; + settingInfo[SETTING_READABLE].itemType = ITEM_TYPE_RADIO; + settingInfo[SETTING_READABLE].isSelected = !(String::Compare(settingInfo[SETTING_READABLE].titleText, settingInfo[SETTING_DEFAULT_VIEW_TITLE].subText)); + + settingInfo[SETTING_RUN_JAVASCRIPT].titleText = CommonUtil::GetString(L"IDS_BR_BODY_RUN_JAVASCRIPT"); + settingInfo[SETTING_RUN_JAVASCRIPT].subText = L""; + settingInfo[SETTING_RUN_JAVASCRIPT].itemType = ITEM_TYPE_TOGGLE; + settingInfo[SETTING_RUN_JAVASCRIPT].isSelected = SettingPresentationModel::GetInstance()->IsRunJavascriptEnabled(); + + settingInfo[SETTING_DISPLAY_IMAGES].titleText = CommonUtil::GetString(L"IDS_BR_OPT_LOAD_IMAGES"); + settingInfo[SETTING_DISPLAY_IMAGES].subText = L""; + settingInfo[SETTING_DISPLAY_IMAGES].itemType = ITEM_TYPE_TOGGLE; + settingInfo[SETTING_DISPLAY_IMAGES].isSelected = SettingPresentationModel::GetInstance()->IsDisplayImagesEnabled(); + + settingInfo[SETTING_BLOCK_POPUP].titleText = CommonUtil::GetString(L"IDS_BR_BODY_BLOCK_POP_UPS_ABB"); + settingInfo[SETTING_BLOCK_POPUP].subText = L""; + settingInfo[SETTING_BLOCK_POPUP].itemType = ITEM_TYPE_TOGGLE; + settingInfo[SETTING_BLOCK_POPUP].isSelected = !SettingPresentationModel::GetInstance()->IsBlockPopUp(); + + settingInfo[SETTING_CLEAR_CACHE].titleText = CommonUtil::GetString(L"IDS_BR_BODY_CLEAR_CACHE"); + settingInfo[SETTING_CLEAR_CACHE].subText = L""; + settingInfo[SETTING_CLEAR_CACHE].itemType = ITEM_TYPE_NORMAL; + + settingInfo[SETTING_CLEAR_HISTORY].titleText = CommonUtil::GetString(L"IDS_BR_BODY_CLEAR_HISTORY"); + settingInfo[SETTING_CLEAR_HISTORY].subText = L""; + settingInfo[SETTING_CLEAR_HISTORY].itemType = ITEM_TYPE_NORMAL; + + settingInfo[SETTING_SHOW_SECURITY_WARNINGS].titleText = CommonUtil::GetString(L"IDS_BR_BODY_SHOW_SECURITY_WARNINGS"); + settingInfo[SETTING_SHOW_SECURITY_WARNINGS].subText = L""; + settingInfo[SETTING_SHOW_SECURITY_WARNINGS].itemType = ITEM_TYPE_TOGGLE; + settingInfo[SETTING_SHOW_SECURITY_WARNINGS].isSelected = SettingPresentationModel::GetInstance()->IsSecurityWarningsEnabled(); + + settingInfo[SETTING_ACCEPT_COOKIES].titleText = CommonUtil::GetString(L"IDS_BR_BODY_ACCEPT_COOKIES"); + settingInfo[SETTING_ACCEPT_COOKIES].subText = L""; + settingInfo[SETTING_ACCEPT_COOKIES].itemType = ITEM_TYPE_TOGGLE; + settingInfo[SETTING_ACCEPT_COOKIES].isSelected = SettingPresentationModel::GetInstance()->IsCookiesEnabled(); + + settingInfo[SETTING_CLEAR_COOKIE_DATA].titleText = CommonUtil::GetString(L"IDS_BR_BODY_CLEAR_ALL_COOKIE_DATA"); + settingInfo[SETTING_CLEAR_COOKIE_DATA].subText = CommonUtil::GetString(L"IDS_BR_BODY_COOKIES"); + settingInfo[SETTING_CLEAR_COOKIE_DATA].itemType = ITEM_TYPE_NORMAL; + + settingInfo[SETTING_REMEMBER_FORM_DATA].titleText = CommonUtil::GetString(L"IDS_BR_BODY_REMEMBER_FORM_DATA"); + settingInfo[SETTING_REMEMBER_FORM_DATA].subText = L""; + settingInfo[SETTING_REMEMBER_FORM_DATA].itemType = ITEM_TYPE_TOGGLE; + settingInfo[SETTING_REMEMBER_FORM_DATA].isSelected = SettingPresentationModel::GetInstance()->IsRememberFormData(); + + settingInfo[SETTING_CLEAR_FORM_DATA].titleText = CommonUtil::GetString(L"IDS_BR_BODY_CLEAR_FORM_DATA"); + settingInfo[SETTING_CLEAR_FORM_DATA].subText = CommonUtil::GetString(L"IDS_BR_HEADER_FORM_DATA"); + settingInfo[SETTING_CLEAR_FORM_DATA].itemType = ITEM_TYPE_NORMAL; + + settingInfo[SETTING_REMEMBER_PASSWORD].titleText = CommonUtil::GetString(L"IDS_BR_BODY_REMEMBER_PASSWORDS"); + settingInfo[SETTING_REMEMBER_PASSWORD].subText = L""; + settingInfo[SETTING_REMEMBER_PASSWORD].itemType = ITEM_TYPE_TOGGLE; + settingInfo[SETTING_REMEMBER_PASSWORD].isSelected = SettingPresentationModel::GetInstance()->IsRememberPassword(); + + + settingInfo[SETTING_CLEAR_PASSWORDS].titleText = CommonUtil::GetString(L"IDS_BR_BODY_CLEAR_PASSWORDS"); + settingInfo[SETTING_CLEAR_PASSWORDS].subText = L""; + settingInfo[SETTING_CLEAR_PASSWORDS].itemType = ITEM_TYPE_NORMAL; + + settingInfo[SETTING_SEARCH_ENGINE_TITLE].titleText = CommonUtil::GetString(L"IDS_BR_BODY_SEARCH_ENGINE"); + settingInfo[SETTING_SEARCH_ENGINE_TITLE].subText = SettingPresentationModel::GetInstance()->GetSearchEngine(); + settingInfo[SETTING_SEARCH_ENGINE_TITLE].itemType = ITEM_TYPE_DROPDOWN; + + settingInfo[SETTING_SEARCH_ENGINE_YAHOO].titleText = L"Yahoo"; //CommonUtil::GetString(L"IDS_BR_BODY_YAHOO"); + settingInfo[SETTING_SEARCH_ENGINE_YAHOO].subText = L""; + settingInfo[SETTING_SEARCH_ENGINE_YAHOO].itemType = ITEM_TYPE_RADIO; + settingInfo[SETTING_SEARCH_ENGINE_YAHOO].isSelected = !(String::Compare(settingInfo[SETTING_SEARCH_ENGINE_YAHOO].titleText, settingInfo[SETTING_SEARCH_ENGINE_TITLE].subText)); + + settingInfo[SETTING_SEARCH_ENGINE_NAVER].titleText = L"Naver"; //CommonUtil::GetString(L"IDS_BR_BODY_NAVER"); + settingInfo[SETTING_SEARCH_ENGINE_NAVER].subText = L""; + settingInfo[SETTING_SEARCH_ENGINE_NAVER].itemType = ITEM_TYPE_RADIO; + settingInfo[SETTING_SEARCH_ENGINE_NAVER].isSelected = !(String::Compare(settingInfo[SETTING_SEARCH_ENGINE_NAVER].titleText, settingInfo[SETTING_SEARCH_ENGINE_TITLE].subText)); + + settingInfo[SETTING_SEARCH_ENGINE_GOOGLE].titleText = L"Google";//CommonUtil::GetString(L"IDS_COM_BODY_GOOGLE"); + settingInfo[SETTING_SEARCH_ENGINE_GOOGLE].subText = L""; + settingInfo[SETTING_SEARCH_ENGINE_GOOGLE].itemType = ITEM_TYPE_RADIO; + settingInfo[SETTING_SEARCH_ENGINE_GOOGLE].isSelected = !(String::Compare(settingInfo[SETTING_SEARCH_ENGINE_GOOGLE].titleText, settingInfo[SETTING_SEARCH_ENGINE_TITLE].subText)); + + settingInfo[SETTING_RESET_TO_DEFAULT].titleText = CommonUtil::GetString(L"IDS_BR_BODY_RESET_TO_DEFAULT"); + settingInfo[SETTING_RESET_TO_DEFAULT].subText = L""; + settingInfo[SETTING_RESET_TO_DEFAULT].itemType = ITEM_TYPE_NORMAL; +} + +bool +SettingForm::Initialize(void) +{ + result r = E_FAILURE; + + r = Construct(L"IDL_SETTING_FORM"); + if (IsFailed(r)) + { + return false; + } + return true; +} + +result +SettingForm::OnInitializing(void) +{ + result r = E_FAILURE; + Footer* pFooter = NULL; + SceneManager* pSceneManager = NULL; + + __fontSize = CommonUtil::GetFontSize(); + + bool isHwKeySupported = false; + + //SetFormStyle(FORM_STYLE_NORMAL | FORM_STYLE_INDICATOR); + __pList = static_cast< GroupedListView* >(GetControl(L"IDC_SETTING_LIST")); + if ( __pList != NULL ) + { + + r = __pList->SetItemProvider(*this); + TryCatch(!IsFailed(r),,"setItemProvider failed with error %s",GetErrorMessage(r)); + __pList->AddGroupedListViewItemEventListener(*this); + } + +// pFooter = GetFooter(); +// if (pFooter) +// { +// AppLogDebug("setting back button"); +// pFooter->SetBackButtonEnabled(true); +// } + SetFormBackEventListener(this); + AppLog("SetFormBackEventListener result %s",GetErrorMessage(GetLastResult())); + pSceneManager = SceneManager::GetInstance(); + if (pSceneManager != null) + { + r = pSceneManager->AddSceneEventListener(IDSCN_SETTINGS, *this); + TryCatch(!IsFailed(r),,"AddSceneEventListener failed with error %s",GetErrorMessage(r)); + } + AddOrientationEventListener(*this); + + CATCH: + return r; +} + +void +SettingForm::OnGroupedListViewContextItemStateChanged(GroupedListView& listView, int groupIndex, int itemIndex, int elementId, ListContextItemStatus status) +{ + +} + +void +SettingForm::OnGroupedListViewItemStateChanged(GroupedListView& listView, int groupIndex, int itemIndex, int elementId, ListItemStatus status) +{ + int effectiveIndex = 0; + SettingPresentationModel* pSettingMgr = SettingPresentationModel::GetInstance(); + + if (pSettingMgr == null) + return; + + for (int i = 0; i < groupIndex; i++) + effectiveIndex = effectiveIndex + pGroupItemCount[i]; + effectiveIndex = effectiveIndex + itemIndex; + + if (settingInfo[effectiveIndex].itemType == ITEM_TYPE_DROPDOWN) + { + AppLogDebug("refreshing data child count is %d", settingInfo[effectiveIndex].childCount); + if (settingInfo[effectiveIndex].isOpen == false) + { + settingInfo[effectiveIndex].isOpen = true; + settingInfo[effectiveIndex].childCount = 0; + for (int iter = effectiveIndex + 1; iter < SETTING_MAX; iter++) + { + if (settingInfo[iter].itemType == ITEM_TYPE_RADIO) + settingInfo[effectiveIndex].childCount++; + else + break; + } +/* + listView.RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + for(int iter = 0; iter < settingInfo[effectiveIndex].childCount; iter++) + { + listView.RefreshList(groupIndex, itemIndex + iter + 1, LIST_REFRESH_TYPE_ITEM_MODIFY); + } +*/ + listView.UpdateList(); + } + else + { + settingInfo[effectiveIndex].isOpen = false; +/* + listView.RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + for(int iter = 0; iter < settingInfo[effectiveIndex].childCount; iter++) + { + listView.RefreshList(groupIndex, itemIndex + iter + 1, LIST_REFRESH_TYPE_ITEM_MODIFY); + } +*/ + listView.UpdateList(); + } + } + else if (settingInfo[effectiveIndex].itemType == ITEM_TYPE_RADIO) + { + + switch (effectiveIndex) + { + case SETTING_CURRENT_PAGE: + //SettingPresentationModel::GetInstance()->SetHomepage(settingInfo[SETTING_FAVORITE_URL].titleText); + AppLog("setting current page currentURL is =%ls",__currentURL.GetPointer()); + if (__currentURL.CompareTo(L"") != 0) + { + AppLog("setting current page currentURL is =%ls",__currentURL.GetPointer()); + SettingPresentationModel::GetInstance()->SetHomepage(CommonUtil::GetString(L"IDS_BR_BODY_USER_HOMEPAGE")); + SettingPresentationModel::GetInstance()->SetFavoriteValue(__currentURL); + settingInfo[SETTING_FAVORITE_URL].titleText = __currentURL; + // listView.RefreshList(groupIndex, effectiveIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + // listView.RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + // listView.UpdateList(); + } + break; + case SETTING_BLANK_PAGE: + //SettingPresentationModel::GetInstance()->SetHomepage(settingInfo[SETTING_BLANK_PAGE].titleText); + SettingPresentationModel::GetInstance()->SetHomepage((L"IDS_BR_BODY_BLANK_PAGE")); + AppLog("GetHomepage() %ls",SettingPresentationModel::GetInstance()->GetHomepage().GetPointer()); + // listView.RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + // listView.UpdateList(); + + break; + case SETTING_MOST_VISITED_SITE: + SettingPresentationModel::GetInstance()->SetHomepage(L"IDS_BR_BODY_MOST_VISITED_SITES"); + // listView.RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + // listView.UpdateList(); + break; + + case SETTING_FAVORITE_URL: + //SettingPresentationModel::GetInstance()->SetHomepage(settingInfo[SETTING_FAVORITE_URL].titleText); + SceneManager::GetInstance()->GoForward(ForwardSceneTransition(IDSCN_EDIT_HOMEPAGE_VIEW, SCENE_TRANSITION_ANIMATION_TYPE_LEFT)); + break; + + case SETTING_FIT_TO_WIDTH: + SettingPresentationModel::GetInstance()->SetDefaultView(L"IDS_BR_BODY_FIT_TO_WIDTH"); + // listView.RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + // listView.UpdateList(); + break; + + case SETTING_READABLE: + SettingPresentationModel::GetInstance()->SetDefaultView(L"IDS_BR_BODY_READABLE"); + // listView.RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + // listView.UpdateList(); + break; + + case SETTING_SEARCH_ENGINE_YAHOO: + SettingPresentationModel::GetInstance()->SetSearchEngine(settingInfo[SETTING_SEARCH_ENGINE_YAHOO].titleText); + // listView.RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + // listView.UpdateList(); + break; + + case SETTING_SEARCH_ENGINE_NAVER: + SettingPresentationModel::GetInstance()->SetSearchEngine(settingInfo[SETTING_SEARCH_ENGINE_NAVER].titleText); + // listView.RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + // listView.UpdateList(); + break; + + case SETTING_SEARCH_ENGINE_GOOGLE: + SettingPresentationModel::GetInstance()->SetSearchEngine(settingInfo[SETTING_SEARCH_ENGINE_GOOGLE].titleText); + // listView.RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + // listView.UpdateList(); + break; + + + } + + int parentIndex = 0; + for (parentIndex = effectiveIndex; parentIndex > SETTING_INVALID; parentIndex--) + { + if (settingInfo[parentIndex].itemType == ITEM_TYPE_DROPDOWN) + break; + } + settingInfo[parentIndex].subText = settingInfo[effectiveIndex].titleText; + + listView.RefreshList(groupIndex, itemIndex - (effectiveIndex - parentIndex), LIST_REFRESH_TYPE_ITEM_MODIFY); + listView.RefreshList(groupIndex, parentIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + for (int iter = 0; iter < settingInfo[parentIndex].childCount; iter++) + { + if (parentIndex + iter + 1 != effectiveIndex) + { + AppLogDebug("long effectiveIndex %d set to false", itemIndex - (effectiveIndex - parentIndex) + iter + 1); + settingInfo[parentIndex + iter + 1].isSelected = false; + } + else + { + AppLogDebug("effectiveIndex %d set to true", effectiveIndex); + settingInfo[effectiveIndex].isSelected = true; + } + if (effectiveIndex == SETTING_CURRENT_PAGE) + { + settingInfo[SETTING_CURRENT_PAGE].isSelected = false; + settingInfo[SETTING_FAVORITE_URL].isSelected = true; + } + listView.RefreshList(groupIndex, itemIndex - (effectiveIndex - parentIndex) + iter + 1, LIST_REFRESH_TYPE_ITEM_MODIFY); + } +// listView.UpdateList(); + //listView.ScrollToItem(groupIndex, itemIndex, LIST_SCROLL_ITEM_ALIGNMENT_TOP); + Invalidate(true); + } + else if (settingInfo[effectiveIndex].itemType == ITEM_TYPE_TOGGLE) + { + if (settingInfo[effectiveIndex].isSelected == true) + { + settingInfo[effectiveIndex].isSelected = false; + } + else + { + settingInfo[effectiveIndex].isSelected = true; + } +// listView.RefreshList(groupIndex, itemIndex, LIST_REFRESH_TYPE_ITEM_MODIFY); + if(__pList != null) + { + __pList->SetItemChecked(groupIndex, itemIndex, settingInfo[effectiveIndex].isSelected); + } + } + + switch (effectiveIndex) + { + + case SETTING_RUN_JAVASCRIPT: + SettingPresentationModel::GetInstance()->SetRunJavascriptEnabled(settingInfo[SETTING_RUN_JAVASCRIPT].isSelected); + break; + + case SETTING_DISPLAY_IMAGES: + SettingPresentationModel::GetInstance()->SetDisplayImagesEnabled(settingInfo[SETTING_DISPLAY_IMAGES].isSelected); + break; + + case SETTING_BLOCK_POPUP: + SettingPresentationModel::GetInstance()->SetBlockPopUp(!settingInfo[SETTING_BLOCK_POPUP].isSelected); + break; + + case SETTING_CLEAR_CACHE: + ClearCache(); + break; + + case SETTING_CLEAR_HISTORY: + ClearHistory(); + break; + + case SETTING_SHOW_SECURITY_WARNINGS: + SettingPresentationModel::GetInstance()->SetSecurityWarningsEnabled(settingInfo[SETTING_SHOW_SECURITY_WARNINGS].isSelected); + break; + + case SETTING_ACCEPT_COOKIES: + SettingPresentationModel::GetInstance()->SetCookiesEnabled(settingInfo[SETTING_ACCEPT_COOKIES].isSelected); + break; + + case SETTING_CLEAR_COOKIE_DATA: + ClearCookie(); + break; + + case SETTING_REMEMBER_FORM_DATA: + SettingPresentationModel::GetInstance()->SetRememberFormData(settingInfo[SETTING_REMEMBER_FORM_DATA].isSelected); + break; + + case SETTING_CLEAR_FORM_DATA: + ClearFormData(); + break; + + case SETTING_CLEAR_PASSWORDS: + ClearPasswords(); + break; + + case SETTING_REMEMBER_PASSWORD: + SettingPresentationModel::GetInstance()->SetRememberPassword(settingInfo[SETTING_REMEMBER_PASSWORD].isSelected); + break; + + + case SETTING_RESET_TO_DEFAULT: + //OpenResetPopup(); + ResetToDefault(); + break; + + default: + break; + } +} + +void +SettingForm::OnGroupedListViewItemSwept(GroupedListView& listView, int groupIndex, int itemIndex, SweepDirection direction) +{ + +} + +GroupItem* +SettingForm::CreateGroupItem(int groupIndex, int itemWidth) +{ + result r = E_FAILURE; + String text(L""); + GroupItem* pItem = null; + const Color ITEM_TEXT_COLOR = CUSTOM_COLOR_SETTINGS_GROUPTITLE; + + pItem = new(std::nothrow) GroupItem(); + if (pItem == null) + { + return null; + } + r = pItem->Construct(Dimension(itemWidth, 76)); + if (IsFailed(r)) + { + delete pItem; + return null; + } + + switch (groupIndex) + { + case 0: + text = CommonUtil::GetString(L"IDS_BR_BODY_HOMEPAGE"); // IDS_HOMEPAGE + settingInfo[SETTING_HOMEPAGE_TITLE].subText = SettingPresentationModel::GetInstance()->GetHomepage(); + break; + + case 1: + text = CommonUtil::GetString(L"IDS_BR_MBODY_PAGE_CONTENT_SETTINGS"); // IDS_BR_MBODY_PAGE_CONTENT_SETTINGS + break; + + case 2: + text = CommonUtil::GetString(L"IDS_BR_BODY_PRIVACY_AND_SECURITY_ABB"); // IDS_BR_BODY_PRIVACY_AND_SECURITY_ABB + break; + + case 3: + text = CommonUtil::GetString(L"IDS_BR_BODY_SEARCH"); // IDS_BR_BODY_SEARCH + break; + + case 4: + text = L" "; + __pList->SetItemEnabled(groupIndex,-1,false); + break; + + default: + break; + } + + pItem->SetElement(text, null); + + AppLogDebug("background color set result %s", GetErrorMessage(r)); + + pItem->SetTextColor(ITEM_TEXT_COLOR); + return pItem; +} + +ListItemBase* +SettingForm::CreateItem(int groupIndex, int itemIndex, int itemWidth) +{ + AppLog("SettingForm::CreateItem --> groupIndex : %d, itemIndex: %d itemWidth: %d ", groupIndex, itemIndex, itemWidth); + + result r = E_SUCCESS; + int effectiveIndex = 0; + const Color ITEM_BACKGROUND_COLOR = CUSTOM_COLOR_SETTINGS_LISTITEM_BACKGROUND; + const Color ITEM_RADIO_ITEM_BACKGROUND_COLOR = CUSTOM_COLOR_SETTINGS_LISTITEM_RADIO_BACKGROUND; + const Color ITEM_BACKGROUND_COLOR_HIGHLIGHTED = CUSTOM_BACKGROUND_COLOR_LISTVIEW_PRESSED_HIGHLIGHTED; + + for (int i = 0; i < groupIndex; i++) + effectiveIndex = effectiveIndex + pGroupItemCount[i]; + effectiveIndex = effectiveIndex + itemIndex; + AppLogDebug("SettingForm::CreateItem --> groupIndex : %d, itemIndex: %d itemWidth: %d effectiveIndex %d", groupIndex, itemIndex, itemWidth, effectiveIndex); + + if (settingInfo[effectiveIndex].itemType == ITEM_TYPE_TOGGLE) + { + SettingToggleCustomItem* pItem = new(std::nothrow) SettingToggleCustomItem(); + r = pItem->Construct(itemWidth, 112 + (__fontSize - 44)); + if (IsFailed(r)) + { + delete pItem; + return null; + } + + pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL,ITEM_BACKGROUND_COLOR); + pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED,ITEM_BACKGROUND_COLOR_HIGHLIGHTED); +// if(__pList != null) +// { +// __pList->SetItemChecked(groupIndex, itemIndex, settingInfo[effectiveIndex].isSelected); +// } + + ArrayList *pList = new(std::nothrow) ArrayList(); + pList->Construct(); + Integer *pGroupIndex = new Integer(groupIndex); + Integer *pItemIndex = new Integer(itemIndex); + pList->Add(pGroupIndex); + pList->Add(pItemIndex); + AppLog("sending event UPDATE_LIST_COMPLETE"); + SendUserEvent(UPDATE_LIST_COMPLETE,pList); + + pItem->SetText(settingInfo[effectiveIndex].titleText); + pItem->Make(); + + return pItem; + + } + else if (settingInfo[effectiveIndex].itemType == ITEM_TYPE_DROPDOWN) + { + DropDownCustomItem* pItem = new(std::nothrow) DropDownCustomItem(); + r = pItem->Construct(itemWidth); + if (IsFailed(r)) + { + delete pItem; + return null; + } + +/* Bitmap* pNormalBackgroundBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_LIST_GROUP_BG9,itemWidth,128); + Bitmap* pPressedBackgroundBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_LIST_GROUP_BG_PRESS9,itemWidth,112); + + if (pNormalBackgroundBitmap != NULL) + { + pItem->SetBackgroundBitmap(LIST_ITEM_DRAWING_STATUS_NORMAL,pNormalBackgroundBitmap); + delete pNormalBackgroundBitmap; + } + + if (pPressedBackgroundBitmap != NULL) + { + pItem->SetBackgroundBitmap(LIST_ITEM_DRAWING_STATUS_PRESSED,pPressedBackgroundBitmap); + delete pPressedBackgroundBitmap; + }*/ + + pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL,ITEM_BACKGROUND_COLOR); + pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED,ITEM_BACKGROUND_COLOR_HIGHLIGHTED); + + pItem->SetMainText(settingInfo[effectiveIndex].titleText); + if(settingInfo[effectiveIndex].subText.CompareTo(L"IDS_BR_BODY_BLANK_PAGE") == 0 || settingInfo[effectiveIndex].subText.CompareTo(L"IDS_BR_BODY_MOST_VISITED_SITES") == 0 || settingInfo[effectiveIndex].subText.CompareTo(L"IDS_BR_BODY_FIT_TO_WIDTH") == 0 || settingInfo[effectiveIndex].subText.CompareTo(L"IDS_BR_BODY_READABLE") == 0) + { + pItem->SetSubText(CommonUtil::GetString(settingInfo[effectiveIndex].subText)); + } + else + { + pItem->SetSubText(settingInfo[effectiveIndex].subText); + } + if (settingInfo[effectiveIndex].isOpen) + { + pItem->SetCurState(DROP_DOWN_ITEM_STATE_OPENED); + } + else + { + pItem->SetCurState(DROP_DOWN__ITEM_STATE_CLOSED); + } + r = pItem->Make(); + // if (pBitmap != null) + // pItem->AddElement(Rectangle(0, 0, 10, 128), IDA_LIST_LEFT_SIDE_MARGIN_DROPDOWN, *pBitmap, null); + + if (IsFailed(r)) + { + delete pItem; + return null; + } + + return pItem; + } + else if (settingInfo[effectiveIndex].itemType == ITEM_TYPE_RADIO) + { + RadioCustomItem* pItem = new(std::nothrow) RadioCustomItem(); + int parentIndex = 0; + for (parentIndex = effectiveIndex; parentIndex > SETTING_INVALID; parentIndex--) + { + if (settingInfo[parentIndex].itemType == ITEM_TYPE_DROPDOWN) + break; + } + if (settingInfo[parentIndex].isOpen == false || (__isCurrentPageDisable == true && groupIndex == 0 && itemIndex == 1)) + { + r = pItem->Construct(itemWidth, 0); + __pList->SetItemEnabled(groupIndex,itemIndex,false); + AppLogDebug("construct with height 0 %s", GetErrorMessage(r)); + return pItem; + } + else + { + __pList->SetItemEnabled(groupIndex,itemIndex,true); + pItem->Construct(itemWidth, 112 + (__fontSize - 44)); + } +/* + Bitmap* pNormalBackgroundBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_LIST_GROUP_BG9,itemWidth,112); + Bitmap* pPressedBackgroundBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_LIST_GROUP_BG_PRESS9,itemWidth,112); + + if (pNormalBackgroundBitmap != NULL) + { + pItem->SetBackgroundBitmap(LIST_ITEM_DRAWING_STATUS_NORMAL,pNormalBackgroundBitmap); + delete pNormalBackgroundBitmap; + } + + if (pPressedBackgroundBitmap != NULL) + { + pItem->SetBackgroundBitmap(LIST_ITEM_DRAWING_STATUS_PRESSED,pPressedBackgroundBitmap); + delete pPressedBackgroundBitmap; + }*/ + + pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL,ITEM_RADIO_ITEM_BACKGROUND_COLOR); + pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED,ITEM_BACKGROUND_COLOR_HIGHLIGHTED); + + + pItem->SetText(settingInfo[effectiveIndex].titleText); + AppLogDebug("effectiveIndex %d SettingInfo[effectiveIndex].isSelected %d", effectiveIndex, settingInfo[effectiveIndex].isSelected); + + //if (pBitmap != null) + // pItem->AddElement(Rectangle(0, 0, 10, 112), IDA_LIST_LEFT_SIDE_MARGIN, *pBitmap, null); + +// pItem->SetSelected(settingInfo[effectiveIndex].isSelected); +// __pList->SetItemChecked(groupIndex,itemIndex,settingInfo[effectiveIndex].isSelected); + ArrayList *pList = new(std::nothrow) ArrayList(); + pList->Construct(); + Integer *pGroupIndex = new Integer(groupIndex); + Integer *pItemIndex = new Integer(itemIndex); + pList->Add(pGroupIndex); + pList->Add(pItemIndex); + AppLog("sending event UPDATE_LIST_COMPLETE"); + SendUserEvent(UPDATE_LIST_COMPLETE,pList); + pItem->Make(); + + return pItem; + } + else if (settingInfo[effectiveIndex].itemType == ITEM_TYPE_NORMAL) + { + DefaultCustomItem* pItem = new(std::nothrow) DefaultCustomItem(); + + r = pItem->Construct(itemWidth, 112 + (__fontSize - 44)); + if (IsFailed(r)) + { + delete pItem; + return null; + } + + +// Bitmap* pNormalBackgroundBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_LIST_GROUP_BG9,itemWidth,112); +// Bitmap* pPressedBackgroundBitmap = CommonUtil::GetNinepatchedBitmapN(IDB_LIST_GROUP_BG_PRESS9,itemWidth,112); +// +// if (pNormalBackgroundBitmap != NULL) +// { +// pItem->SetBackgroundBitmap(LIST_ITEM_DRAWING_STATUS_NORMAL,pNormalBackgroundBitmap); +// delete pNormalBackgroundBitmap; +// } +// +// if (pPressedBackgroundBitmap != NULL) +// { +// pItem->SetBackgroundBitmap(LIST_ITEM_DRAWING_STATUS_PRESSED,pPressedBackgroundBitmap); +// delete pPressedBackgroundBitmap; +// } + + pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL,ITEM_BACKGROUND_COLOR); + pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED,ITEM_BACKGROUND_COLOR_HIGHLIGHTED); + + + pItem->SetText(settingInfo[effectiveIndex].titleText); + + //if (pBitmap != null) + // pItem->AddElement(Rectangle(0, 0, 10, 112), IDA_LIST_LEFT_SIDE_MARGIN, *pBitmap, null); + + r = pItem->Make(); + if (IsFailed(r)) + { + delete pItem; + return null; + } + return pItem; + } + else + { + return null; + } +} + +bool +SettingForm::DeleteGroupItem(int groupIndex, GroupItem* pItem, int itemWidth) +{ + delete pItem; + pItem = null; + return true; +} + +bool +SettingForm::DeleteItem(int groupIndex, int itemIndex, ListItemBase* pItem, int itemWidth) +{ + delete pItem; + pItem = null; + return true; +} + +int +SettingForm::GetGroupCount(void) +{ + return groupCount; +} + +int +SettingForm::GetItemCount(int groupIndex) +{ + AppLog(" SettingForm::GetItemCount --> groupIndex : %d,", groupIndex); + return pGroupItemCount[groupIndex]; +} + +void +SettingForm::OnFormBackRequested(Form& source) +{ + AppLog("SettingForm::OnFormBackRequested entered"); + String* pSelectedScene = NULL; + Object* value = NULL; + MultipleWindowPresentationModel::GetInstance()->GetValue(SELECTED_SCENE_ID, &value); + pSelectedScene = (String*) value; + if (pSelectedScene) + { + SceneManager::GetInstance()->GoBackward(BackwardSceneTransition(*pSelectedScene, SCENE_TRANSITION_ANIMATION_TYPE_NONE)); +// delete pSelectedScene; +// pSelectedScene = null; + } +} + +void +SettingForm::OnActionPerformed(const Control& source, int actionId) +{ + switch (actionId) + { + case IDA_BUTTON_NO: + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + break; + + case IDA_BUTTON_YES: + if(__pConfirmationPopup) + { + String message = L""; + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + if (__pConfirmationPopup->GetMessage() == CommonUtil::GetString(L"IDS_BR_POP_EMPTY_COOKIE_POPUP_BNO")) + { + message = CommonUtil::GetString(L"IDS_BR_POP_DELETED"); + SettingPresentationModel::GetInstance()->ClearCookie(); + } + else if (__pConfirmationPopup->GetMessage() == CommonUtil::GetString(L"IDS_BR_POP_DELETE_ALL_SAVED_FORM_DATA_Q")) + { + message = CommonUtil::GetString(L"IDS_BR_POP_DELETED"); + SettingPresentationModel::GetInstance()->ClearFormData(); + } + else if (__pConfirmationPopup->GetMessage() == CommonUtil::GetString(L"IDS_BR_POP_DELETE_ALL_SAVED_PASSWORDS_Q")) + { + message = CommonUtil::GetString(L"IDS_BR_POP_DELETED"); + SettingPresentationModel::GetInstance()->ClearPasswords(); + } + else if (__pConfirmationPopup->GetMessage() == CommonUtil::GetString(L"IDS_BR_POP_DELETE_LOCALLY_CACHED_CONTENT_AND_DATABASES_Q")) + { + message = CommonUtil::GetString(L"IDS_BR_POP_DELETED"); + SettingPresentationModel::GetInstance()->ClearCache(); + } + else if (__pConfirmationPopup->GetMessage() == CommonUtil::GetString(L"IDS_BR_BODY_DELETE_BROWSER_HISTORY_Q")) + { + message = CommonUtil::GetString(L"IDS_BR_POP_DELETED"); + HistoryPresentationModel::GetInstance()->ClearHistory(); + } + else if (__pConfirmationPopup->GetMessage() == CommonUtil::GetString(L"IDS_BR_POP_ALL_SETTINGS_TO_DEFAULT_CONTINUE_Q")) + { + message = CommonUtil::GetString(L"IDS_BR_SK_DONE"); + SettingPresentationModel::GetInstance()->ResetRegistry(); + InitializeSettingValues(); + if(__pList != null) + { + __pList->UpdateList(); + } + } + delete __pConfirmationPopup; + __pConfirmationPopup = null; + + if (__pNotification != null) + { + RemoveControl(__pNotification); + __pNotification = null; + } + __pNotification = new (std::nothrow) NotificationPanel(*this); + + //NotificationPanel* pNotification = new (std::nothrow) NotificationPanel(*this); + __pNotification->SetText(message); + __pNotification->SetPositionDiff(0); + __pNotification->ShowNotification(); + } + break; + + default: + break; + } +} + +void +SettingForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus) +{ + Rectangle rect = GetClientAreaBounds(); + + if (__pNotification != null && __pNotification->GetShowState() == true) + { + __pNotification->OrientationChanged(); + } + + if (__pList == null) + { + return; + } + __pList->SetBounds(rect.x,rect.y,rect.width-16,rect.height); +// __pList->UpdateList();//removed for issue 53768 +} + +SettingForm::SettingItemInfo::SettingItemInfo(void) +{ + titleText = L""; + subText = L""; + childCount = 0; + isOpen = false; + isSelected = false ; +} +void +SettingForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs) +{ + WindowInfo* pWindowInfo = null; + String curUrl = SettingPresentationModel::GetInstance()->GetFavoriteUrl(); + + pWindowInfo = MultipleWindowPresentationModel::GetInstance()->GetActiveWindowInfo(); + + if (previousSceneId == IDSCN_EDIT_HOMEPAGE_VIEW) + { + if (pArgs != null) + { + String* pValue = NULL; + pValue = dynamic_cast(pArgs->GetAt(0)); + if( pValue != NULL ) + { + if (pValue->CompareTo(L"Done") == 0) + { + // SettingPresentationModel::GetInstance()->SetHomepage(CommonUtil::GetString(L"IDS_BR_BODY_USER_HOMEPAGE")); + } + else if (pValue->CompareTo(L"Cancel") == 0) + { + String homePage = SettingPresentationModel::GetInstance()->GetHomepage(); + if (homePage.CompareTo((L"IDS_BR_BODY_MOST_VISITED_SITES")) == 0) + { + settingInfo[SETTING_MOST_VISITED_SITE].isSelected = true; + settingInfo[SETTING_BLANK_PAGE].isSelected = false; + settingInfo[SETTING_CURRENT_PAGE].isSelected = false; + settingInfo[SETTING_FAVORITE_URL].isSelected = false; + SettingPresentationModel::GetInstance()->SetHomepage(L"IDS_BR_BODY_MOST_VISITED_SITES"); + + } + else if (homePage.CompareTo((L"IDS_BR_BODY_BLANK_PAGE")) == 0) + { + settingInfo[SETTING_MOST_VISITED_SITE].isSelected = false; + settingInfo[SETTING_BLANK_PAGE].isSelected = true; + settingInfo[SETTING_CURRENT_PAGE].isSelected = false; + settingInfo[SETTING_FAVORITE_URL].isSelected = false; + SettingPresentationModel::GetInstance()->SetHomepage(L"IDS_BR_BODY_BLANK_PAGE"); + } + else + { + settingInfo[SETTING_MOST_VISITED_SITE].isSelected = false; + settingInfo[SETTING_BLANK_PAGE].isSelected = false; + settingInfo[SETTING_CURRENT_PAGE].isSelected = false; + settingInfo[SETTING_FAVORITE_URL].isSelected = true; + } + + } + } + } + } + + if (pWindowInfo != null) + { + __currentURL.Clear(); + __currentURL.Append(pWindowInfo->pageUrl); + AppLog("current url is %ls",__currentURL.GetPointer()); + + if (SettingPresentationModel::GetInstance()->GetFavoriteUrl().CompareTo(L"") == 0) + { + if (pWindowInfo->pageUrl.CompareTo(L"") == 0) + { + //settingInfo[SETTING_FAVORITE_URL].titleText = CommonUtil::GetString(L"IDS_SET_HOMEPAGE"); + settingInfo[SETTING_FAVORITE_URL].titleText = L"http://www.tizen.org"; + } + else + { + settingInfo[SETTING_FAVORITE_URL].titleText = pWindowInfo->pageUrl; + } + } + else + { + settingInfo[SETTING_FAVORITE_URL].titleText = SettingPresentationModel::GetInstance()->GetFavoriteUrl(); + } + } + + if (__pList != null) + { + __pList->UpdateList(); + if (pWindowInfo && pWindowInfo->pageUrl.CompareTo(L"") == 0) + { + __isCurrentPageDisable = true; + AppLog("set item enabled is false"); + __pList->SetItemEnabled(0, 1, false); + } + else + { + __isCurrentPageDisable = false; + AppLog("set item enabled is true"); + if (settingInfo[0].isOpen == false) + { + __pList->SetItemEnabled(0,1,false); + } + else + { + __pList->SetItemEnabled(0,1,true); + } + } + for(int grpindex = 0; grpindex < groupCount; grpindex++) + { + for(int index = 0; index < *(pGroupItemCount+groupCount); index++) + { + int effectiveIndex = 0; + for (int i = 0; i < grpindex; i++) + effectiveIndex = effectiveIndex + pGroupItemCount[i]; + effectiveIndex = effectiveIndex + index; + + if(effectiveIndex >= SETTING_MAX) + { + continue; + } + if(settingInfo[effectiveIndex].itemType == ITEM_TYPE_TOGGLE || settingInfo[effectiveIndex].itemType == ITEM_TYPE_RADIO ) + { + __pList->SetItemChecked(grpindex, index, settingInfo[effectiveIndex].isSelected); + } + } + } + } + return; +} + +void +SettingForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId) +{ + return; +} + +void +SettingForm::ClearHistory(void) +{ + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + String message = CommonUtil::GetString(L"IDS_BR_BODY_DELETE_BROWSER_HISTORY_Q"); + if(!__pConfirmationPopup) + { + __pConfirmationPopup = new(std::nothrow) ConfirmationPopup(); + __pConfirmationPopup->Initialize(); + __pConfirmationPopup->RemoveActionListener(*this); + __pConfirmationPopup->AddActionListener(*this); + __pConfirmationPopup->setMessage(message); + __pConfirmationPopup->Show(); + } +} + +void +SettingForm::ClearCache(void) +{ + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + String message = CommonUtil::GetString(L"IDS_BR_POP_DELETE_LOCALLY_CACHED_CONTENT_AND_DATABASES_Q"); + if(!__pConfirmationPopup) + { + __pConfirmationPopup = new(std::nothrow) ConfirmationPopup(); + __pConfirmationPopup->Initialize(); + __pConfirmationPopup->RemoveActionListener(*this); + __pConfirmationPopup->AddActionListener(*this); + __pConfirmationPopup->setMessage(message); + __pConfirmationPopup->Show(); + } +} + +void +SettingForm::ClearCookie(void) +{ + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + String message = CommonUtil::GetString(L"IDS_BR_POP_EMPTY_COOKIE_POPUP_BNO"); + if(!__pConfirmationPopup) + { + __pConfirmationPopup = new(std::nothrow) ConfirmationPopup(); + __pConfirmationPopup->Initialize(); + __pConfirmationPopup->RemoveActionListener(*this); + __pConfirmationPopup->AddActionListener(*this); + __pConfirmationPopup->setMessage(message); + __pConfirmationPopup->Show(); + } +} + +void +SettingForm::ClearFormData(void) +{ + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + String message = CommonUtil::GetString(L"IDS_BR_POP_DELETE_ALL_SAVED_FORM_DATA_Q"); + if(!__pConfirmationPopup) + { + __pConfirmationPopup = new(std::nothrow) ConfirmationPopup(); + __pConfirmationPopup->Initialize(); + __pConfirmationPopup->RemoveActionListener(*this); + __pConfirmationPopup->AddActionListener(*this); + __pConfirmationPopup->setMessage(message); + __pConfirmationPopup->Show(); + } +} + +void +SettingForm::ClearPasswords(void) +{ + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + String message = CommonUtil::GetString(L"IDS_BR_POP_DELETE_ALL_SAVED_PASSWORDS_Q"); + if(!__pConfirmationPopup) + { + __pConfirmationPopup = new(std::nothrow) ConfirmationPopup(); + __pConfirmationPopup->Initialize(); + __pConfirmationPopup->RemoveActionListener(*this); + __pConfirmationPopup->AddActionListener(*this); + __pConfirmationPopup->setMessage(message); + __pConfirmationPopup->Show(); + } +} + + +void +SettingForm::ResetToDefault() +{ + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + __pConfirmationPopup->Show(); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + String message = CommonUtil::GetString(L"IDS_BR_POP_ALL_SETTINGS_TO_DEFAULT_CONTINUE_Q"); + if(!__pConfirmationPopup) + { + __pConfirmationPopup = new(std::nothrow) ConfirmationPopup(); + __pConfirmationPopup->Initialize(); + __pConfirmationPopup->RemoveActionListener(*this); + __pConfirmationPopup->AddActionListener(*this); + __pConfirmationPopup->setMessage(message); + __pConfirmationPopup->Show(); + } +} + +void +SettingForm::OnUserEventReceivedN (RequestId requestId, Tizen::Base::Collection::IList *pArgs) +{ + AppLog("receiving userevent for appcontrol %d",requestId); + if (requestId == APPCONTROL_LAUNCH_MAX_LIMIT_REACHED) + { + AppLog("receiving userevent for appcontrol %d ",requestId); + if(__pConfirmationPopup) + { + __pConfirmationPopup->SetShowState(false); + delete __pConfirmationPopup; + __pConfirmationPopup = null; + } + } + else if (requestId == UPDATE_LIST_COMPLETE) + { + AppLog("receiving event UPDATE_LIST_COMPLETE"); + Integer *pGroupIndex = static_cast(pArgs->GetAt(0)); + Integer *pItemIndex = static_cast(pArgs->GetAt(1)); + int groupIndex = pGroupIndex->ToInt(); + int itemIndex = pItemIndex->ToInt(); + + int effectiveIndex = 0; + for (int i = 0; i < groupIndex; i++) + effectiveIndex = effectiveIndex + pGroupItemCount[i]; + effectiveIndex = effectiveIndex + itemIndex; + + + if(settingInfo[effectiveIndex].itemType == ITEM_TYPE_TOGGLE || settingInfo[effectiveIndex].itemType == ITEM_TYPE_RADIO ) + { + AppLog("UPDATE_LIST_COMPLETE SetItemChecked %d, %d, %d",groupIndex, itemIndex, settingInfo[effectiveIndex].isSelected); + __pList->SetItemChecked(groupIndex, itemIndex, settingInfo[effectiveIndex].isSelected); + __pList->Invalidate(true); + } + + } +} + diff --git a/src/IntSettingPresentationModel.cpp b/src/IntSettingPresentationModel.cpp new file mode 100644 index 0000000..1b83d52 --- /dev/null +++ b/src/IntSettingPresentationModel.cpp @@ -0,0 +1,717 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet +/*@file: IntSettingsPresentationModel.cpp + *@brief: Used to define SettingsManager + */ + +#include +#include "IntCommonLib.h" +#include "IntSettingPresentationModel.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Io; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Web::Controls; + +SettingPresentationModel* SettingPresentationModel::__pSettingsPresentationModel = null; + +SettingPresentationModel::SettingPresentationModel(void) +{ + __listenerList.Construct(); + SetDefaultValues(); + __isPrivateOn = false; +} + +SettingPresentationModel::SettingPresentationModel(const SettingPresentationModel& settingModelObj) +{ + +} + +SettingPresentationModel& SettingPresentationModel::operator=(const SettingPresentationModel& settingModelObj) +{ + return *this; +} + +SettingPresentationModel::~SettingPresentationModel(void) +{ + +} + +void +SettingPresentationModel::SetDefaultValues(void) +{ + //__homePage = CommonUtil::GetString(L"IDS_EMPTY_PAGE"); + __homePage = (L"IDS_BR_BODY_MOST_VISITED_SITES"); + __defaultViewLevel = L"IDS_BR_BODY_FIT_TO_WIDTH"; // IDS_FIT_TO_WIDTH + __runJsEnabled = true; + __displayImages = true; + __html5Videos = true; + __wordWrap = true; + __blockPopUp = true; + __rememberFormData = true; + __rememberPassword = true; + __cookies = true; + __savePassword = CommonUtil::GetString(L"IDS_BR_BODY_ALWAYS_ASK"); // IDS_ALWAYS_ASK + __securityWarnings = true; + __searchEngine = L"Yahoo"; //CommonUtil::GetString(L"IDS_BR_BODY_YAHOO"); + __caseSensitive = false; + __runReader = true; + __fontSize = 24; + + __setting.SetInputStyle(INPUT_STYLE_OVERLAY); + __setting.SetAutoImageLoadEnabled(__displayImages); + __setting.SetJavascriptEnabled(__runJsEnabled); + __setting.SetJavaScriptPopupEnabled(__blockPopUp); + __setting.SetAutoFormDataShowEnabled(__rememberFormData); + __setting.SetAutoLoginFormFillEnabled(__rememberPassword); + + if (__defaultViewLevel.CompareTo((L"IDS_BR_BODY_FIT_TO_WIDTH")) == 0) + { + __setting.SetAutoFittingEnabled(true); + } + else if (__defaultViewLevel.CompareTo((L"IDS_BR_BODY_READABLE")) == 0) + { + __setting.SetAutoFittingEnabled(false); + } + if (__securityWarnings == true) + { + __setting.SetCertificateErrorHandlingMode(WEB_CERTIFICATE_ERROR_HANDLING_MODE_USER_CONFIRM); + } + else + { + __setting.SetCertificateErrorHandlingMode(WEB_CERTIFICATE_ERROR_HANDLING_MODE_CONTINUE); + } +} + +void +SettingPresentationModel::CreateInstance(void) +{ + if (__pSettingsPresentationModel == null) + __pSettingsPresentationModel = new(std::nothrow) SettingPresentationModel(); + result r = __pSettingsPresentationModel->Construct(); + if (IsFailed(r)) + { + delete __pSettingsPresentationModel; + __pSettingsPresentationModel = null; + return; + } + std::atexit(DestroyInstance); +} + +SettingPresentationModel* +SettingPresentationModel::GetInstance(void) +{ + if (__pSettingsPresentationModel == null) + { + CreateInstance(); + } + return __pSettingsPresentationModel; +} + +void +SettingPresentationModel::DestroyInstance(void) +{ + if (__pSettingsPresentationModel) + { + delete __pSettingsPresentationModel; + __pSettingsPresentationModel = null; + } +} + +result +SettingPresentationModel::LoadRegistry(void) +{ + AppLog("SettingPresentationModel::LoadRegistry entered"); + result r = E_FAILURE; + + SetDefaultValues(); + for (int settingValueName = REGISTRY_SETTING_HOMEPAGE; settingValueName < MAX_REGISTRY_SETTING; settingValueName++) + { + r = AppRegistry::GetInstance()->Get(__entry[settingValueName], __values[settingValueName]); + if (r != E_SUCCESS && r != E_KEY_NOT_FOUND) + { + AppLog("Registry Load failed with result %s settingValueName %d", GetErrorMessage(r),settingValueName); + return r; + } + } + if (__values[REGISTRY_SETTING_HOMEPAGE].CompareTo(L"") != 0) + { + __homePage = __values[REGISTRY_SETTING_HOMEPAGE]; + AppLog("homepage Loading from registry %ls",__homePage.GetPointer()); + } + if (__values[REGISTRY_SETTING_DEFAULT_VIEW].CompareTo(L"") != 0) + { + __defaultViewLevel = __values[REGISTRY_SETTING_DEFAULT_VIEW]; + } + if (__values[REGISTRY_SETTING_RUN_JAVASCRIPT].CompareTo(L"") != 0) + { + __runJsEnabled = Boolean::Parse(__values[REGISTRY_SETTING_RUN_JAVASCRIPT], false); + AppLogDebug("LoadRegistry __runJsEnabled %d",__runJsEnabled); + } + if (__values[REGISTRY_SETTING_DISPLAY_IMAGES].CompareTo(L"") != 0) + { + __displayImages = Boolean::Parse(__values[REGISTRY_SETTING_DISPLAY_IMAGES], false); + AppLogDebug("LoadRegistry __displayImages %d",__displayImages); + } + if (__values[REGISTRY_SETTING_HTML5_VIDEOS].CompareTo(L"") != 0) + { + __html5Videos = Boolean::Parse(__values[REGISTRY_SETTING_HTML5_VIDEOS], false); + AppLogDebug("LoadRegistry __html5Videos %d",__html5Videos); + } + if (__values[REGISTRY_SETTING_WORD_WRAPPING].CompareTo(L"") != 0) + { + __wordWrap = Boolean::Parse(__values[REGISTRY_SETTING_WORD_WRAPPING], false); + AppLogDebug("LoadRegistry __wordWrap %d",__wordWrap); + } + if (__values[REGISTRY_SETTING_BLOCK_POPUP].CompareTo(L"") != 0) + { + __blockPopUp = Boolean::Parse(__values[REGISTRY_SETTING_BLOCK_POPUP], false); + AppLogDebug("LoadRegistry __blockPopUp %d",__blockPopUp); + } + if (__values[REGISTRY_SETTING_ACCEPT_COOKIES].CompareTo(L"") != 0) + { + __cookies = Boolean::Parse(__values[REGISTRY_SETTING_ACCEPT_COOKIES], false); + AppLogDebug("LoadRegistry __cookies %d",__cookies); + } + if (__values[REGISTRY_SETTING_AUTOSAVE_ID_PASSWORD].CompareTo(L"") != 0) + { + __savePassword = __values[REGISTRY_SETTING_AUTOSAVE_ID_PASSWORD]; + } + if (__values[REGISTRY_SETTING_SHOW_SECURITY_WARNINGS].CompareTo(L"") != 0) + { + __securityWarnings = Boolean::Parse(__values[REGISTRY_SETTING_SHOW_SECURITY_WARNINGS], false); + AppLogDebug("LoadRegistry __securityWarnings %d",__securityWarnings); + } + if (__values[REGISTRY_SETTING_SEARCH_ENGINE].CompareTo(L"") != 0) + { + __searchEngine = __values[REGISTRY_SETTING_SEARCH_ENGINE]; + } + if (__values[REGISTRY_SETTING_CASE_SENSITIVE].CompareTo(L"") != 0) + { + __caseSensitive = Boolean::Parse(__values[REGISTRY_SETTING_CASE_SENSITIVE], false); + AppLogDebug("LoadRegistry __caseSensitive %d",__caseSensitive); + } + if (__values[REGISTRY_SETTING_RUN_READER].CompareTo(L"") != 0) + { + __runReader = Boolean::Parse(__values[REGISTRY_SETTING_RUN_READER], false); + AppLogDebug("LoadRegistry __runReader %d",__runReader); + } + if (__values[REGISTRY_SETTING_READER_FONT_SIZE].CompareTo(L"") != 0) + { + Integer::Parse(__values[REGISTRY_SETTING_READER_FONT_SIZE], (int&)__fontSize); + } + if (__values[REGISTRY_SETTING_REMEMBER_FORM_DATA].CompareTo(L"") != 0) + { + __rememberFormData = Boolean::Parse(__values[REGISTRY_SETTING_REMEMBER_FORM_DATA], false); + AppLogDebug("LoadRegistry form data %d",__rememberFormData); + } + if (__values[REGISTRY_SETTING_REMEMBER_PASSWORD].CompareTo(L"") != 0) + { + __rememberPassword = Boolean::Parse(__values[REGISTRY_SETTING_REMEMBER_PASSWORD], false); + AppLogDebug("LoadRegistry form password %d",__rememberPassword); + } + // + for (int index = REGISTRY_SETTING_HOMEPAGE; index < MAX_REGISTRY_SETTING; index++) + { + AppLogDebug("registry loaded value :%ls at index %d", __values[index].GetPointer(), index); + } + __setting.SetInputStyle(INPUT_STYLE_OVERLAY); + __setting.SetAutoImageLoadEnabled(__displayImages); + __setting.SetJavascriptEnabled(__runJsEnabled); + __setting.SetJavaScriptPopupEnabled(__blockPopUp); + __setting.SetAutoFormDataShowEnabled(__rememberFormData); + __setting.SetAutoLoginFormFillEnabled(__rememberPassword); + + if (__securityWarnings == true) + { + __setting.SetCertificateErrorHandlingMode(WEB_CERTIFICATE_ERROR_HANDLING_MODE_USER_CONFIRM); + } + else + { + __setting.SetCertificateErrorHandlingMode(WEB_CERTIFICATE_ERROR_HANDLING_MODE_CONTINUE); + } + __favouriteURL.Clear(); + __favouriteURL = L""; + r = AppRegistry::GetInstance()->Get(__entry[REGISTRY_SETTING_FAVORITE_URL_VALUE], __favouriteURL); + AppLog("__favouriteURL taken from registry is %ls",__favouriteURL.GetPointer()); + + if (r != E_SUCCESS && r != E_KEY_NOT_FOUND) + { + AppLogDebug("Registry Load failed with result %s", GetErrorMessage(r)); + return r; + } + + return E_SUCCESS; +} + +result +SettingPresentationModel::ResetRegistry(void) +{ + result r = E_FAILURE; + + AppLogDebug("SettingsManager::ResetRegistry"); + for (int index = REGISTRY_SETTING_INVALID+1; index < MAX_REGISTRY_SETTING; index++) + { + r = AppRegistry::GetInstance()->Remove(__entry[index]); + AppLogDebug("Registry Remove result %s",GetErrorMessage(r)); + } + + AppRegistry::GetInstance()->Save(); + + for (int index = REGISTRY_SETTING_HOMEPAGE; index < MAX_REGISTRY_SETTING; index++) + { + __values[index] = L""; + } + + SetDefaultValues(); + for (int index = 0; index < __listenerList.GetCount(); index++) + { + ISettingChangeEventListener* pSettingsListener = static_cast< ISettingChangeEventListener* >(__listenerList.GetAt(index)); + if (pSettingsListener) + pSettingsListener->OnSettingsReset(); + } + + return E_SUCCESS; +} + +void +SettingPresentationModel::ClearCache(void) +{ + for (int index = 0; index < __listenerList.GetCount(); index++) + { + ISettingChangeEventListener* pSettingsListener = static_cast< ISettingChangeEventListener* >(__listenerList.GetAt(index)); + if (pSettingsListener) + pSettingsListener->OnClearCache(); + } +} + +void +SettingPresentationModel::ClearCookie(void) +{ + for (int index = 0; index < __listenerList.GetCount(); index++) + { + ISettingChangeEventListener* pSettingsListener = static_cast< ISettingChangeEventListener* >(__listenerList.GetAt(index)); + if (pSettingsListener) + pSettingsListener->OnClearCookie(); + } +} + +void +SettingPresentationModel::ClearFormData(void) +{ + for (int index = 0; index < __listenerList.GetCount(); index++) + { + ISettingChangeEventListener* pSettingsListener = static_cast< ISettingChangeEventListener* >(__listenerList.GetAt(index)); + if (pSettingsListener) + pSettingsListener->OnClearFormData(); + } +} + +void +SettingPresentationModel::ClearPasswords(void) +{ + for (int index = 0; index < __listenerList.GetCount(); index++) + { + ISettingChangeEventListener* pSettingsListener = static_cast< ISettingChangeEventListener* >(__listenerList.GetAt(index)); + if (pSettingsListener) + pSettingsListener->OnClearPasswords(); + } +} + +result +SettingPresentationModel::Construct(void) +{ + result r = E_FAILURE; + + for (int index = REGISTRY_SETTING_HOMEPAGE; index < MAX_REGISTRY_SETTING; index++) + { + __values[index] = L""; + } + + __entry[REGISTRY_SETTING_HOMEPAGE] = L"homePage"; + __entry[REGISTRY_SETTING_DEFAULT_VIEW] = L"defaultViewLevel"; + __entry[REGISTRY_SETTING_RUN_JAVASCRIPT] = L"runJs"; + __entry[REGISTRY_SETTING_DISPLAY_IMAGES] = L"displayImages"; + __entry[REGISTRY_SETTING_HTML5_VIDEOS] = L"html5Videos"; + __entry[REGISTRY_SETTING_WORD_WRAPPING] = L"wordWrap"; + __entry[REGISTRY_SETTING_BLOCK_POPUP] = L"blockPopUp"; + __entry[REGISTRY_SETTING_ACCEPT_COOKIES] = L"cookies"; + __entry[REGISTRY_SETTING_AUTOSAVE_ID_PASSWORD] = L"savePassword"; + __entry[REGISTRY_SETTING_SHOW_SECURITY_WARNINGS] = L"securityWarnings"; + __entry[REGISTRY_SETTING_SEARCH_ENGINE] = L"searchEngine"; + __entry[REGISTRY_SETTING_CASE_SENSITIVE] = L"caseSensitive"; + __entry[REGISTRY_SETTING_RUN_READER] = L"runReader"; + __entry[REGISTRY_SETTING_READER_FONT_SIZE] = L"fontSize"; + __entry[REGISTRY_SETTING_FAVORITE_URL_VALUE] = L"Favourite"; + __entry[REGISTRY_SETTING_REMEMBER_FORM_DATA] = L"formData"; + __entry[REGISTRY_SETTING_REMEMBER_PASSWORD] = L"rememberPassword"; + + r = LoadRegistry(); + return E_SUCCESS; +} + +result +SettingPresentationModel::SetValue(const int settingValueName, const String& val) +{ + result r = E_FAILURE; + + AppLogDebug("SettingsManager::SetValue settingValueName:%d val %ls", settingValueName, val.GetPointer()); + if (__values[settingValueName] == L"") + { + AppLogDebug("adding the new (std::nothrow) entry into registry"); + r = AppRegistry::GetInstance()->Add(__entry[settingValueName], val); + } + else + { + AppLogDebug("modifying entry into registry"); + r = AppRegistry::GetInstance()->Set(__entry[settingValueName], val); + } + TryCatch(!IsFailed(r),,"Adding into registry failed %s",GetErrorMessage(r)); + + r = AppRegistry::GetInstance()->Save(); + TryCatch(!IsFailed(r),,"Save Failed with error %s",GetErrorMessage(r)); + + for (int index = 0; index < __listenerList.GetCount(); index++) + { + ISettingChangeEventListener* pSettingsListener = static_cast< ISettingChangeEventListener* >(__listenerList.GetAt(index)); + if (pSettingsListener) + pSettingsListener->OnSettingsChange(settingValueName); + } + + __values[settingValueName] = val; + + CATCH: + return r; + +} + +result +SettingPresentationModel::SetFavoriteValue(const Tizen::Base::String& val) +{ + result r = E_FAILURE; + + if (__favouriteURL == L"") + r = AppRegistry::GetInstance()->Add(__entry[REGISTRY_SETTING_FAVORITE_URL_VALUE], val); + else + r = AppRegistry::GetInstance()->Set(__entry[REGISTRY_SETTING_FAVORITE_URL_VALUE], val); + TryCatch(!IsFailed(r),,"registry set failed with error %s",GetErrorMessage(r)); + r = AppRegistry::GetInstance()->Save(); + TryCatch(!IsFailed(r),,"registry set failed with error %s",GetErrorMessage(r)); + __favouriteURL.Clear(); + __favouriteURL.Append(val); + + CATCH: + return r; +} + +String +SettingPresentationModel::GetFavoriteUrl(void) +{ + __favouriteURL.Clear(); + __favouriteURL = L""; + AppRegistry::GetInstance()->Get(__entry[REGISTRY_SETTING_FAVORITE_URL_VALUE], __favouriteURL); + + return __favouriteURL; +} + +void +SettingPresentationModel::AddSettingsEventListener(const ISettingChangeEventListener& listener) +{ + __listenerList.Add(listener); +} + +void +SettingPresentationModel::RemoveSettingsEventListener(ISettingChangeEventListener& listener) +{ + __listenerList.Remove(listener, false); +} + +void +SettingPresentationModel::SetHomepage(const String& homePage) +{ + __homePage.Clear(); + __homePage.Append(homePage); + AppLog("SettingPresentationModel::SetHomepage %ls",__homePage.GetPointer()); + SetValue((int) REGISTRY_SETTING_HOMEPAGE, __homePage); +} + +String +SettingPresentationModel::GetHomepage(void) +{ + return __homePage; +} + +void +SettingPresentationModel::SetDefaultView(const String& viewLevel) +{ + __defaultViewLevel = viewLevel; + //CommonUtil::GetString(L"IDS_FIT_TO_WIDTH") + if (__defaultViewLevel.CompareTo((L"IDS_BR_BODY_FIT_TO_WIDTH")) == 0) + { + __setting.SetAutoFittingEnabled(true); + } + else if (__defaultViewLevel.CompareTo((L"IDS_BR_BODY_READABLE")) == 0) + { + __setting.SetAutoFittingEnabled(false); + } + + SetValue((int) REGISTRY_SETTING_DEFAULT_VIEW, viewLevel); +} + +String +SettingPresentationModel::GetDefaultView(void) +{ + return __defaultViewLevel; +} + +void +SettingPresentationModel::SetRunJavascriptEnabled(bool runJsEnabled) +{ + __runJsEnabled = runJsEnabled; + SetValue((int) REGISTRY_SETTING_RUN_JAVASCRIPT, Boolean::ToString(runJsEnabled)); + __setting.SetJavascriptEnabled(runJsEnabled); +} + +bool +SettingPresentationModel::IsRunJavascriptEnabled(void) +{ + return __runJsEnabled; +} + +void +SettingPresentationModel::SetDisplayImagesEnabled(bool displayImages) +{ + __displayImages = displayImages; + SetValue((int) REGISTRY_SETTING_DISPLAY_IMAGES, Boolean::ToString(displayImages)); + __setting.SetAutoImageLoadEnabled(__displayImages); +} + +bool +SettingPresentationModel::IsDisplayImagesEnabled(void) +{ + return __displayImages; +} + +void +SettingPresentationModel::SetHtml5VideosEnabled(bool html5Videos) +{ + __html5Videos = html5Videos; + SetValue((int) REGISTRY_SETTING_HTML5_VIDEOS, Boolean::ToString(html5Videos)); +} + +bool +SettingPresentationModel::IsHtml5VideosEnabled(void) +{ + return __html5Videos; +} + +void +SettingPresentationModel::SetWordWrapEnabled(bool wordWrap) +{ + __wordWrap = wordWrap; + SetValue((int) REGISTRY_SETTING_WORD_WRAPPING, Boolean::ToString(wordWrap)); +} + +bool +SettingPresentationModel::IsWordWrapEnabled(void) +{ + return __wordWrap; +} + +void +SettingPresentationModel::SetBlockPopUp(bool blockPopUp) +{ + __blockPopUp = blockPopUp; + SetValue((int) REGISTRY_SETTING_BLOCK_POPUP, Boolean::ToString(blockPopUp)); + __setting.SetJavaScriptPopupEnabled(__blockPopUp); +} + +bool +SettingPresentationModel::IsBlockPopUp(void) +{ + return __blockPopUp; +} + +void +SettingPresentationModel::SetCookiesEnabled(bool cookiesEnabled) +{ + __cookies = cookiesEnabled; + SetValue((int) REGISTRY_SETTING_ACCEPT_COOKIES, Boolean::ToString(cookiesEnabled)); +} + +bool +SettingPresentationModel::IsCookiesEnabled(void) +{ + return __cookies; +} + +void +SettingPresentationModel::SetRememberFormData(bool formData) +{ + __rememberFormData = formData; + SetValue((int) REGISTRY_SETTING_REMEMBER_FORM_DATA, Boolean::ToString(__rememberFormData)); + __setting.SetAutoFormDataShowEnabled(__rememberFormData); +} + +bool +SettingPresentationModel::IsRememberFormData(void) +{ + return __rememberFormData; +} + +void SettingPresentationModel::SetRememberPassword(bool rememberPassword) +{ + __rememberPassword = rememberPassword; + SetValue((int) REGISTRY_SETTING_REMEMBER_PASSWORD, Boolean::ToString(__rememberPassword)); + __setting.SetAutoLoginFormFillEnabled(__rememberPassword); +} + +bool SettingPresentationModel::IsRememberPassword(void) +{ + return __rememberPassword; +} + +void +SettingPresentationModel::SetSavePassword(const String& savePassword) +{ + __savePassword = savePassword; + SetValue((int) REGISTRY_SETTING_AUTOSAVE_ID_PASSWORD, savePassword); +} + +String +SettingPresentationModel::GetSavePassword(void) +{ + return __savePassword; +} + +void +SettingPresentationModel::SetSecurityWarningsEnabled(bool securityWarnings) +{ + __securityWarnings = securityWarnings; + SetValue((int) REGISTRY_SETTING_SHOW_SECURITY_WARNINGS, Boolean::ToString(securityWarnings)); + if (__securityWarnings == true) + { + __setting.SetCertificateErrorHandlingMode(WEB_CERTIFICATE_ERROR_HANDLING_MODE_USER_CONFIRM); + } + else + { + __setting.SetCertificateErrorHandlingMode(WEB_CERTIFICATE_ERROR_HANDLING_MODE_CONTINUE); + } +} + +bool +SettingPresentationModel::IsSecurityWarningsEnabled(void) +{ + return __securityWarnings; +} + +void +SettingPresentationModel::SetSearchEngine(const String& searchEngine) +{ + __searchEngine = searchEngine; + SetValue((int) REGISTRY_SETTING_SEARCH_ENGINE, searchEngine); +} + +String +SettingPresentationModel::GetSearchEngine(void) +{ + return __searchEngine; +} + +void +SettingPresentationModel::SetCaseSensitiveEnabled(bool caseSensitive) +{ + __caseSensitive = caseSensitive; + SetValue((int) REGISTRY_SETTING_CASE_SENSITIVE, Boolean::ToString(caseSensitive)); +} + +bool +SettingPresentationModel::IsCaseSensitiveEnabled(void) +{ + return __caseSensitive; +} + +void +SettingPresentationModel::SetRunReaderEnabled(bool runReader) +{ + __runReader = runReader; + SetValue((int) REGISTRY_SETTING_RUN_READER, Boolean::ToString(runReader)); +} + +bool +SettingPresentationModel::IsRunReaderEnabled(void) +{ + return __runReader; +} + +void +SettingPresentationModel::SetReaderFontSize(int fontSize) +{ + __fontSize = fontSize; + SetValue((int) REGISTRY_SETTING_READER_FONT_SIZE, Integer::ToString(__fontSize)); +} + +int +SettingPresentationModel::GetReaderFontSize(void) +{ + return __fontSize; +} + +String +SettingPresentationModel::GetSearchUrl(const String& searchText) +{ + String searchStr = L""; + if (GetSearchEngine().CompareTo(L"Yahoo") == 0) + { + searchStr.Append(L"http://search.yahoo.com/search?p="); + searchStr.Append(searchText); + } + else if (GetSearchEngine().CompareTo(L"Naver") == 0) + { + searchStr.Append(L"http://search.naver.com/search.naver?query="); + searchStr.Append(searchText); + } + else if (GetSearchEngine().CompareTo(L"Google") == 0) + { + searchStr.Append(L"http://www.google.com/search?q="); + searchStr.Append(searchText); + } + return searchStr; +} + +Tizen::Web::Controls::WebSetting& +SettingPresentationModel::GetWebSettings(void) +{ + return __setting; +} + +void +SettingPresentationModel::SetPrivateOn(bool isPrivateOn) +{ + __isPrivateOn = isPrivateOn; + return; +} + +bool +SettingPresentationModel::GetPrivateOn(void) +{ + return __isPrivateOn; +} diff --git a/src/IntSettingToggleCustomItem.cpp b/src/IntSettingToggleCustomItem.cpp new file mode 100644 index 0000000..021c050 --- /dev/null +++ b/src/IntSettingToggleCustomItem.cpp @@ -0,0 +1,87 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +//!Internet SettingToggleCustomItem class +/*@file: SettingToggleCustomItem.cpp + *@brief: The SettingToggleCustomItem + * + */ + +#include + +#include "IntCommonLib.h" +#include "IntSettingToggleCustomItem.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Graphics; +using namespace Tizen::Ui::Controls; + +static const int IDA_FORMAT_STRING = 101; + +SettingToggleCustomItem::SettingToggleCustomItem(void) +{ + __text = L""; + __width = 0 ; + __height = 0 ; +} + +SettingToggleCustomItem::~SettingToggleCustomItem(void) +{ + +} + +result +SettingToggleCustomItem::Construct(int width, int height) +{ + result r = E_FAILURE; + + __fontSize = CommonUtil::GetFontSize(); + __width = width; + __height = height; + const Dimension dim(width, height); + r = CustomItem::Construct(dim, LIST_ANNEX_STYLE_ONOFF_SLIDING); + + return r; +} + +void +SettingToggleCustomItem::SetText(Tizen::Base::String& text) +{ + __text = text; +} + +String +SettingToggleCustomItem::GetText(void) +{ + return __text; +} + +result +SettingToggleCustomItem::Make(void) +{ + const Color textColor = CUSTOM_COLOR_TRANSPARENT; + const Color pressedTextColor = CUSTOM_COLOR_TRANSPARENT; + const int X_Margin = 26; + const int Y_Margin = 26; + const int textSize = 40; + + AddElement(Rectangle(X_Margin, Y_Margin, __width - 195, 60 + (__fontSize - 44)), IDA_FORMAT_STRING, __text, __fontSize, textColor, pressedTextColor, pressedTextColor, true); +// SetElementSelectionEnabled(IDA_FORMAT_STRING, false); + + return E_SUCCESS; +} diff --git a/src/IntSharePopup.cpp b/src/IntSharePopup.cpp new file mode 100644 index 0000000..5951bf0 --- /dev/null +++ b/src/IntSharePopup.cpp @@ -0,0 +1,744 @@ +// + +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.1 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +/* + * IntSharePopUp.cpp + *@file: IntSharePopup.cpp + *@brief: Share Popup for sharing bookmark via message, email etc + */ + +#include +#include +#include +#include + +#include "IntCommonLib.h" +#include "IntSharePopup.h" + +using namespace Tizen::App; +using namespace Tizen::Io; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Graphics; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Ui::Scenes; + + +const int SharePopup::IDA_CANCEL_BUTTON = 101; +const int SharePopup::ID_FORMAT_MESSAGE_STRING = 500; +const int SharePopup::ID_FORMAT_EMAIL_STRING = 501; +const int SharePopup::ID_FORMAT_FACEBOOK_STRING = 502; +const int SharePopup::ID_FORMAT_TWITTER_STRING = 503; + +ShareInfo:: ShareInfo(void) +{ + isImageAttached = false; +} + +ShareInfo:: ~ShareInfo(void) +{ +} + +void +ShareInfo::SetPageTitle(Tizen::Base::String aPageTitle) +{ + __pageTitle.Clear(); + __pageTitle.Append(aPageTitle); +} + +void +ShareInfo::SetPageUrl(Tizen::Base::String aPageURL) +{ + __pageURL.Clear(); + __pageURL.Append(aPageURL); +} + +Tizen::Base::String +ShareInfo::GetPageTitle(void) +{ + return __pageTitle; +} + +Tizen::Base::String +ShareInfo::GetPageURL(void) +{ + return __pageURL; +} + +void +ShareInfo::SetImageAttached(bool imageAttached) +{ + isImageAttached = imageAttached; +} + +bool +ShareInfo::GetImageAttached() +{ + return isImageAttached; +} + +void +ShareInfo::SetImagePath(Tizen::Base::String aImagePath) +{ + __imagePath.Clear(); + __imagePath.Append(aImagePath); +} + +Tizen::Base::String +ShareInfo::GetImagePath(void) +{ + return __imagePath; +} + +SharePopup::SharePopup(void) +:__pList(null),__pShareList(null) +{ + __appControlOngoing = false; + __pTimer = null; +} + +SharePopup::~SharePopup(void) +{ + ShareInfo* pShareInfo = null; + result r = E_FAILURE; + + if (__pShareList != null) + { + pShareInfo = dynamic_cast(__pShareList->GetAt(0)); + } + + String attachVal; + bool imageAttachment = false; + if (pShareInfo != null) + { + imageAttachment = pShareInfo->GetImageAttached(); + if (imageAttachment) + { + attachVal = pShareInfo->GetImagePath(); + AppLog("SharePopup:: imagePath is %S",attachVal.GetPointer()); + r = File::Remove(attachVal); + if(r == E_SUCCESS) + { + AppLog("removed success"); + } + else + { + AppLog("removed failure"); + } + } + __pShareList->RemoveAll(true); + } + + if(__pAppControlList) + __pAppControlList->RemoveAll(true); + delete __pAppControlList; +} + +bool +SharePopup::Initialize(void) +{ + Button* pCancelButton = null; + + Popup::Construct(L"IDL_SHARE_POPUP"); + SetName(L"CommonPopup"); + + __pShareList = new(std::nothrow) ArrayList(); + __pShareList->Construct(); + + __pList = static_cast(GetControl(L"IDC_LISTVIEW")); + if (__pList == null) + { + return false; + } + + __pList->SetItemProvider(*this); + __pList->AddListViewItemEventListener(*this); +// __pList->SetTextOfEmptyList(L"No Sharing Options");//hardcoded string + + pCancelButton = static_cast< Button* >(GetControl(L"IDC_BUTTON1", true)); + if (pCancelButton) + { + pCancelButton->AddActionEventListener(*this); + pCancelButton->SetActionId(IDA_CANCEL_BUTTON); + } + + __pTimer = new(std::nothrow) Timer(); + __pTimer->Construct(*this); + SetPropagatedKeyEventListener(this); + return true; +} + +result +SharePopup::OnTerminating(void) +{ + result r = E_SUCCESS; + return r; +} + +void +SharePopup::OnTimerExpired(Timer& timer) +{ + Popup::SetShowState(false); + Popup::Show(); + Frame* pCurrentFrame = null; + pCurrentFrame = Application::GetInstance()->GetAppFrame()->GetFrame(); + + if (pCurrentFrame != null) + { + pCurrentFrame->SetEnabled(true); + pCurrentFrame->Invalidate(true); + } +} + +void +SharePopup::OnActionPerformed(const Tizen::Ui::Control& source, int actionId) +{ + switch(actionId) + { + case IDA_CANCEL_BUTTON: + { + Popup::SetShowState(false); + Popup::Show(); + } + break; + default: + break; + } + return; +} + +void +SharePopup::OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state) +{ + return; +} + +void +SharePopup::OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status) +{ + switch (index) + { + case 0: + { + if(__appControlOngoing == false) + { + __appControlOngoing = true; + // share via message + StartMessageAppControl(); + if(__pTimer == null) + { + __pTimer = new(std::nothrow) Timer(); + __pTimer->Construct(*this); + } + __pTimer->Start(2500); + } + } + break; + case 1: + { + if(__appControlOngoing == false) + { + __appControlOngoing = true; + // share via email + StartEmailAppControl(); + if(__pTimer == null) + { + __pTimer = new(std::nothrow) Timer(); + __pTimer->Construct(*this); + } + __pTimer->Start(2500); + } + + } + break; + default: + if(__appControlOngoing == false) + { + __appControlOngoing = true; + //share via third party app + StartAppControl(index); + if(__pTimer == null) + { + __pTimer = new(std::nothrow) Timer(); + __pTimer->Construct(*this); + } + __pTimer->Start(2500); + } + break; + } + Frame* pCurrentFrame = null; + pCurrentFrame = Application::GetInstance()->GetAppFrame()->GetFrame(); + + if (pCurrentFrame != null) + { + pCurrentFrame->SetEnabled(false); + pCurrentFrame->Invalidate(true); + } +} + +void +SharePopup::OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction) +{ + return; +} + +void +SharePopup::OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback) +{ + return; +} + +Tizen::Ui::Controls::ListItemBase* +SharePopup::CreateItem(int index, int itemWidth) +{ + AppLog("SharePopup::CreateItem index %d",index); + result r = E_FAILURE; + ListAnnexStyle style = LIST_ANNEX_STYLE_NORMAL; + int textSize = 35; + int elementHeight = 50; + int listItemHeight = 75; + + CustomItem* pItem = new(std::nothrow) CustomItem(); + r = pItem->Construct(Dimension(GetClientAreaBounds().width, listItemHeight), style); + if (IsFailed(r)) + { + AppLogDebug("Create Item Failed with error %s", GetErrorMessage(r)); + delete pItem; + return null; + } + + + + switch(index) + { + case 0: + { + AppLogDebug("SharePopUp CreateItem 0"); + // IDS_SHARE_VIA_MESSAGE + pItem->AddElement(Rectangle(45,0, GetClientAreaBounds().width, listItemHeight), ID_FORMAT_MESSAGE_STRING, CommonUtil::GetString(L"IDS_BR_OPT_SENDURLVIA_MESSAGE"), true); + } + break; + case 1: + { + AppLogDebug("SharePopUp CreateItem 1"); + // IDS_SHARE_VIA_EMAIL + pItem->AddElement(Rectangle(45, 0, GetClientAreaBounds().width, listItemHeight), ID_FORMAT_EMAIL_STRING, CommonUtil::GetString(L"IDS_BR_OPT_SENDURLVIA_EMAIL"), true); + } + break; + default: + if(__pAppControlList) + { + AppControl * pControl = dynamic_cast(__pAppControlList->GetAt(index -2)); + AppLog("SharePopup::CreateItem appcontrol count %d",__pAppControlList->GetCount()); + if(pControl) + pItem->AddElement(Rectangle(45,0, GetClientAreaBounds().width, listItemHeight), ID_FORMAT_MESSAGE_STRING+index, pControl->GetAppName(), true); + } + break; + } + return pItem; +} + +bool +SharePopup::DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth) +{ + return true; +} + +int +SharePopup::GetItemCount(void) +{ + String* pStrId = new String(L"http://tizen.org/appcontrol/operation/share_text"); + __pAppControlList = AppManager::FindAppControlsN(pStrId,null,null,null); + if(__pAppControlList == null) + { + return 2; + } + int count = __pAppControlList->GetCount(); + AppLog("SharePopup::GetItemCount appcontrol count %d",count); + int removeCount = 0; + for(int pos = 0; pos < count; pos++) + { + AppControl * pControl = dynamic_cast(__pAppControlList->GetAt(pos)); + AppLog("pControl->GetAppName() %ls",pControl->GetAppName().GetPointer()); + if( pControl->GetAppId().Equals(L"8r4r5ddzzn.Messages",false) == true || pControl->GetAppId().Equals(L"vxqbrefica.Email",false) == true) + { + AppLog("Removed pControl->GetAppName %ls pControl->GetAppId() %ls",pControl->GetAppName().GetPointer(),pControl->GetAppId().GetPointer()); + __pAppControlList->RemoveAt(pos,true); + pos--; + count --; + removeCount++; + } + } + + AppLog("removeCount %d",removeCount); + if(count+removeCount >=2) + return count+removeCount; + return 2; + +} + +result +SharePopup::AddShareInfo(ShareInfo* pShareInfo) +{ + result r = E_FAILURE; + + if (__pShareList != NULL) + { + r = __pShareList->Add(*pShareInfo); + } + return r; +} + +void SharePopup::RemoveAllShareInfo() +{ + __pShareList->RemoveAll(); +} + +void +SharePopup::StartAppControl(int index) +{ + HashMap extraData; + ShareInfo* pShareInfo = null; + result r = E_FAILURE; + bool imageAttachment = false; + + extraData.Construct(); + + if (__pShareList != null) + { + pShareInfo = dynamic_cast(__pShareList->GetAt(0)); + if (pShareInfo != null) + { + String testURL = pShareInfo->GetPageURL(); + AppLogDebug("getpageURL getpageURL is %ls", testURL.GetPointer()); + } + } + + String textVal; + + if (pShareInfo != null) + { + textVal.Append(pShareInfo->GetPageTitle()); + textVal.Append(L" <"); + AppLog("share info url is %ls",pShareInfo->GetPageURL().GetPointer()); + textVal.Append(pShareInfo->GetPageURL().GetPointer()); + textVal.Append(L">"); + } + + + String textKey = L"http://tizen.org/appcontrol/data/text"; + + //String attachKey = L"attachments"; + String attachKey = L"http://tizen.org/appcontrol/data/path"; + String attachVal; + if (pShareInfo != null) + { + imageAttachment = pShareInfo->GetImageAttached(); + if (imageAttachment) + { + attachVal = pShareInfo->GetImagePath(); + AppLog("SharePopup::StartEmailAppControl imagePath is %S",attachVal.GetPointer()); + } + else + { + attachVal = L""; + } + } + + ArrayList* pDataList = null; + pDataList = new (std::nothrow) ArrayList(); + pDataList->Construct(); + pDataList->Add(&attachVal); + + + extraData.Add(&textKey, &textVal); + + if(attachVal.GetLength() > 0) + { + extraData.Add(&attachKey, pDataList); + } + + AppControl * pControl = dynamic_cast(__pAppControlList->GetAt(index - 2)); + AppLog("pControl AppControl Name %ls",pControl->GetAppName().GetPointer()); + if (pControl) + { + r = pControl->Start(null, null, &extraData, this); + AppLog("AppControl Start %s",GetErrorMessage(r)); +// delete pControl; + } + + delete pDataList; +} + +void +SharePopup::StartEmailAppControl(void) +{ + HashMap extraData; + ShareInfo* pShareInfo = null; + result r = E_FAILURE; + bool imageAttachment = false; + + extraData.Construct(); + + if (__pShareList != null) + { + pShareInfo = dynamic_cast(__pShareList->GetAt(0)); + if (pShareInfo != null) + { + String testURL = pShareInfo->GetPageURL(); + AppLogDebug("getpageURL getpageURL is %ls", testURL.GetPointer()); + } + } + + String textVal; + + if (pShareInfo != null) + { + textVal.Append(pShareInfo->GetPageTitle()); + textVal.Append(L" <"); + AppLog("share info url is %ls",pShareInfo->GetPageURL().GetPointer()); + textVal.Append(pShareInfo->GetPageURL().GetPointer()); + textVal.Append(L">"); + } + + String subjectKey = L"http://tizen.org/appcontrol/data/subject"; + String subjectVal = L""; + String textKey = L"http://tizen.org/appcontrol/data/text"; + + String toKey = L"http://tizen.org/appcontrol/data/to"; + String toVal = L""; + String ccKey = L"http://tizen.org/appcontrol/data/cc"; + String ccVal = L""; + String bccKey = L"http://tizen.org/appcontrol/data/bcc"; + String bccVal = L""; + String resultKey = L"http://tizen.org/appcontrol/data/return_result"; + String resultVal = "true"; + + + //String attachKey = L"attachments"; + String attachKey = L"http://tizen.org/appcontrol/data/path"; + String attachVal; + if (pShareInfo != null) + { + imageAttachment = pShareInfo->GetImageAttached(); + if (imageAttachment) + { + attachVal = pShareInfo->GetImagePath(); + AppLog("SharePopup::StartEmailAppControl imagePath is %S",attachVal.GetPointer()); + } + else + { + attachVal = L""; + } + } + + ArrayList* pDataList = null; + pDataList = new (std::nothrow) ArrayList(); + pDataList->Construct(); + pDataList->Add(&attachVal); + + extraData.Add(&subjectKey, &subjectVal); + extraData.Add(&textKey, &textVal); + extraData.Add(&toKey, &toVal); + extraData.Add(&ccKey, &ccVal); + extraData.Add(&bccKey, &bccVal); + extraData.Add(&resultKey, &resultVal); + if(attachVal.GetLength() > 0) + { + extraData.Add(&attachKey, pDataList); + } + + AppControl* pAc = AppManager::FindAppControlN(L"tizen.email", L"http://tizen.org/appcontrol/operation/compose"); + if (pAc) + { + r = pAc->Start(null, null, &extraData, this); + delete pAc; + } + + delete pDataList; +} + +void +SharePopup::StartMessageAppControl(void) +{ + HashMap extraData; + ShareInfo* pShareInfo = null; + result r = E_FAILURE; + bool imageAttachment = false; + + extraData.Construct(); + + String typeKey = L"http://tizen.org/appcontrol/data/message/type"; + String typeVal; + String textKey = L"http://tizen.org/appcontrol/data/text"; + String textVal; + String attachKey = L"http://tizen.org/appcontrol/data/path"; + String attachVal; + String resultKey = L"http://tizen.org/appcontrol/data/return_result"; + String resultVal = "true"; + ArrayList* pDataList = null; + + if (__pShareList != null) + { + pShareInfo = dynamic_cast(__pShareList->GetAt(0)); + if (pShareInfo != null) + { + String testURL = pShareInfo->GetPageURL(); + AppLogDebug("getpageURL getpageURL is %ls", testURL.GetPointer()); + } + } + + if (pShareInfo != null) + { + textVal.Append(pShareInfo->GetPageTitle()); + if(pShareInfo->GetPageTitle().GetLength() > 0) + { + textVal.Append(L" <"); + } + else + { + textVal.Append(L"<"); + } + AppLog("share info url is %ls",pShareInfo->GetPageURL().GetPointer()); + textVal.Append(pShareInfo->GetPageURL().GetPointer()); + textVal.Append(L">"); + } + if (pShareInfo != null) + { + imageAttachment = pShareInfo->GetImageAttached(); + if (imageAttachment) + { + // type is mms + typeVal = L"mms"; + attachVal = pShareInfo->GetImagePath(); + + pDataList = new (std::nothrow) ArrayList(); + pDataList->Construct(); + pDataList->Add(&attachVal); + } + else + { + typeVal = L"sms"; + // type is sms + } + } + + extraData.Add(&typeKey, &typeVal); + + if (imageAttachment) + { + // type is MMMS, attach the image + extraData.Add(&attachKey, pDataList); + } + else + { + // type is SMS , attach the text + extraData.Add(&textKey, &textVal); + } + extraData.Add(&resultKey, &resultVal); + AppControl* pAc = AppManager::FindAppControlN(L"tizen.messages", L"http://tizen.org/appcontrol/operation/compose"); + if (pAc) + { + r = pAc->Start(null, null, &extraData, this); + delete pAc; + } + + if(pDataList) + { + delete pDataList; + } +} + +void +SharePopup::OnAppControlCompleted(const Tizen::Base::String& providerId, const Tizen::Base::String& operationId, const Tizen::Base::Collection::IList* pResultList) +{ + AppLog("InternetApp::OnForeground called"); + +} + +void SharePopup::OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData) +{ + AppLog("SharePopup::OnAppControlCompleteResponseReceived"); + + ShareInfo* pShareInfo = null; + result r = E_FAILURE; + if(__pTimer) + { + __pTimer->Cancel(); + delete __pTimer; + __pTimer = null; + } + if (__pShareList != null) + { + pShareInfo = dynamic_cast(__pShareList->GetAt(0)); + } + + String attachVal; + bool imageAttachment = false; + if (pShareInfo != null) + { + imageAttachment = pShareInfo->GetImageAttached(); + if (imageAttachment) + { + attachVal = pShareInfo->GetImagePath(); + AppLog("SharePopup:: imagePath is %S",attachVal.GetPointer()); + r = File::Remove(attachVal); + if(r == E_SUCCESS) + { + AppLog("removed success"); + } + else + { + AppLog("removed failure"); + } + } + __pShareList->RemoveAll(true); + } + Popup::SetShowState(false); + Popup::Show(); + Frame* pCurrentFrame = null; + pCurrentFrame = Application::GetInstance()->GetAppFrame()->GetFrame(); + + if (pCurrentFrame != null) + { + pCurrentFrame->SetEnabled(true); + pCurrentFrame->Invalidate(true); + } + __appControlOngoing = false; +} + +bool +SharePopup::OnKeyReleased (Control &source, const KeyEventInfo &keyEventInfo) +{ + AppLog("ConfirmationPopup::OnKeyReleased %d",keyEventInfo.GetKeyCode()); + if(keyEventInfo.GetKeyCode() == KEY_BACK || keyEventInfo.GetKeyCode() == KEY_ESC) + { + if(GetShowState() == true) + { + if(__pTimer) + { + __pTimer->Cancel(); + delete __pTimer; + __pTimer = null; + } + SetShowState(false); + } + } + return false; +} -- 2.7.4

pq-`4iYebj#U;h9<`k0M`v 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%0AIaXczbD)e~Up<3IpHqBGj{--F} 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 SErXr_0000 + + + 720 + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/screen-size-normal/IDL_ADD_BOOKMARK.xml b/res/screen-size-normal/IDL_ADD_BOOKMARK.xml new file mode 100644 index 0000000..17c2f9c --- /dev/null +++ b/res/screen-size-normal/IDL_ADD_BOOKMARK.xml @@ -0,0 +1,73 @@ + + + + + + 720 +