From 86927216ba72c03d68d281c24a5245682309404a Mon Sep 17 00:00:00 2001 From: "sungwon2.han" Date: Thu, 11 Jun 2015 10:26:07 +0900 Subject: [PATCH 01/16] [Issues] TNEF-2062,TNEF-2056,TNEF-2055,TNEF-2129, TNEF-2128,TNEF-2127 [Problem] Not possible to Click the web contents area. [Cause] In the 800x60 size area of searchbox, mouse click is not working to web contents area [Solution] Removed the searchbox code. Searchbox is not scope of reference browser GUI. [Verify] click the 1120,130~1920,190 area Change-Id: I431a91da11010526a9df24476a43347e4d1fd4e0 Signed-off-by: sungwon2.han --- services/SimpleUI/SimpleUI.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 3801759..17f89da 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -283,9 +283,9 @@ int SimpleUI::exec(const std::string& _url) - m_searchBox = std::make_shared(m_window.get()); - m_searchBox->textChanged.connect(boost::bind(&SimpleUI::searchWebPage, this, _1, _2)); - elm_object_part_content_set(m_mainLayout, "search_box", m_searchBox->getContent()); + //m_searchBox = std::make_shared(m_window.get()); + //m_searchBox->textChanged.connect(boost::bind(&SimpleUI::searchWebPage, this, _1, _2)); + //elm_object_part_content_set(m_mainLayout, "search_box", m_searchBox->getContent()); m_sessionService = std::dynamic_pointer_cast < -- 2.7.4 From 56d361c8b9c63ce114f3c2dde43b023dd1712deb Mon Sep 17 00:00:00 2001 From: "sungwon2.han" Date: Thu, 11 Jun 2015 13:16:47 +0900 Subject: [PATCH 02/16] [Issues] TNEF-2062,TNEF-2056,TNEF-2055,TNEF-2129, TNEF-2128,TNEF-2127 [Problem] Not possible to Click the web contents area. [Cause] In the 800x60 size area of searchbox, mouse click is not working to web contents area [Solution] Removed the searchbox code. Searchbox is not scope of reference browser GUI. [Verify] click the 1120,130~1920,190 area Change-Id: I69dd8bb644e144ffb286d60444062709196bcfbc Signed-off-by: sungwon2.han --- services/SimpleUI/CMakeLists.txt | 3 - services/SimpleUI/SearchBox.cpp | 150 --------- services/SimpleUI/SearchBox.h | 70 ----- services/SimpleUI/SimpleUI.cpp | 28 +- services/SimpleUI/SimpleUI.h | 5 - services/SimpleUI/edc/MainLayout.edc | 15 - services/SimpleUI/edc/SearchBox.edc | 570 ----------------------------------- 7 files changed, 1 insertion(+), 840 deletions(-) delete mode 100644 services/SimpleUI/SearchBox.cpp delete mode 100644 services/SimpleUI/SearchBox.h delete mode 100644 services/SimpleUI/edc/SearchBox.edc diff --git a/services/SimpleUI/CMakeLists.txt b/services/SimpleUI/CMakeLists.txt index 587c2db..4053a76 100644 --- a/services/SimpleUI/CMakeLists.txt +++ b/services/SimpleUI/CMakeLists.txt @@ -12,7 +12,6 @@ set(SimpleUI_SRCS SimpleScroller.cpp WebTitleBar.cpp RelatedWebPages.cpp - SearchBox.cpp CustomPopup.cpp ) @@ -28,7 +27,6 @@ set(SimpleUI_HEADERS HistoryList.h WebTitleBar.h RelatedWebPages.h - SearchBox.h CustomPopup.h ) @@ -95,7 +93,6 @@ set(edcFiles ErrorMessage.edc RelatedPages.edc Tooltip.edc - SearchBox.edc CustomPopup.edc ) diff --git a/services/SimpleUI/SearchBox.cpp b/services/SimpleUI/SearchBox.cpp deleted file mode 100644 index 9185c46..0000000 --- a/services/SimpleUI/SearchBox.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (c) 2014 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. - */ - -#include "SearchBox.h" -#include "BrowserLogger.h" - -namespace tizen_browser -{ -namespace base_ui -{ - -SearchBox::SearchBox(Evas_Object *parent) -{ - std::string edjFilePath = EDJE_DIR; - edjFilePath.append("SimpleUI/SearchBox.edj"); - elm_theme_extension_add(NULL, edjFilePath.c_str()); - - m_entry_layout = elm_layout_add(parent); - if(!elm_layout_file_set(m_entry_layout, edjFilePath.c_str(), "search_box")) - throw std::runtime_error("Layout file not found: " + edjFilePath); - - m_webSearchEntry = elm_entry_add(m_entry_layout); - - elm_object_style_set(m_webSearchEntry, "search_entry"); - - elm_entry_single_line_set(m_webSearchEntry, EINA_TRUE); - elm_entry_scrollable_set(m_webSearchEntry, EINA_TRUE); - - search_caseSensitive = false; - - elm_object_translatable_part_text_set(m_webSearchEntry, "elm.guide", "Search"); - - evas_object_smart_callback_add(m_webSearchEntry, "changed,user", SearchBox::searchNext, this); - - //Add Case sensitive checkbox - m_caseSensitive = elm_check_add(m_entry_layout); - elm_object_part_text_set(m_caseSensitive, "default", "Match case"); - elm_object_part_text_set(m_caseSensitive, "on", "Match case"); - elm_object_part_text_set(m_caseSensitive, "off", "Match case"); - elm_check_state_set(m_caseSensitive, EINA_FALSE); - elm_object_part_content_set(m_entry_layout, "search_opts_case", m_caseSensitive); - - //Add prev and next buttons - m_searchPrev = elm_button_add(m_entry_layout); - elm_object_style_set(m_searchPrev, "default_button"); - elm_object_part_text_set(m_searchPrev, "default", "Prev"); - elm_object_part_content_set(m_entry_layout, "search_opts_prev", m_searchPrev); - - m_searchNext = elm_button_add(m_entry_layout); - elm_object_style_set(m_searchNext, "default_button"); - elm_object_part_text_set(m_searchNext, "default", "Next"); - elm_object_part_content_set(m_entry_layout, "search_opts_next", m_searchNext); - - evas_object_smart_callback_add(m_searchNext, "clicked", SearchBox::searchNext, this); - evas_object_smart_callback_add(m_searchPrev, "clicked", SearchBox::searchPrev, this); - evas_object_smart_callback_add(m_caseSensitive, "changed", SearchBox::caseSensitiveChanged, this); - - elm_object_part_content_set(m_entry_layout, "search_entry_swallow", m_webSearchEntry); - - hide(); -} - -Evas_Object* SearchBox::getContent() -{ - return m_entry_layout; -} - -void SearchBox::hide() -{ - elm_object_signal_emit(m_entry_layout, "elm,state,hide", "elm"); - elm_object_signal_emit(m_searchNext, "elm,state,hide", "elm"); - elm_object_signal_emit(m_searchPrev, "elm,state,hide", "elm"); - elm_object_signal_emit(m_webSearchEntry, "elm,state,hide", "elm"); - elm_entry_entry_set(m_webSearchEntry, ""); -// evas_object_hide(m_caseSensitive); - visible = false; -} - -void SearchBox::show() -{ - elm_object_signal_emit(m_entry_layout, "elm,state,show", "elm"); - elm_object_signal_emit(m_searchNext, "elm,state,show", "elm"); - elm_object_signal_emit(m_searchPrev, "elm,state,show", "elm"); - elm_object_signal_emit(m_webSearchEntry, "elm,state,show", "elm"); -// evas_object_show(m_caseSensitive); - visible = true; -} - -bool SearchBox::is_visible() -{ - return visible; -} - -void SearchBox::searchNext(void *data, Evas_Object */*obj*/, void */*event_info*/) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - SearchBox *self = reinterpret_cast(data); - std::string entry(elm_entry_markup_to_utf8(elm_entry_entry_get(self->m_webSearchEntry))); - - if (self->search_caseSensitive) - self->textChanged(entry, EWK_FIND_OPTIONS_SHOW_HIGHLIGHT); - else - self->textChanged(entry, EWK_FIND_OPTIONS_SHOW_HIGHLIGHT | EWK_FIND_OPTIONS_CASE_INSENSITIVE); - -} - -void SearchBox::searchPrev(void *data, Evas_Object */*obj*/, void */*event_info*/) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - SearchBox *self = reinterpret_cast(data); - std::string entry(elm_entry_markup_to_utf8(elm_entry_entry_get(self->m_webSearchEntry))); - - if (self->search_caseSensitive) - self->textChanged(entry, EWK_FIND_OPTIONS_SHOW_HIGHLIGHT | EWK_FIND_OPTIONS_BACKWARDS); - else - self->textChanged(entry, EWK_FIND_OPTIONS_SHOW_HIGHLIGHT | EWK_FIND_OPTIONS_CASE_INSENSITIVE | EWK_FIND_OPTIONS_BACKWARDS); - -} - -void SearchBox::caseSensitiveChanged(void *data, Evas_Object */*obj*/, void */*event_info*/) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - SearchBox *self = reinterpret_cast(data); - std::string entry(elm_entry_markup_to_utf8(elm_entry_entry_get(self->m_webSearchEntry))); - self->search_caseSensitive = elm_check_state_get(self->m_caseSensitive); - - if (self->search_caseSensitive) - self->textChanged(entry, EWK_FIND_OPTIONS_SHOW_HIGHLIGHT); - else - self->textChanged(entry, EWK_FIND_OPTIONS_SHOW_HIGHLIGHT | EWK_FIND_OPTIONS_CASE_INSENSITIVE); -} - - -} - -} - diff --git a/services/SimpleUI/SearchBox.h b/services/SimpleUI/SearchBox.h deleted file mode 100644 index b754536..0000000 --- a/services/SimpleUI/SearchBox.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2014 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. - */ - -#ifndef _SEARCHBOX_H -#define _SEARCHBOX_H - -#include -#include -#include - -namespace tizen_browser -{ -namespace base_ui -{ - -enum Ewk_Find_Options { - EWK_FIND_OPTIONS_NONE, /**< no search flags, this means a case sensitive, no wrap, forward only search. */ - EWK_FIND_OPTIONS_CASE_INSENSITIVE = 1 << 0, /**< case insensitive search. */ - EWK_FIND_OPTIONS_AT_WORD_STARTS = 1 << 1, /**< search text only at the beginning of the words. */ - EWK_FIND_OPTIONS_TREAT_MEDIAL_CAPITAL_AS_WORD_START = 1 << 2, /**< treat capital letters in the middle of words as word start. */ - EWK_FIND_OPTIONS_BACKWARDS = 1 << 3, /**< search backwards. */ - EWK_FIND_OPTIONS_WRAP_AROUND = 1 << 4, /**< if not present search will stop at the end of the document. */ - EWK_FIND_OPTIONS_SHOW_OVERLAY = 1 << 5, /**< show overlay */ - EWK_FIND_OPTIONS_SHOW_FIND_INDICATOR = 1 << 6, /**< show indicator */ - EWK_FIND_OPTIONS_SHOW_HIGHLIGHT = 1 << 7 /**< show highlight */ -}; - -class SearchBox{ - -public: - SearchBox(Evas_Object *parent); - Evas_Object* getContent(); - void hide(); - void show(); - bool is_visible(); - boost::signals2::signal textChanged; - -private: - Evas_Object* m_webSearchEntry; - Evas_Object* m_entry_layout; - Evas_Object* m_searchPrev; - Evas_Object* m_searchNext; - Evas_Object* m_caseSensitive; - - bool search_caseSensitive; - bool visible; - - static void searchNext(void *data, Evas_Object */*obj*/, void */*event_info*/); - static void searchPrev(void *data, Evas_Object */*obj*/, void */*event_info*/); - static void caseSensitiveChanged(void *data, Evas_Object */*obj*/, void */*event_info*/); -}; - -} - -} - -#endif //_SEARCHBOX_H diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 17f89da..3b6ee0d 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -281,12 +281,6 @@ int SimpleUI::exec(const std::string& _url) m_netErrorHandler->networkError.connect(boost::bind(&SimpleUI::onNetworkError, this)); m_netErrorHandler->networkConnected.connect(boost::bind(&SimpleUI::onNetworkConnected, this)); - - - //m_searchBox = std::make_shared(m_window.get()); - //m_searchBox->textChanged.connect(boost::bind(&SimpleUI::searchWebPage, this, _1, _2)); - //elm_object_part_content_set(m_mainLayout, "search_box", m_searchBox->getContent()); - m_sessionService = std::dynamic_pointer_cast < tizen_browser::services::SessionStorage, @@ -332,7 +326,6 @@ void SimpleUI::loadThemes() elm_theme_extension_add(NULL, edjePath("SimpleUI/ZoomItem.edj").c_str()); elm_theme_extension_add(NULL, edjePath("SimpleUI/TabItem.edj").c_str()); elm_theme_extension_add(NULL, edjePath("SimpleUI/ErrorMessage.edj").c_str()); - elm_theme_extension_add(NULL, edjePath("SimpleUI/SearchBox.edj").c_str()); elm_theme_overlay_add(0, edjePath("SimpleUI/ScrollerDefault.edj").c_str()); elm_theme_overlay_add(0, edjePath("SimpleUI/Tooltip.edj").c_str()); @@ -508,10 +501,7 @@ void SimpleUI::switchViewToHomePage() forwardEnable(false); backEnable(false); - m_simpleURI->setSearchIcon(); webTitleBar->hide(); - hideSearchBox(); - hideProgressBar(); } @@ -755,19 +745,6 @@ void SimpleUI::setErrorButtons() evas_object_hide(m_progressBar); } - -void SimpleUI::showSearchBox() -{ - if (m_searchBox.get()) - m_searchBox->show(); -} - -void SimpleUI::hideSearchBox() -{ - if (m_searchBox.get()) - m_searchBox->hide(); -} - void SimpleUI::filterURL(const std::string& url) { BROWSER_LOGD("[%s] url=%s", __func__, url.c_str()); @@ -1195,12 +1172,9 @@ void SimpleUI::favicon_clicked(void *data, Evas_Object */*obj*/, const char */*e { BROWSER_LOGD("[%s],", __func__); SimpleUI *self = reinterpret_cast(data); - if (self->m_searchBox->is_visible()) - self->m_searchBox->hide(); - else if (!self->isHomePageActive() && !self->isErrorPageActive()) + if (!self->isHomePageActive() && !self->isErrorPageActive()) { self->m_simpleURI->clearFocus(); - self->m_searchBox->show(); } } diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index fd0bc5d..793f87e 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -55,7 +55,6 @@ #include "TabList.h" #include "Settings.h" #include "HistoryList.h" -#include "SearchBox.h" #include "NetworkErrorHandler.h" #include "CustomPopup.h" #include "Config.h" @@ -207,9 +206,6 @@ private: void showSettingsMenu(); void hideSettingsMenu(); - void showSearchBox(); - void hideSearchBox(); - void showProgressBar(); void hideProgressBar(); @@ -259,7 +255,6 @@ private: std::shared_ptr m_bookmarksUI; std::shared_ptr m_zoomList; std::shared_ptr m_tabList; - std::shared_ptr m_searchBox; std::shared_ptr m_platformInputManager; std::shared_ptr m_sessionService; tizen_browser::Session::Session m_currentSession; diff --git a/services/SimpleUI/edc/MainLayout.edc b/services/SimpleUI/edc/MainLayout.edc index aa34c1e..3e70303 100644 --- a/services/SimpleUI/edc/MainLayout.edc +++ b/services/SimpleUI/edc/MainLayout.edc @@ -1,5 +1,4 @@ #include "Spacer.edc" -#include "SearchBox.edc" #define DEBUG_RECT_OVER(over_part, r, g, b) \ part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ \ @@ -198,20 +197,6 @@ collections { rel2 { to: "web_view"; relative: 1.0 1.0; } } } - part { name: "search_box"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 1; - min: SEARCH_WIDTH SEARCH_HEIGHT; - max: SEARCH_WIDTH SEARCH_HEIGHT; - align: 1.0 0.0; - rel1 {relative: 0.0 0.0; to: "web_view";} - rel2 {relative: 1.0 1.0; to: "web_view";} - } - } - part {name: "popup_bg"; type: RECT; diff --git a/services/SimpleUI/edc/SearchBox.edc b/services/SimpleUI/edc/SearchBox.edc deleted file mode 100644 index 8903f67..0000000 --- a/services/SimpleUI/edc/SearchBox.edc +++ /dev/null @@ -1,570 +0,0 @@ -#define SEARCH_ENTRY_WIDTH 200 -#define SEARCH_HEIGHT 60 -#define SEARCH_WIDTH 800 -#define OPT_BUTTON_WIDTH 160 -#define TRANSITION_VALUE 0.1 -collections { - group { name: "elm/entry/selection/browser_entry"; - parts { - part { name: "bg"; - scale:1; - type: RECT; - mouse_events: 0; - description { state: "default" 0.0; - color: 0 0 128 64; - } - } - } - } - group { name: "elm/entry/cursor/browser_entry"; - parts { - part { name: "bg"; - scale:1; - type: RECT; - mouse_events: 0; - description { state: "default" 0.0; - color: 69 149 255 255; - min: 2 36; - max: 2 36; - visible: 0; - } - description { - state: "focused" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - } - programs { - program { name: "focused"; - signal: "elm,action,focus"; - source: "elm"; - action: STATE_SET "focused" 0.0; - target: "bg"; - } - program { name: "unfocused"; - signal: "elm,action,unfocus"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "bg"; - } - } - } - group { - name: "elm/entry/base-single/search_entry"; - styles { - style { - name: "browser-entry-uri-style-unselected"; - base: "font=Tizen:style=SVD_Medium font_size="32" wrap=none color=#CCCCCC"; - } - style { - name: "browser-entry-uri-style-selected"; - base: "font=Tizen:style=SVD_Medium font_size="32" wrap=none color=#3D3D3D"; - } - } - data { - item: focus_highlight "off"; - } - parts { - part { - name: "elm.guide"; - scale:1; - type: TEXTBLOCK; - mouse_events: 0; - description { state: "default" 0.0; - visible: 0; - rel1.relative: 0.0 0.0; - rel2.relative: 1.0 1.0; - align: 0.0 0.0; - text { - style: "browser-entry-uri-style-unselected"; - min: 0 1; - } - } - description { state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - description { state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - } - } - part { name: "label.text.clip"; - scale:1; - type: RECT; - description { - state: "default" 0.0; - } - } - part { - name: "elm.text"; - scale:1; - multiline: 0; - entry_mode: EDITABLE; - select_mode: DEFAULT; - cursor_mode: BEFORE; - type: TEXTBLOCK; - clip_to: "label.text.clip"; - source: "elm/entry/selection/browser_entry"; - source4: "elm/entry/cursor/browser_entry"; - description { state: "default" 0.0; - visible: 0; - rel1.relative: 0.0 0.0; - rel2.relative: 1.0 1.0; - align: 0.0 0.0; - text { - style: "browser-entry-uri-style-selected"; - min: 0 1; - } - } - description { state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - } - programs { - program { name: "focus"; - signal: "load"; - source: ""; - action: FOCUS_SET; - target: "elm.text"; - } - program { name: "gdisabled"; - signal: "elm,guide,disabled"; - source: "elm"; - action: STATE_SET "hidden" 0.0; - target: "elm.guide"; - } - program { name: "genabled"; - signal: "elm,guide,enabled"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "elm.guide"; - } - program { - signal: "elm,state,show"; source: "elm"; - action: STATE_SET "visible" 0.0; - transition: LINEAR TRANSITION_VALUE; - target: "elm.guide"; - target: "elm.text"; - } - program { - signal: "elm,state,hide"; source: "elm"; - action: STATE_SET "default" 0.0; - transition: LINEAR TRANSITION_VALUE; - target: "elm.guide"; - target: "elm.text"; - } - } - }//group - group{ name: "search_box"; - images { - image: "search_searchbar_bg_foc.png" COMP; - image: "search_searchbar_bg_nor.png" COMP; - image: "ico_search.png" COMP; - image: "ico_url.png" COMP; - } - parts{ - part { name: "bg_clipper"; - type: RECT; - scale: 1; - description{ - state: "default" 0.0; - visible: 1; - align: 0.0 0.0; - color: 18 22 34 0; - min: SEARCH_WIDTH SEARCH_HEIGHT; - max: SEARCH_WIDTH SEARCH_HEIGHT; - } - description{ - state: "visible" 0.0; - inherit: "default" 0.0; - min: SEARCH_WIDTH SEARCH_HEIGHT; - max: SEARCH_WIDTH SEARCH_HEIGHT; - color: 18 22 34 245; - visible: 1; - } - } - part { name: "bg"; - type: IMAGE; - scale: 1; - clip_to: "bg_clipper"; - description{ - state: "default" 0.0; - visible: 1; - align: 0.0 1.0; - color: 18 22 34 0; - min: SEARCH_WIDTH SEARCH_HEIGHT*2; - max: SEARCH_WIDTH SEARCH_HEIGHT*2; - image.normal: "search_searchbar_bg_nor.png"; - image.border: 5 5 5 5; - rel1 { relative: 0 0; to: "bg_clipper"; } - rel2 { relative: 1 1; to: "bg_clipper"; } - fill { - type: SCALE; - smooth: 0; - origin { - relative: 0 0; - offset: 0 0; - } - size { - relative: 1 1; - offset: 0 0; - } - } - } - description{ - state: "visible" 0.0; - inherit: "default" 0.0; - min: SEARCH_WIDTH SEARCH_HEIGHT*2; - max: SEARCH_WIDTH SEARCH_HEIGHT*2; - color: 18 22 34 245; - visible: 1; - } - } - part { name: "search_swallow"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - align: 0.0 0.85; - min: SEARCH_ENTRY_WIDTH 40; - max: SEARCH_ENTRY_WIDTH 40; - rel1 { relative: 0 0; to: "bg"; offset: 30 0;} - rel2 { relative: 1 1; to: "bg"; } - fixed: 1 1; - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - part { name: "bg_search_over"; - type : RECT; - scale: 1; - description { - state: "default" 0.0; - color: 0 0 0 0; - visible: 0; - align: 0.0 0.5; - rel1 { relative: 0 0; to: "search_swallow"; offset: 0 -5; } - rel2 { relative: 1 1; to: "search_swallow"; } - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - part { name: "bg_search"; - mouse_events: 1; - scale:1; - type: IMAGE; - description { - state: "default" 0.0; - visible: 0; - align: 0.0 0.5; - min: SEARCH_ENTRY_WIDTH 40; - max: SEARCH_ENTRY_WIDTH 40; - fixed: 1 1; - rel1 { relative: 0 0; to: "search_swallow"; offset: 0 -8; } - rel2 { relative: 1 1; to: "search_swallow"; } - image.normal: "search_searchbar_bg_nor.png"; - image.border: 5 5 5 5; - fill { - type: SCALE; - smooth: 0; - origin { - relative: 0 0; - offset: 0 0; - } - size { - relative: 1 1; - offset: 0 0; - } - } - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - part { - name: "search_over"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { - state: "default" 0.0; - visible: 1; - color: 0 0 0 0; - rel1 { relative: 0 0; to: "search_entry_swallow"; } - rel2 { relative: 1 1; to: "search_entry_swallow"; } - } - } - part { name: "search_entry_swallow"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - align: 0.0 0.0; - min: SEARCH_ENTRY_WIDTH-10 40; - max: SEARCH_ENTRY_WIDTH-10 40; - fixed: 1 1; - rel1 { relative: 0 0; to: "search_swallow"; offset: 4 -4;} - rel2 { relative: 1 1; to: "search_swallow";} - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - part { name: "search_opts_prev"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - color: 100 200 100 150; - visible: 0; - min: OPT_BUTTON_WIDTH SEARCH_HEIGHT; - max: OPT_BUTTON_WIDTH SEARCH_HEIGHT; - align: 0.0 0.0; - rel1 { relative: 1 0; to: "search_entry_swallow"; offset: 15 -9; } - rel2 { relative: 1 1; } - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - part { name: "search_opts_next"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - color: 100 100 200 150; - visible: 0; - min: OPT_BUTTON_WIDTH SEARCH_HEIGHT; - max: OPT_BUTTON_WIDTH SEARCH_HEIGHT; - align: 0.0 0.0; - rel1 { relative: 1 0; to: "search_opts_prev"; } - rel2 { relative: 1 1; } - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - part { name: "search_opts_case"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - min: OPT_BUTTON_WIDTH SEARCH_HEIGHT; - max: OPT_BUTTON_WIDTH SEARCH_HEIGHT; - align: 0.0 0.0; - rel1 { relative: 1 0; to: "search_opts_next"; } - rel2 { relative: 1 1; } - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - } - programs { - program { - signal: "elm,state,show"; source: "elm"; - action: STATE_SET "visible" 0.0; - transition: LINEAR TRANSITION_VALUE; - target: "bg"; - target: "bg_clipper"; - target: "search_entry_swallow"; - target: "bg_search"; - target: "search_opts_case"; - target: "search_opts_next"; - target: "search_opts_prev"; - } - program { - signal: "elm,state,hide"; source: "elm"; - action: STATE_SET "default" 0.0; - transition: LINEAR TRANSITION_VALUE; - target: "bg"; - target: "bg_clipper"; - target: "search_entry_swallow"; - target: "bg_search"; - target: "search_opts_case"; - target: "search_opts_next"; - target: "search_opts_prev"; - } - } - } - group { - name: "elm/button/base/default_button"; - parts { - part { - name: "bg"; - type: RECT; - scale: 1; - description { state: "default" 0.0; - visible: 1; - min: 150 40; - max: 150 40; - align: 0.5 0.5; - fixed: 1 1; - color: 225 225 225 0; - } - description { state: "visible" 0.0; - inherit: "default" 0.0; - color: 225 225 225 255; - } - description { state: "focus" 0.0; - inherit: "visible" 0.0; - color: 69 143 255 255; - } - description { state: "dim" 0.0; - inherit: "visible" 0.0; - color: 225 225 225 102; - } - } - part { - name: "elm.text"; - type: TEXT; - scale: 1; - description { state: "default" 0.0; - visible: 1; - fixed: 1 1; - align: 0.0 0.5; - min: 90 40; - max: 90 40; - rel1 { relative: 0.0 0.0; to: "bg"; offset: 30 0;} - rel2 { relative: 1.0 1.0; to: "bg";} - color: 89 89 89 0; - text { - text: "Next"; - font: "font_name"; - size: 30; - align: 0.5 0.5; - } - } - description { state: "visible" 0.0; - inherit: "default" 0.0; - color: 89 89 89 255; - } - description { state: "focus" 0.0; - inherit: "visible" 0.0; - color: 255 255 255 255; - text.font: "Tizen:style=Bold"; - } - description { state: "dim" 0.0; - inherit: "visible" 0.0; - color: 89 89 89 102; - } - } - part { - name: "over"; - scale:1; - mouse_events: 1; - type: RECT; - description { - state: "default" 0.0; - visible: 0; - rel1 { relative: 0.0 0.0; to: "bg";} - rel2 { relative: 1.0 1.0; to: "bg";} - color: 0 0 0 0; - } - description { state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - } - programs{ - program { - name: "mouse_in"; - signal: "mouse,in"; - source: "over"; - action: STATE_SET "focus" 0.0; - target: "elm.text"; - target: "bg"; - script { - new st[31]; - new Float:vl; - get_state(PART:"elm.text", st, 30, vl); - if(!strcmp(st, "visible")) { - set_state(PART:"bg", "focus", 0.0); - set_state(PART:"elm.text", "focus", 0.0); - } - } - } - program { - name: "mouse_out"; - signal: "mouse,out"; - source: "over"; - action: STATE_SET "default" 0.0; - target: "elm.text"; - target: "bg"; - script { - new st[31]; - new Float:vl; - get_state(PART:"elm.text", st, 30, vl); - if(!strcmp(st, "focus")) { - set_state(PART:"bg", "visible", 0.0); - set_state(PART:"elm.text", "visible", 0.0); - } - } - } - program { - name: "mouse_click"; - signal: "mouse,clicked,1"; - source: "over"; - script { - emit("elm,action,click", ""); - } - } - program { - name: "disable"; - signal: "elm,state,disabled"; - source: "elm"; - action: STATE_SET "dim" 0.0; - target: "elm.text"; - target: "bg"; - } - program { - name: "enable"; - signal: "elm,state,enabled"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "elm.text"; - target: "bg"; - } - program { - signal: "elm,state,show"; source: "elm"; - action: STATE_SET "visible" 0.0; - transition: LINEAR TRANSITION_VALUE; - target: "bg"; - target: "elm.text"; - target: "over"; - } - program { - signal: "elm,state,hide"; source: "elm"; - action: STATE_SET "default" 0.0; - transition: LINEAR TRANSITION_VALUE; - target: "bg"; - target: "elm.text"; - target: "over"; - } - } - } -} \ No newline at end of file -- 2.7.4 From 42a0048dfdab872071171f6f92e6cb1e8742e61b Mon Sep 17 00:00:00 2001 From: "sungwon2.han" Date: Tue, 16 Jun 2015 09:49:48 +0900 Subject: [PATCH 03/16] Script files to build the reference browser Change-Id: Ib50f1c53f94c92d44b4e4531d1ef997a08562df7 Signed-off-by: sungwon2.han --- .gbs.conf | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ build.sh | 2 +- 2 files changed, 165 insertions(+), 1 deletion(-) create mode 100755 .gbs.conf diff --git a/.gbs.conf b/.gbs.conf new file mode 100755 index 0000000..6313a06 --- /dev/null +++ b/.gbs.conf @@ -0,0 +1,164 @@ +############################################### +# +# Tizen v3.0 for TV (arm-x11) +# +[obs.tizen] +url = https://api.tizen.org + +[profile.tztv_v3.0] +obs = obs.tizen +repos = repo.tv_arm-x11 +buildroot = ~/GBS-ROOT-3.0-TV + +[repo.tv_arm-x11] +url = http://download.tizen.org/snapshots/tizen/tv/latest/repos/arm-x11/packages/ + +############################################### +# +# Tizen v3.0 for tv (emulator32-x11) +# +[obs.tizentv] +url = https://api.tizen.org + +[profile.tztv_v3.0_emulator] +obs = obs.tizentv +repos = repo.tztv_v3.0_emul +buildroot = ~/GBS-ROOT-3.0-TV-EMUL + +[repo.tztv_v3.0_emul] +url = http://download.tizen.org/snapshots/tizen/tv/latest/repos/emulator32-x11/packages/ + +############################################### +# +# Tizen v3.0 for tv (arm64-x11) +# +[obs.tizentv] +url = https://api.tizen.org + +[profile.tztv_v3.0_arm64-x11] +obs = obs.tizentv +repos = repo.tztv_v3.0_arm64-x11 +buildroot = ~/GBS-ROOT-3.0-TV-arm64-x11 + +[repo.tztv_v3.0_arm64-x11] +url = http://download.tizen.org/snapshots/tizen/tv/latest/repos/arm64-x11/packages/ + +############################################### +# +# Tizen v3.0 for tv (ia32-x11) +# +[obs.tizentv] +url = https://api.tizen.org + +[profile.tztv_v3.0_ia32-x11] +obs = obs.tizentv +repos = repo.tztv_v3.0_ia32-x11 +buildroot = ~/GBS-ROOT-3.0-TV-ia32-x11 + +[repo.tztv_v3.0_ia32-x11] +url = http://download.tizen.org/snapshots/tizen/tv/latest/repos/ia32-x11/packages/ + +############################################### +# +# Tizen v3.0 for tv (x86_64-x11) +# +[obs.tizentv] +url = https://api.tizen.org + +[profile.tztv_v3.0_x86_64-x11] +obs = obs.tizentv +repos = repo.tztv_v3.0_x86_64-x11 +buildroot = ~/GBS-ROOT-3.0-TV-x86_64-x11 + +[repo.tztv_v3.0_x86_64-x11] +url = http://download.tizen.org/snapshots/tizen/tv/latest/repos/x86_64-x11/packages/ + +############################################### +# +# Tizen v3.0 for TV (arm-wayland) +# +[obs.tizen] +url = https://api.tizen.org + +[profile.tztv_v3.0-wayland] +obs = obs.tizen +repos = repo.tv_arm-wayland +buildroot = ~/GBS-ROOT-3.0-TV-wayland + +[repo.tv_arm-wayland] +url = http://download.tizen.org/snapshots/tizen/tv/latest/repos/arm-wayland/packages/ + +############################################### +# +# Tizen v3.0 for tv (emulator32-wayland) +# +[obs.tizentv] +url = https://api.tizen.org + +[profile.tztv_v3.0_emulator-wayland] +obs = obs.tizentv +repos = repo.tztv_v3.0_emul-wayland +buildroot = ~/GBS-ROOT-3.0-TV-EMUL-wayland + +[repo.tztv_v3.0_emul-wayland] +url = http://download.tizen.org/snapshots/tizen/tv/latest/repos/emulator32-wayland/packages/ + +############################################### +# +# Tizen v3.0 for tv (arm64-wayland) +# +[obs.tizentv] +url = https://api.tizen.org + +[profile.tztv_v3.0_arm64-wayland] +obs = obs.tizentv +repos = repo.tztv_v3.0_arm64-wayland +buildroot = ~/GBS-ROOT-3.0-TV-arm64-wayland + +[repo.tztv_v3.0_arm64-wayland] +url = http://download.tizen.org/snapshots/tizen/tv/latest/repos/arm64-wayland/packages/ + +############################################### +# +# Tizen v3.0 for mobile (arm64-wayland) +# +[obs.tizentv] +url = https://api.tizen.org + +[profile.tzmo_v3.0_arm64-wayland] +obs = obs.tizentv +repos = repo.tzmo_v3.0_arm64-wayland +buildroot = ~/GBS-ROOT-3.0-MOBILE-arm64-wayland + +[repo.tzmo_v3.0_arm64-wayland] +url = http://download.tizen.org/snapshots/tizen/mobile/latest/repos/arm64-wayland/packages/ + +############################################### +# +# Tizen v3.0 for tv (ia32-wayland) +# +[obs.tizentv] +url = https://api.tizen.org + +[profile.tztv_v3.0_ia32-wayland] +obs = obs.tizentv +repos = repo.tztv_v3.0_ia32-wayland +buildroot = ~/GBS-ROOT-3.0-TV-ia32-wayland + +[repo.tztv_v3.0_ia32-wayland] +url = http://download.tizen.org/snapshots/tizen/tv/latest/repos/ia32-wayland/packages/ + +############################################### +# +# Tizen v3.0 for tv (x86_64-wayland) +# +[obs.tizentv] +url = https://api.tizen.org + +[profile.tztv_v3.0_x86_64-wayland] +obs = obs.tizentv +repos = repo.tztv_v3.0_x86_64-wayland +buildroot = ~/GBS-ROOT-3.0-TV-x86_64-wayland + +[repo.tztv_v3.0_x86_64-wayland] +url = http://download.tizen.org/snapshots/tizen/tv/latest/repos/x86_64-wayland/packages/ diff --git a/build.sh b/build.sh index 4478e3a..b61fe4f 100755 --- a/build.sh +++ b/build.sh @@ -1 +1 @@ -gbs -c .gbs.conf build -P tztv_v3.0 -A armv7l --include-all $@ +gbs -c .gbs.conf build -P tztv_v3.0-wayland -A armv7l --include-all $@ -- 2.7.4 From aa8269d97a8f9eca52623023a6b982680c7860da Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Mon, 22 Jun 2015 16:45:15 +0900 Subject: [PATCH 04/16] Modifying path for db files Browser crashes due to the error below. >> Error while starting transaction >> UNHANDLED EXCEPTION attempt to write a readonly database Platform only allows following path to access db files. >> /home/{ACCOUNT}/.applications/dbspace/ This patch supports multi-user mode and fixes the crash. However, this should be reverted later once multi-user db is supported via browser-provider. Change-Id: I2a2cf7d3956dbba37653b773b203706f866e96a9 Signed-off-by: Youngsoo Choi --- CMakeLists.txt | 1 - core/Config/Config.cpp | 14 +++++++++----- core/Config/ConfigValues.h.in | 1 - packaging/org.tizen.browser.spec | 16 ++-------------- 4 files changed, 11 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cde5451..94aed0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,6 @@ cmake_minimum_required(VERSION 2.8) SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(BINDIR "${PREFIX}/bin") SET(RESDIR "${PREFIX}/res" CACHE STRING "The path of resources") -SET(RESDBDIR "/opt${PREFIX}/res") SET(WEBKITDIR "/opt/usr/data/webkit" CACHE STRING "The path of web engine") SET(EDJE_DIR "${RESDIR}/edje/") SET(CERTS_DIR "${RESDIR}/certs/") diff --git a/core/Config/Config.cpp b/core/Config/Config.cpp index 3e274ea..2665734 100644 --- a/core/Config/Config.cpp +++ b/core/Config/Config.cpp @@ -16,6 +16,7 @@ #include "browser_config.h" #include "Config.h" +#include namespace tizen_browser { @@ -24,13 +25,16 @@ namespace config void DefaultConfig::load(const std::string &) { + const char *db_path = NULL; + db_path = tzplatform_getenv(TZ_USER_DB); + m_data["main_service_name"] = std::string("org.tizen.browser.base_UI"); //m_data["favorite_service_name"] = std::string("org.tizen.browser.service.favorite.browserProvider"); m_data["favorite_service_name"] = std::string("org.tizen.browser.favoriteservice"); - m_data["DB_BOOKMARK"] = std::string("bookmark.db"); - m_data["DB_SETTINGS"] = std::string("settings.db"); - m_data["DB_HISTORY"] = std::string("history.db"); - m_data["DB_SESSION"] = std::string("session.db"); + m_data["DB_BOOKMARK"] = std::string(".browser.bookmark.db"); + m_data["DB_SETTINGS"] = std::string(".browser.settings.db"); + m_data["DB_HISTORY"] = std::string(".browser.history.db"); + m_data["DB_SESSION"] = std::string(".browser.session.db"); m_data["TOOLTIP_DELAY"] = 0.05; // time from mouse in to tooltip show m_data["TOOLTIP_HIDE_TIMEOUT"] = 2.0; // time from tooltip show to tooltip hide @@ -39,7 +43,7 @@ void DefaultConfig::load(const std::string &) # include "ConfigValues.h" - + m_data["resourcedb/dir"] = std::string(db_path)+"/"; } void DefaultConfig::store(const std::string & ) diff --git a/core/Config/ConfigValues.h.in b/core/Config/ConfigValues.h.in index ae28002..53fce72 100644 --- a/core/Config/ConfigValues.h.in +++ b/core/Config/ConfigValues.h.in @@ -1,5 +1,4 @@ //This is template file for configuration variables. m_data["services/dir"] = std::string("@CMAKE_INSTALL_PREFIX@/services"); m_data["resource/dir"] = std::string("@RESDIR@"); -m_data["resourcedb/dir"] = std::string("@RESDBDIR@/db/"); m_data["webkit/dir"] = std::string("@WEBKITDIR@"); diff --git a/packaging/org.tizen.browser.spec b/packaging/org.tizen.browser.spec index ffbba3b..66ddef9 100644 --- a/packaging/org.tizen.browser.spec +++ b/packaging/org.tizen.browser.spec @@ -35,7 +35,8 @@ BuildRequires: pkgconfig(capi-appfw-application) BuildRequires: pkgconfig(capi-network-connection) BuildRequires: pkgconfig(libpng) BuildRequires: pkgconfig(libcurl) -BuildRequires: browser-provider-devel +BuildRequires: pkgconfig(libtzplatform-config) +BuildRequires: browser-provider-devel BuildRequires: cmake BuildRequires: edje-tools @@ -56,7 +57,6 @@ BuildRequires: pkgconfig(dlog) %define _appdir /usr/apps/%{name} %define _bindir %{_appdir}/bin -%define _appdatadir /opt/usr/apps/%{name} %define COVERAGE_STATS %{?coverage_stats:ON}%{!?coverage_stats:OFF} %define _manifestdir /usr/share/packages @@ -98,23 +98,11 @@ cd %{_build_dir} %post -#Prepare files -if [ ! -f %{_appdatadir}/res/db/bookmark.db ]; -then - mkdir -p %{_appdatadir}/res/db - chsmack -a "dtv-org.tizen.browser" %{_appdatadir}/res/db - sqlite3 %{_appdatadir}/res/db/bookmark.db '' - chsmack -a "dtv-org.tizen.browser" %{_appdatadir}/res/db/bookmark.db -fi - mkdir -p /opt/usr/data/webkit/storage mkdir -p /opt/usr/data/webkit/favicon #Change ownership and privileges -chown -R 5000:5000 %{_appdatadir}/res/db chown -R 5000:5000 /opt/usr/data/webkit -chmod -R 777 %{_appdatadir}/res/db -chmod 777 %{_appdatadir}/res/db/bookmark.db chmod -R 660 /opt/usr/data/webkit %files -- 2.7.4 From c3d5d61f316279c6b1aed481337368ca588628d4 Mon Sep 17 00:00:00 2001 From: Gajendra N Date: Fri, 26 Jun 2015 14:13:58 +0530 Subject: [PATCH 05/16] fixup! Unable to delete all history items. 1) Fixes popup button not disabled on deleting last item. 2) Shows proper date and time. Change-Id: I323fdd6a6e7871f153c68f7c10d8587638a1de28 --- services/HistoryService/HistoryService.h | 1 + services/HistoryService/src/HistoryService.cpp | 66 ++++++++++++++++++++++---- services/SimpleUI/SimpleUI.cpp | 1 + 3 files changed, 60 insertions(+), 8 deletions(-) diff --git a/services/HistoryService/HistoryService.h b/services/HistoryService/HistoryService.h index e92cf5d..0e09cab 100644 --- a/services/HistoryService/HistoryService.h +++ b/services/HistoryService/HistoryService.h @@ -43,6 +43,7 @@ public: virtual ~HistoryService(); virtual std::string getName(); + int getHistoryId(const std::string & url); /** * @throws HistoryException on error */ diff --git a/services/HistoryService/src/HistoryService.cpp b/services/HistoryService/src/HistoryService.cpp index a377bf1..5aff218 100644 --- a/services/HistoryService/src/HistoryService.cpp +++ b/services/HistoryService/src/HistoryService.cpp @@ -17,12 +17,16 @@ #include #include #include +#include +#include +#include #include "ServiceManager.h" #include "HistoryService.h" #include "HistoryItem.h" #include "AbstractWebEngine.h" #include "EflTools.h" + namespace tizen_browser { namespace services @@ -60,8 +64,7 @@ void HistoryService::setStorageServiceTestMode(bool testmode) { } int HistoryService::getHistoryItemsCount(){ - return 1; - //return getStorageManager()->getHistoryItemsCount(); + return history_list.size(); } static int __get_duplicated_ids_p(int **ids, int *count, const int limit, const int offset, @@ -122,11 +125,12 @@ void HistoryService::addHistoryItem(std::shared_ptr his){ bp_history_adaptor_set_url(id, (his->getUrl()).c_str()); bp_history_adaptor_set_title(id, (his->getTitle()).c_str()); - + bp_history_adaptor_set_date_visited(id,-1); std::unique_ptr favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon); unsigned char * fav = std::move((unsigned char*)favicon_blob->getData()); bp_history_adaptor_set_icon(id, favicon->width, favicon->height, fav, favicon_blob->getLength()); + history_list.push_back(his); BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); } @@ -141,7 +145,28 @@ void HistoryService::insertOrRefresh(std::shared_ptr hi) { */ void HistoryService::clearAllHistory() { - getStorageManager()->deleteHistory(); + bp_history_adaptor_reset(); + history_list.clear(); +} + +int HistoryService::getHistoryId(const std::string & url) +{ + bp_history_rows_cond_fmt conds; + conds.limit = -1; + conds.offset = 0; + conds.order_offset = BP_HISTORY_O_DATE_CREATED; + conds.ordering = 0; + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_ALL; + int *ids = 0; + int ids_count = 0; + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&ids_count, &conds, BP_HISTORY_O_URL, url.c_str(), 0); + if (ids_count!=0){ + int i = *ids; + free(ids); + return i; + } + return 0; } /** @@ -149,9 +174,12 @@ void HistoryService::clearAllHistory() */ void HistoryService::clearURLHistory(const std::string & url) { - getStorageManager()->deleteHistory(url); - if(0 == getHistoryItemsCount()){ - historyEmpty(true); + int id = getHistoryId(url); + if (id != 0) + bp_history_adaptor_delete(id); + if (0 == (getHistoryItemsCount() - 1)) { + historyEmpty(true); + history_list.clear(); } } @@ -182,13 +210,35 @@ HistoryItemVector& HistoryService::getHistoryItems(int historyDepthInDays, int m BROWSER_LOGD("Error! Could not get ids!"); } - bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON); + bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); for(int i = 0; i< (*count1); i++){ bp_history_info_fmt history_info; bp_history_adaptor_get_info(ids[i],offset,&history_info); + int date; + bp_history_adaptor_get_date_created(ids[i], &date); + + struct tm *item_time_info; + time_t item_time = (time_t)date; + item_time_info = localtime(&item_time); + + int m_year = item_time_info->tm_year; + int m_month = item_time_info->tm_mon + 1; + int m_day = item_time_info->tm_yday; + int m_month_day = item_time_info->tm_mday; + int m_date = date; + int min = item_time_info->tm_min; + int hour= item_time_info->tm_hour; + int sec = item_time_info->tm_sec; + m_year = 2000 + m_year % 100; + std::shared_ptr history = std::make_shared(std::string(history_info.url)); + boost::gregorian::date d(m_year,m_month,m_month_day); + boost::posix_time::ptime t(d,boost::posix_time::time_duration(hour,min,sec)); + history->setLastVisit(t); + history->setUrl(std::string(history_info.url ? history_info.url : "")); + history->setTitle(std::string(history_info.title ? history_info.title : "")); history_list.push_back(history); } ids = NULL; diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 3b6ee0d..a25ef5d 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -978,6 +978,7 @@ void SimpleUI::disableHistoryButton(bool flag) { BROWSER_LOGD("[%s:%d] flag:%d ", __PRETTY_FUNCTION__, __LINE__, flag); m_history->setEnabled(!flag); + m_settingDeleteHistory->setEnabled(m_historyService->getHistoryItemsCount()); hidePopup(); } -- 2.7.4 From d1cea92b3c285b651f1ea525acc8c62317f5a449 Mon Sep 17 00:00:00 2001 From: Jung Ick Guack Date: Tue, 30 Jun 2015 21:37:15 +0900 Subject: [PATCH 06/16] 1) Fixed a crash of adding bookmark. (Added null checking) 2) Added privilege for using browser-provider Change-Id: I2c9c8b4208e9d1ff7b951419fad15ed404a170bb Signed-off-by: Jung Ick Guack --- manifest.xml.in | 4 ++++ services/BookmarkService/BookmarkService.cpp | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/manifest.xml.in b/manifest.xml.in index b8756da..8c4c7f1 100644 --- a/manifest.xml.in +++ b/manifest.xml.in @@ -73,4 +73,8 @@ + + http://tizen.org/privilege/bookmark.admin + http://tizen.org/privilege/history.admin + diff --git a/services/BookmarkService/BookmarkService.cpp b/services/BookmarkService/BookmarkService.cpp index 2fd0bf7..99b14e2 100644 --- a/services/BookmarkService/BookmarkService.cpp +++ b/services/BookmarkService/BookmarkService.cpp @@ -97,14 +97,16 @@ std::shared_ptr BookmarkService::addToBookmarks( bp_bookmark_adaptor_set_url(bookmark_id, address.c_str()); bp_bookmark_adaptor_set_title(bookmark_id, tittle.c_str()); - - std::unique_ptr thumb_blob = tizen_browser::tools::EflTools::getBlobPNG(thumbnail); - unsigned char * thumb = std::move((unsigned char*)thumb_blob->getData()); - bp_bookmark_adaptor_set_snapshot(bookmark_id, thumbnail->width, thumbnail->height, thumb, thumb_blob->getLength()); - - std::unique_ptr favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon); - unsigned char * fav = std::move((unsigned char*)favicon_blob->getData()); - bp_bookmark_adaptor_set_icon(bookmark_id, favicon->width, favicon->height, fav, favicon_blob->getLength()); + if (thumbnail) { + std::unique_ptr thumb_blob = tizen_browser::tools::EflTools::getBlobPNG(thumbnail); + unsigned char * thumb = std::move((unsigned char*)thumb_blob->getData()); + bp_bookmark_adaptor_set_snapshot(bookmark_id, thumbnail->width, thumbnail->height, thumb, thumb_blob->getLength()); + } + if (favicon) { + std::unique_ptr favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon); + unsigned char * fav = std::move((unsigned char*)favicon_blob->getData()); + bp_bookmark_adaptor_set_icon(bookmark_id, favicon->width, favicon->height, fav, favicon_blob->getLength()); + } m_bookmarks.push_back(bookmark); BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -- 2.7.4 From 8d99569cc11767afa8c7fd7cda7289bb5c32d3cc Mon Sep 17 00:00:00 2001 From: Jung Ick Guack Date: Thu, 2 Jul 2015 09:43:32 +0900 Subject: [PATCH 07/16] Changed "opengl" to "3d" on elm_config_accel_preference_set Change-Id: I227e313d22ffaf5b5294da53bbf232d1943cd4f7 Signed-off-by: Jung Ick Guack --- core/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) mode change 100644 => 100755 core/main.cpp diff --git a/core/main.cpp b/core/main.cpp old mode 100644 new mode 100755 index f435d7e..9342b05 --- a/core/main.cpp +++ b/core/main.cpp @@ -38,7 +38,8 @@ const std::string DEFAULT_URL = ""; static bool app_create(void * /*app_data*/) { - elm_config_accel_preference_set("opengl"); +// elm_config_accel_preference_set("opengl"); + elm_config_accel_preference_set("3d"); elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK); // Enabling focus -- 2.7.4 From c55051a1a252e538fd50bdc07fcf17713464a3a1 Mon Sep 17 00:00:00 2001 From: Jung Ick Guack Date: Thu, 2 Jul 2015 09:44:48 +0900 Subject: [PATCH 08/16] Fixed app service is not working during runtime. Change-Id: Ie0ed329ba8449debae7e5d81372097b15c62957e Signed-off-by: Jung Ick Guack --- services/SimpleUI/SimpleUI.cpp | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index a25ef5d..f2567ba 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -294,26 +294,27 @@ int SimpleUI::exec(const std::string& _url) } m_initialised = true; - // only when first run - if (url.empty()) { - BROWSER_LOGD("[%s]: changing to homeUrl", __func__); - switchViewToHomePage(); - filterURL(HomePageURL); - if(lastSession.items().size() >= 1){ - for(auto iter=lastSession.items().begin(), - end=lastSession.items().end(); - iter != end; - iter++ - ){ - openNewTab(iter->second); - } - m_sessionService->getStorage()->deleteSession(lastSession); - } - } - else - openNewTab(url); } + // only when first run + if (url.empty()) { + BROWSER_LOGD("[%s]: changing to homeUrl", __func__); + switchViewToHomePage(); + filterURL(HomePageURL); + if(lastSession.items().size() >= 1){ + for(auto iter=lastSession.items().begin(), + end=lastSession.items().end(); + iter != end; + iter++ + ){ + openNewTab(iter->second); + } + m_sessionService->getStorage()->deleteSession(lastSession); + } + } + else + openNewTab(url); + BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str()); m_simpleURI->setFocus(); -- 2.7.4 From bf8072a5a99133eea135c87d65559ed750dfde72 Mon Sep 17 00:00:00 2001 From: Jung Ick Guack Date: Thu, 2 Jul 2015 22:08:01 +0900 Subject: [PATCH 09/16] 1) Getting favicon by proper API. 2) Enabling create new tab by tag target attribute. - Removed smart class, Using smart callback 3) Changed toast text when delete data from setting 4) Not set user agent by full string, just set applicatino name for UA 5) Disabled function of private browsing Change-Id: I712044d64b791f28cd9608e876ba9472e8a08300 Signed-off-by: Jung Ick Guack --- services/SimpleUI/SimpleUI.cpp | 4 +-- services/WebKitEngineService/WebView.cpp | 58 ++++++++++++++++++++++++++------ services/WebKitEngineService/WebView.h | 1 + 3 files changed, 50 insertions(+), 13 deletions(-) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index f2567ba..7e514cc 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -422,7 +422,7 @@ void SimpleUI::connectActions() m_showSettingsPopup->triggered.connect(boost::bind(&SimpleUI::showSettingsMenu, this)); // m_settingPointerMode->toggled.connect(boost::bind(&tizen_browser::services::PlatformInputManager::setPointerModeEnabled, m_platformInputManager.get(), _1)); - m_settingPrivateBrowsing->toggled.connect(boost::bind(&SimpleUI::settingsPrivateModeSwitch, this, _1)); +// m_settingPrivateBrowsing->toggled.connect(boost::bind(&SimpleUI::settingsPrivateModeSwitch, this, _1)); m_settingDeleteHistory->triggered.connect(boost::bind(&SimpleUI::settingsDeleteHistory, this)); m_settingDeleteData->triggered.connect(boost::bind(&SimpleUI::settingsDeleteData, this));; m_settingDeleteFavorite->triggered.connect(boost::bind(&SimpleUI::settingsDeleteFavorite, this));; @@ -1061,7 +1061,7 @@ void SimpleUI::onDeleteDataButton(PopupButtons button, std::shared_ptr< PopupDat BROWSER_LOGD("[%s]: OK", __func__); m_webEngine->clearPrivateData(); webTitleBar->removeFavIcon(); - webTitleBar->show("Data deleted"); + webTitleBar->show("All cookies and cache are deleted"); hidePopup(); } } diff --git a/services/WebKitEngineService/WebView.cpp b/services/WebKitEngineService/WebView.cpp index 963e192..75ea343 100644 --- a/services/WebKitEngineService/WebView.cpp +++ b/services/WebKitEngineService/WebView.cpp @@ -46,6 +46,7 @@ #include "ServiceManager.h" #define certificate_crt_path CERTS_DIR +#define APPLICATION_NAME_FOR_USER_AGENT "SamsungBrowser/1.0" using namespace tizen_browser::tools; @@ -75,6 +76,8 @@ WebView::~WebView() void WebView::init(Evas_Object * opener) { #if defined(USE_EWEBKIT) + +#if 0 //not using smart class static Ewk_View_Smart_Class *clasz = NULL; Ewk_Context *context = ewk_context_default_get(); if (!clasz) { @@ -84,13 +87,11 @@ void WebView::init(Evas_Object * opener) // clasz->run_javascript_alert = onJavascriptAlert; // clasz->run_javascript_confirm = onJavascriptConfirm; // clasz->run_javascript_prompt = onJavascriptPrompt; -// clasz->window_create = onWindowCreate; -// clasz->window_close = onWindowClose; - + clasz->window_create = onWindowCreate; + clasz->window_close = onWindowClose; ewk_context_cache_model_set(context, EWK_CACHE_MODEL_PRIMARY_WEBBROWSER); ewk_context_certificate_file_set(context, certificate_crt_path); - } Evas_Smart *smart = evas_smart_class_new(&clasz->sc); @@ -98,8 +99,12 @@ void WebView::init(Evas_Object * opener) /// \todo: Consider process model. Now, One UIProcess / One WebProcess. // if (opener) // m_ewkView = ewk_view_smart_add(evas_object_evas_get(m_parent), smart, context, ewk_view_page_group_get(opener)); -// else + else m_ewkView = ewk_view_smart_add(evas_object_evas_get(m_parent), smart, context, ewk_page_group_create(NULL)); +#else + m_ewkView = ewk_view_add(evas_object_evas_get(m_parent)); +// Ewk_Context *context = ewk_view_context_get(m_ewkView); +#endif evas_object_data_set(m_ewkView, "_container", this); BROWSER_LOGD("%s:%d %s self=%p", __FILE__, __LINE__, __func__, this); @@ -107,14 +112,14 @@ void WebView::init(Evas_Object * opener) evas_object_color_set(m_ewkView, 255, 255, 255, 255); evas_object_size_hint_weight_set(m_ewkView, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(m_ewkView, EVAS_HINT_FILL, EVAS_HINT_FILL); - ewk_view_user_agent_set(m_ewkView, "Mozilla/5.0 (X11; SMART-TV; Linux) AppleWebkit/538.1 (KHTML, like Gecko) Safari/538.1"); + ewk_view_application_name_for_user_agent_set(m_ewkView, APPLICATION_NAME_FOR_USER_AGENT); //\todo: when value is other than 1.0, scroller is located improperly // ewk_view_device_pixel_ratio_set(m_ewkView, 1.0f); #if PLATFORM(TIZEN) ewk_view_resume(m_ewkView); #endif - +#if 0 // set local storage, favion, cookies std::string webkit_path = boost::any_cast (config.get("webkit/dir")); // ewk_context_web_storage_path_set(context, (webkit_path + std::string("/storage")).c_str()); @@ -127,7 +132,7 @@ void WebView::init(Evas_Object * opener) // ewk_cookie_manager_widget_cookie_directory_set(ewk_context_cookie_manager_get(context), webkit_path.c_str()); ewk_favicon_database_icon_change_callback_add(ewk_context_favicon_database_get(context), __faviconChanged, this); - +#endif setupEwkSettings(); registerCallbacks(); #else @@ -149,6 +154,8 @@ void WebView::registerCallbacks() evas_object_smart_callback_add(m_ewkView, "back,forward,list,changed", __backForwardListChanged, this); + evas_object_smart_callback_add(m_ewkView, "create,window", __OnNewWindowRequest, this); + evas_object_smart_callback_add(m_ewkView, "geolocation,permission,request", __geolocationPermissionRequest, this); evas_object_smart_callback_add(m_ewkView, "usermedia,permission,request", __usermediaPermissionRequest, this); evas_object_smart_callback_add(m_ewkView, "notification,permission,request", __notificationPermissionRequest, this); @@ -177,6 +184,8 @@ void WebView::unregisterCallbacks() evas_object_smart_callback_del_full(m_ewkView, "back,forward,list,changed", __backForwardListChanged, this); + evas_object_smart_callback_del_full(m_ewkView, "create,window", __OnNewWindowRequest, this); + evas_object_smart_callback_del_full(m_ewkView, "geolocation,permission,request", __geolocationPermissionRequest, this); evas_object_smart_callback_del_full(m_ewkView, "usermedia,permission,request", __usermediaPermissionRequest, this); evas_object_smart_callback_del_full(m_ewkView, "notification,permission,request", __notificationPermissionRequest, this); @@ -712,6 +721,30 @@ void WebView::__backForwardListChanged(void * data, Evas_Object * /* obj */, voi self->forwardEnableChanged(self->isForwardEnabled()); } +void WebView::__OnNewWindowRequest(void *data, Evas_Object*, void* out) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + + WebView * self = reinterpret_cast(data); + BROWSER_LOGD("Window creating in tab: %s", self->getTabId().toString().c_str()); + + std::shared_ptr> m_webEngine; + m_webEngine = std::dynamic_pointer_cast + < + basic_webengine::AbstractWebEngine,tizen_browser::core::AbstractService + > + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webkitengineservice")); + M_ASSERT(m_webEngine); + + /// \todo: Choose newly created tab. + TabId id = m_webEngine->addTab(std::string(), &self->getTabId()); + BROWSER_LOGD("Created tab: %s", id.toString().c_str()); + + Evas_Object* tab_ewk_view = m_webEngine->getTabView(id); + *static_cast(out) = tab_ewk_view; +} + + #if PLATFORM(TIZEN) void WebView::__faviconChanged(const char * uri, void * data) #else @@ -965,12 +998,15 @@ std::shared_ptr WebView::getFavicon() { #if defined(USE_EWEBKIT) if (faviconImage.get() == NULL) { -//#if PLATFORM(TIZEN) + +#if PLATFORM(TIZEN) // Evas_Object * favicon = ewk_view_favicon_get(m_ewkView); -//#else + Evas_Object * favicon = ewk_context_icon_database_icon_object_add(ewk_view_context_get(m_ewkView), ewk_view_url_get(m_ewkView),evas_object_evas_get(m_ewkView)); +#else Ewk_Favicon_Database * database = ewk_context_favicon_database_get(ewk_view_context_get(m_ewkView)); Evas_Object * favicon = ewk_favicon_database_icon_get(database, ewk_view_url_get(m_ewkView), evas_object_evas_get(m_ewkView)); -//#endif +#endif + #ifndef NDEBUG int w = 0, h = 0; evas_object_image_size_get(favicon, &w, &h); diff --git a/services/WebKitEngineService/WebView.h b/services/WebKitEngineService/WebView.h index 0b6b504..ce6233d 100644 --- a/services/WebKitEngineService/WebView.h +++ b/services/WebKitEngineService/WebView.h @@ -165,6 +165,7 @@ private: static void __urlChanged(void * data, Evas_Object * obj, void * event_info); static void __backForwardListChanged(void * data, Evas_Object * obj, void * event_info); + static void __OnNewWindowRequest(void *data, Evas_Object*, void* out); // Favicon - from database #if defined(USE_EWEBKIT) -- 2.7.4 From a16dfb0bd899bd791f1aff1eebc501b2a3153a45 Mon Sep 17 00:00:00 2001 From: Jung Ick Guack Date: Thu, 2 Jul 2015 22:23:14 +0900 Subject: [PATCH 10/16] Release 0.0.9 Change-Id: I8d0ec64259ef4e777885a88cbb589a810d0a52c4 Signed-off-by: Jung Ick Guack --- packaging/org.tizen.browser.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/org.tizen.browser.spec b/packaging/org.tizen.browser.spec index 66ddef9..44c7454 100644 --- a/packaging/org.tizen.browser.spec +++ b/packaging/org.tizen.browser.spec @@ -1,6 +1,6 @@ Name: org.tizen.browser Summary: Tizen TV Open Browser -Version: 0.0.8 +Version: 0.0.9 Release: 0 Group: Applications/Web License: Apache-2.0 -- 2.7.4 From efd182a79d7c101a9a673a27c02f1d4331fdd373 Mon Sep 17 00:00:00 2001 From: "sungwon2.han" Date: Mon, 6 Jul 2015 15:37:14 +0900 Subject: [PATCH 11/16] Change to use wayland functions instead of x functions ecore_x_window_size_get --> ecore_wl_screen_size_get Change-Id: Ib72381ba8e5e515126afe3db2c83d964c0ccd563 Signed-off-by: sungwon2.han --- services/SimpleUI/SimpleUI.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 7e514cc..25e1648 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include "Config.h" @@ -115,11 +116,12 @@ int SimpleUI::exec(const std::string& _url) elm_win_alpha_set(m_window.get(), EINA_FALSE); // creatin main window - //int width = 1920; - //int height = 1080; + int width = 0; + int height = 0; //ecore_x_window_size_get(ecore_x_window_root_first_get(), &width, &height); - //evas_object_move(m_window.get(), 0, 0); - //evas_object_resize(m_window.get(), width, height); + ecore_wl_screen_size_get(&width, &height); + evas_object_move(m_window.get(), 0, 0); + evas_object_resize(m_window.get(), width, height); // create main layout m_mainLayout = elm_layout_add(m_window.get()); -- 2.7.4 From fcd845fabd9482713d888d0303b221a7428a0ee0 Mon Sep 17 00:00:00 2001 From: "sungwon2.han" Date: Mon, 6 Jul 2015 17:59:07 +0900 Subject: [PATCH 12/16] Temporarily comment out "Back key" process routine Change-Id: I29a9b4ba24a02d78e33c7fc88447187eed59e89c Signed-off-by: sungwon2.han --- services/PlatformInputManager/PlatformInputManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/PlatformInputManager/PlatformInputManager.cpp b/services/PlatformInputManager/PlatformInputManager.cpp index b4c6925..e7cc333 100644 --- a/services/PlatformInputManager/PlatformInputManager.cpp +++ b/services/PlatformInputManager/PlatformInputManager.cpp @@ -170,8 +170,8 @@ Eina_Bool PlatformInputManager::__filter(void *data, void */*loop_data*/, int ty self->rightPressed(); else if(!keyName.compare("KEY_ENTER")) self->enterPressed(); - else if(!keyName.compare("BackSpace")) - self->backPressed(); +// else if(!keyName.compare("BackSpace")) +// self->backPressed(); } else if(type == ECORE_EVENT_KEY_UP) { M_ASSERT(event); Ecore_Event_Key *ev = static_cast(event); -- 2.7.4 From 9dff14d6598e027d47bc2d8de39eccbd88d90c89 Mon Sep 17 00:00:00 2001 From: "sungwon2.han" Date: Tue, 7 Jul 2015 13:50:54 +0900 Subject: [PATCH 13/16] Delete "Private Browsing" menu item from "Settings" Change-Id: Ifb7a23d1bbc618469f055054188e5bc51f0bcc59 Signed-off-by: sungwon2.han --- services/SimpleUI/SimpleUI.cpp | 4 +++- services/SimpleUI/SimpleUI.h | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 25e1648..11dd807 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -388,11 +388,13 @@ void SimpleUI::createActions() m_settingPointerMode->setChecked(m_platformInputManager->getPointerModeEnabled()); m_settingPointerMode->setEnabled(true); */ +/* m_settingPrivateBrowsing = sharedAction(new Action("Private browsing")); m_settingPrivateBrowsing->setToolTip("On exit from private mode all cookies, history, and stored data will be deleted"); m_settingPrivateBrowsing->setCheckable(true); m_settingPrivateBrowsing->setChecked(m_webEngine->isPrivateMode()); m_settingPrivateBrowsing->setEnabled(true); +*/ m_settingDeleteHistory = sharedAction(new Action("Delete history")); m_settingDeleteHistory->setToolTip("Delete History"); @@ -943,7 +945,7 @@ void SimpleUI::showSettingsMenu() m_settings = std::make_shared(m_window, rightButtonBar->getButton("setting_button")); //m_settings->addAction( m_settingPointerMode); - m_settings->addAction( m_settingPrivateBrowsing); + //m_settings->addAction( m_settingPrivateBrowsing); m_settings->addAction( m_settingDeleteHistory); m_settings->addAction( m_settingDeleteData); m_settings->addAction( m_settingDeleteFavorite); diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index 793f87e..5c5f736 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -146,7 +146,7 @@ private: sharedAction m_zoom_in; sharedAction m_showSettingsPopup; sharedAction m_settingPointerMode; - sharedAction m_settingPrivateBrowsing; +// sharedAction m_settingPrivateBrowsing; sharedAction m_settingDeleteHistory; sharedAction m_settingDeleteData; sharedAction m_settingDeleteFavorite; -- 2.7.4 From 62504c62a996bff27364d3647ced0a2ea022ac15 Mon Sep 17 00:00:00 2001 From: "sungwon2.han" Date: Tue, 7 Jul 2015 14:23:30 +0900 Subject: [PATCH 14/16] Change text wrap type of popup object from CHAR to WORD Change-Id: Ib47aa1c143aca49c0fe079383efc77e0aaaacf68 Signed-off-by: sungwon2.han --- services/SimpleUI/SimplePopup.cpp | 2 +- services/SimpleUI/SimpleUI.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/SimpleUI/SimplePopup.cpp b/services/SimpleUI/SimplePopup.cpp index f732b78..363e905 100644 --- a/services/SimpleUI/SimplePopup.cpp +++ b/services/SimpleUI/SimplePopup.cpp @@ -48,7 +48,7 @@ namespace base_ui else elm_object_text_set(popup, message.c_str()); - elm_popup_content_text_wrap_type_set(popup, ELM_WRAP_CHAR); + elm_popup_content_text_wrap_type_set(popup, ELM_WRAP_WORD); elm_object_part_text_set(popup, "title,text", title.c_str()); int buttonsCounter = 1; diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 11dd807..ef0d403 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -1054,7 +1054,7 @@ void SimpleUI::onDeleteHistoryButton(PopupButtons button, std::shared_ptr< Popup m_historyService->clearAllHistory(); m_history->setEnabled(false); webTitleBar->removeFavIcon(); - webTitleBar->show("History deleted"); + webTitleBar->show("All histories are deleted"); hidePopup(); } } -- 2.7.4 From 5a46456b251233e8cb1e9bbbe2582ec93ecd7150 Mon Sep 17 00:00:00 2001 From: Jung Ick Guack Date: Thu, 9 Jul 2015 10:18:46 +0900 Subject: [PATCH 15/16] Fixed privilege for web-history.admin Change-Id: I3c3c35421d7bb229af00e283e4686eafde7268a4 Signed-off-by: Jung Ick Guack --- manifest.xml.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.xml.in b/manifest.xml.in index 8c4c7f1..830ea63 100644 --- a/manifest.xml.in +++ b/manifest.xml.in @@ -75,6 +75,6 @@ http://tizen.org/privilege/bookmark.admin - http://tizen.org/privilege/history.admin + http://tizen.org/privilege/web-history.admin -- 2.7.4 From f3c7262dd08ea78fa364c2012b51b3b3f085e008 Mon Sep 17 00:00:00 2001 From: "k.lis2" Date: Wed, 29 Jul 2015 15:44:44 +0200 Subject: [PATCH 16/16] Task TT-75 Implement "Main page loading UI" view Merge main page UI from the new ui imeplementation. This commit includes the following major changes: * Remove BookmarksUI service * Add MainUI service * Add BookmarksManager * Merge all changes in SimpleUI, code which refers to parts which are to be merged in consecutive tasks is currently ifdef'ed * Merge all changes in BookmarkService and HistoryService Change-Id: Idbdfd334d61af3370be79fa936a31a5e044e514c --- browser_config.h | 3 + core/AbstractInterfaces/AbstractFavoriteService.h | 31 +- core/Config/Config.h | 2 - core/Tools/BookmarkItem.cpp | 1 - core/Tools/BookmarkItem.h | 14 +- core/main.cpp | 5 +- scripts/astylerc | 20 + services/BookmarkService/BookmarkService.cpp | 1260 +++++++++++++++- services/BookmarkService/BookmarkService.h | 78 +- services/BookmarksUI/BookmarksUI.cpp | 276 ---- services/BookmarksUI/BookmarksUI.h | 75 - services/BookmarksUI/edc/Bookmarks.edc | 440 ------ services/BookmarksUI/images/ico_delete.png | Bin 18365 -> 0 bytes services/CMakeLists.txt | 11 +- services/HistoryService/CMakeLists.txt | 4 +- services/HistoryService/{src => }/HistoryItem.cpp | 12 + services/HistoryService/HistoryItem.h | 8 +- services/HistoryService/HistoryService.cpp | 396 +++++ services/HistoryService/HistoryService.h | 9 +- services/HistoryService/src/HistoryService.cpp | 256 ---- services/{BookmarksUI => MainUI}/CMakeLists.txt | 16 +- services/MainUI/MainUI.cpp | 559 ++++++++ services/MainUI/MainUI.h | 106 ++ services/MainUI/edc/MainUI.edc | 1505 ++++++++++++++++++++ services/{BookmarksUI => MainUI}/edc/error.edc | 0 .../images/web_frame_selected.png | Bin .../images/web_shadow.png} | Bin 18109 -> 17700 bytes .../PlatformInputManager/PlatformInputManager.cpp | 5 +- services/SimpleUI/BookmarksManager.cpp | 411 ++++++ services/SimpleUI/BookmarksManager.h | 99 ++ services/SimpleUI/CMakeLists.txt | 31 +- services/SimpleUI/HistoryList.cpp | 8 + services/SimpleUI/SimplePopup.cpp | 9 +- services/SimpleUI/SimpleUI.cpp | 801 +++++++---- services/SimpleUI/SimpleUI.h | 114 +- services/SimpleUI/edc/BookmarksManager.edc | 574 ++++++++ services/SimpleUI/edc/LeftButtonBar.edc | 39 +- services/SimpleUI/edc/MainLayout.edc | 64 +- services/SimpleUI/edc/RightButtonBar.edc | 92 +- services/SimpleUI/edc/webview.edc | 91 ++ services/SimpleUI/images/Black_dot.png | Bin 0 -> 1232 bytes services/SimpleUI/images/btn_bar_back_nor.png | Bin 0 -> 3362 bytes services/SimpleUI/images/btn_bar_forward_nor.png | Bin 0 -> 3385 bytes services/SimpleUI/images/btn_bar_manager_nor.png | Bin 0 -> 2988 bytes services/SimpleUI/images/btn_bar_more_nor.png | Bin 0 -> 3032 bytes services/SimpleUI/images/btn_bar_reload_nor.png | Bin 0 -> 3547 bytes services/SimpleUI/images/btn_bar_stop_nor.png | Bin 0 -> 3255 bytes .../SimpleUI/images/btn_bar_vertical_settings.png | Bin 0 -> 3123 bytes services/SimpleURI/edc/URIEntry.edc | 198 +-- .../WebKitEngineService/WebKitEngineService.cpp | 28 +- services/WebKitEngineService/WebView.cpp | 37 +- 51 files changed, 5940 insertions(+), 1748 deletions(-) create mode 100644 scripts/astylerc delete mode 100644 services/BookmarksUI/BookmarksUI.cpp delete mode 100644 services/BookmarksUI/BookmarksUI.h delete mode 100644 services/BookmarksUI/edc/Bookmarks.edc delete mode 100644 services/BookmarksUI/images/ico_delete.png rename services/HistoryService/{src => }/HistoryItem.cpp (92%) create mode 100644 services/HistoryService/HistoryService.cpp delete mode 100644 services/HistoryService/src/HistoryService.cpp rename services/{BookmarksUI => MainUI}/CMakeLists.txt (62%) create mode 100644 services/MainUI/MainUI.cpp create mode 100644 services/MainUI/MainUI.h create mode 100644 services/MainUI/edc/MainUI.edc rename services/{BookmarksUI => MainUI}/edc/error.edc (100%) rename services/{BookmarksUI => MainUI}/images/web_frame_selected.png (100%) rename services/{BookmarksUI/images/ico_bg_round_shape_37x37.png => MainUI/images/web_shadow.png} (91%) create mode 100644 services/SimpleUI/BookmarksManager.cpp create mode 100644 services/SimpleUI/BookmarksManager.h create mode 100644 services/SimpleUI/edc/BookmarksManager.edc create mode 100644 services/SimpleUI/edc/webview.edc create mode 100644 services/SimpleUI/images/Black_dot.png create mode 100644 services/SimpleUI/images/btn_bar_back_nor.png create mode 100644 services/SimpleUI/images/btn_bar_forward_nor.png create mode 100644 services/SimpleUI/images/btn_bar_manager_nor.png create mode 100644 services/SimpleUI/images/btn_bar_more_nor.png create mode 100644 services/SimpleUI/images/btn_bar_reload_nor.png create mode 100644 services/SimpleUI/images/btn_bar_stop_nor.png create mode 100644 services/SimpleUI/images/btn_bar_vertical_settings.png diff --git a/browser_config.h b/browser_config.h index 6d4258b..3ccb510 100644 --- a/browser_config.h +++ b/browser_config.h @@ -21,4 +21,7 @@ #define PLATFORM(_pl) (defined PLATFORM_##_pl && PLATFORM_##_pl) +// Remove this define when merging from new ui implementation is finished +#define MERGE_ME 0 + #endif diff --git a/core/AbstractInterfaces/AbstractFavoriteService.h b/core/AbstractInterfaces/AbstractFavoriteService.h index a940058..5c24c4f 100644 --- a/core/AbstractInterfaces/AbstractFavoriteService.h +++ b/core/AbstractInterfaces/AbstractFavoriteService.h @@ -25,10 +25,6 @@ #include "browser_config.h" -#include -#include -#include - #include "AbstractService.h" #include "service_macros.h" #include "BookmarkItem.h" @@ -62,7 +58,19 @@ public: std::shared_ptr thumbnail=std::shared_ptr(), std::shared_ptr favicon = std::shared_ptr(), unsigned int dirId = 0) = 0; - /** + /** + * @brief Creates a new folder with name "title" in a folder with id, parent_id + * @return folder_id of created folder + */ + virtual int save_folder(const char *title, int *saved_bookmark_id, int parent_id=0, int by_operator=0)=0; + + /** + * @brief get folder id of a folder with name "title" in folder with id, parent_id + * @return true if found, false otherwise + */ + virtual bool get_folder_id(const char *title, int parent_id, int *folder_id) = 0 ; + + /** * @brief Count bookmarks and subfolders * @return Number of bookmarks and subfolders */ @@ -77,11 +85,18 @@ public: virtual bool bookmarkExists(const std::string & url)= 0; /** - * @brief Get bookmarks from platform service and store it in private m_bookmarksList + * @brief Get bookmarks in a folder from platform service and store it in private m_bookmarksList + * + * @return list of bookmark items in folder with id, folder_id + */ + virtual std::vector > getBookmarks(int folder_id = 0)= 0; + + /** + * @brief Get bookmark folders from platform service and store it in private m_bookmarkFoldersList * - * @return list of bookmark items + * @return list of bookmark folders */ - virtual std::vector > getBookmarks()= 0; + virtual std::vector > getBookmarkFolders()= 0; /** * @brief Delete all bookmarks diff --git a/core/Config/Config.h b/core/Config/Config.h index cd82869..b342c86 100644 --- a/core/Config/Config.h +++ b/core/Config/Config.h @@ -21,8 +21,6 @@ #include #include -//#include -//#include namespace tizen_browser { diff --git a/core/Tools/BookmarkItem.cpp b/core/Tools/BookmarkItem.cpp index 10f7c23..3f994fd 100644 --- a/core/Tools/BookmarkItem.cpp +++ b/core/Tools/BookmarkItem.cpp @@ -54,7 +54,6 @@ BookmarkItem::BookmarkItem( } - BookmarkItem::~BookmarkItem() { } diff --git a/core/Tools/BookmarkItem.h b/core/Tools/BookmarkItem.h index faff1b2..84fe489 100644 --- a/core/Tools/BookmarkItem.h +++ b/core/Tools/BookmarkItem.h @@ -23,10 +23,8 @@ #ifndef BOOKMARKITEM_H #define BOOKMARKITEM_H -#include -#include -#include - +#include "BrowserLogger.h" +#include "Config.h" #include "BrowserImage.h" namespace tizen_browser{ @@ -69,6 +67,12 @@ public: void setTags(const std::vector& tags) { m_tags = tags; }; std::vector getTags() const { return m_tags; }; + bool is_folder(void) const { return m_is_folder; } + bool is_editable(void) const { return m_is_editable; } + + void set_folder_flag(bool flag) { m_is_folder = flag; } + void set_editable_flag(bool flag) { m_is_editable = flag; } + private: unsigned int m_saved_id; std::string m_url; @@ -78,6 +82,8 @@ private: std::shared_ptr m_favicon; unsigned int m_directory; std::vector m_tags; + bool m_is_folder; + bool m_is_editable; }; typedef std::shared_ptr SharedBookmarkItem; diff --git a/core/main.cpp b/core/main.cpp index 9342b05..83d48f0 100755 --- a/core/main.cpp +++ b/core/main.cpp @@ -38,8 +38,9 @@ const std::string DEFAULT_URL = ""; static bool app_create(void * /*app_data*/) { -// elm_config_accel_preference_set("opengl"); - elm_config_accel_preference_set("3d"); +// MERGE_ME not sure which should be chosen +// elm_config_accel_preference_set("opengl"); + elm_config_accel_preference_set("3d"); elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK); // Enabling focus diff --git a/scripts/astylerc b/scripts/astylerc new file mode 100644 index 0000000..22d7cba --- /dev/null +++ b/scripts/astylerc @@ -0,0 +1,20 @@ +# It might not be enough so please keep the code in your eyes. +# for example, +# 1. It does not check below +# a) class Child: public Parent +# b) class Child : public Parent + +style=kr +indent=spaces=4 +pad-oper +pad-header +lineend=linux +add-brackets +indent-switches +unpad-paren +convert-tabs +align-pointer=middle +align-reference=middle +max-instatement-indent=80 +keep-one-line-statements +indent-preprocessor diff --git a/services/BookmarkService/BookmarkService.cpp b/services/BookmarkService/BookmarkService.cpp index 99b14e2..a1ffdae 100644 --- a/services/BookmarkService/BookmarkService.cpp +++ b/services/BookmarkService/BookmarkService.cpp @@ -22,8 +22,8 @@ #include "browser_config.h" #include "BookmarkService.h" +#include -#include #include #include @@ -56,6 +56,7 @@ BookmarkService::BookmarkService() BookmarkService::~BookmarkService() { bp_bookmark_adaptor_deinitialize(); + free_path_history(); } /*private*/ std::shared_ptr BookmarkService::getStorageManager() { @@ -76,40 +77,68 @@ std::shared_ptr BookmarkService::addToBookmarks( unsigned int dirId) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - std::shared_ptr bookmark = std::make_shared(address, tittle, note, dirId); - bookmark->setThumbnail(thumbnail); - bookmark->setFavicon(favicon); + bp_bookmark_property_cond_fmt properties; + properties.parent = -1; + properties.type = 0; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; - int bookmark_id = -1; - int ret = bp_bookmark_adaptor_create(&bookmark_id); - if (ret<0){ - BROWSER_LOGE("Error! Could not create new bookmark!"); - return bookmark; - } - int *ids = NULL; - int ids_count = 0; - ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, -1, -1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); - if (ret<0){ + int id = -1; + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, address.c_str(), 0); + free(ids); + if (ret < 0){ BROWSER_LOGE("Error! Could not get ids!"); return std::make_shared(); } - bp_bookmark_adaptor_set_url(bookmark_id, address.c_str()); + bp_bookmark_info_fmt info; + info.type = 0; + info.parent = dirId; + info.sequence = -1; + info.access_count = -1; + info.editable = 1; + + if (!address.empty()) { + info.url = (char*) address.c_str(); + } + if (!tittle.empty()) + info.title = (char*) tittle.c_str(); + + ret = bp_bookmark_adaptor_easy_create(&id, &info); + if (ret < 0){ + BROWSER_LOGE("Error! Could not create new bookmark!"); + return std::make_shared(); + } - bp_bookmark_adaptor_set_title(bookmark_id, tittle.c_str()); - if (thumbnail) { - std::unique_ptr thumb_blob = tizen_browser::tools::EflTools::getBlobPNG(thumbnail); - unsigned char * thumb = std::move((unsigned char*)thumb_blob->getData()); - bp_bookmark_adaptor_set_snapshot(bookmark_id, thumbnail->width, thumbnail->height, thumb, thumb_blob->getLength()); - } - if (favicon) { - std::unique_ptr favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon); - unsigned char * fav = std::move((unsigned char*)favicon_blob->getData()); - bp_bookmark_adaptor_set_icon(bookmark_id, favicon->width, favicon->height, fav, favicon_blob->getLength()); - } + // max sequence + ret = bp_bookmark_adaptor_set_sequence(id, -1); + if(thumbnail) + { + std::unique_ptr thumb_blob = tizen_browser::tools::EflTools::getBlobPNG(thumbnail); + unsigned char * thumb = std::move((unsigned char*)thumb_blob->getData()); + bp_bookmark_adaptor_set_snapshot(id, thumbnail->width, thumbnail->height, thumb, thumb_blob->getLength()); + } + if(favicon) + { + std::unique_ptr favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon); + unsigned char * fav = std::move((unsigned char*)favicon_blob->getData()); + bp_bookmark_adaptor_set_icon(id, favicon->width, favicon->height, fav, favicon_blob->getLength()); + } + std::shared_ptr bookmark = std::make_shared(address, tittle, note, dirId, id); + bookmark->setThumbnail(thumbnail); + bookmark->setFavicon(favicon); m_bookmarks.push_back(bookmark); - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); bookmarkAdded(bookmark); return bookmark; } @@ -135,35 +164,36 @@ bool BookmarkService::bookmarkExists(const std::string & url) int BookmarkService::getBookmarkId(const std::string & url) { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); bp_bookmark_property_cond_fmt properties; - bp_bookmark_rows_cond_fmt conds; properties.parent = -1; properties.type = 0; properties.is_operator = 0; properties.is_editable = -1; + bp_bookmark_rows_cond_fmt conds; conds.limit = -1; conds.offset = 0; conds.order_offset = BP_BOOKMARK_O_DATE_CREATED; conds.ordering = 0; conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; conds.period_type = BP_BOOKMARK_DATE_ALL; - int *ids = 0; + int *ids = nullptr; int ids_count = 0; - int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, - &properties, &conds, BP_BOOKMARK_O_URL, url.c_str(), 0); - if (ids_count!=0){ - int i = *ids; - free(ids); - return i; + int i = 0; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, url.c_str(), 0); + if (ids_count > 0){ + i = *ids; } - return 0; + free(ids); + return i; } -std::vector > BookmarkService::getBookmarks() +std::vector > BookmarkService::getBookmarks(int folder_id) { - int *ids = NULL; + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + int *ids = nullptr; int ids_count = 0; - int ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, -1, -1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + int ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, 0, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); if (ret<0){ BROWSER_LOGE("Error! Could not get ids!"); return std::vector>(); @@ -178,7 +208,7 @@ std::vector > BookmarkService::getBookmarks() bp_bookmark_info_fmt bookmark_info; bp_bookmark_adaptor_get_easy_all(ids[i], &bookmark_info); - std::shared_ptr bookmark = std::make_shared(std::string(bookmark_info.url),std::string(bookmark_info.title), std::string(""), 0); + std::shared_ptr bookmark = std::make_shared(std::string(bookmark_info.url),std::string(bookmark_info.title), std::string(""),(int) bookmark_info.parent, ids[i]); std::shared_ptr bi = std::make_shared(); bi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; @@ -204,14 +234,1164 @@ std::vector > BookmarkService::getBookmarks() return m_bookmarks; } +std::vector > BookmarkService::getBookmarkFolders() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + int *ids = nullptr; + int ids_count = 0; + int ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, -1, 1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + if (ret<0){ + BROWSER_LOGE("Error! Could not get ids!"); + return std::vector>(); + } + + m_bookmarks.clear(); + + BROWSER_LOGD("Bookmark items: %d", ids_count); + + for(int i = 0; i bookmark = std::make_shared(std::string(bookmark_info.url ? bookmark_info.url : ""),std::string(bookmark_info.title ? bookmark_info.title : ""), std::string(""),(int) bookmark_info.parent, ids[i]); + std::shared_ptr bi = std::make_shared(); + bi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; + bi->width = bookmark_info.thumbnail_width; + bi->height = bookmark_info.thumbnail_height; + bi->dataSize = bookmark_info.thumbnail_length; + bi->imageData = (void*)malloc(bookmark_info.thumbnail_length); + memcpy(bi->imageData, (void*)bookmark_info.thumbnail, bookmark_info.thumbnail_length); + bookmark->setThumbnail(bi); + + std::shared_ptr fav = std::make_shared(); + unsigned char *image_bytes; + bp_bookmark_adaptor_get_icon(ids[i], &fav->width, &fav->height, &image_bytes, &fav->dataSize); + fav->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; + + fav->imageData = (void*)malloc(bookmark_info.favicon_length); + memcpy(fav->imageData, (void*)image_bytes, bookmark_info.favicon_length); + bookmark->setFavicon(fav); + if(!bookmark_info.is_operator) + m_bookmarks.push_back(bookmark); + else + m_bookmarks.insert(m_bookmarks.begin(),bookmark); + } + free(ids); + return m_bookmarks; +} + + bool BookmarkService::deleteAllBookmarks() { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); bp_bookmark_adaptor_reset(); m_bookmarks.clear(); bookmarksDeleted(); return true; } +int BookmarkService::get_root_folder_id(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + int root_id = 0; + bp_bookmark_adaptor_get_root(&root_id); + return root_id; +} + +int BookmarkService::save_folder(const char *title, int *saved_folder_id, int parent_id, int by_operator) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + bp_bookmark_property_cond_fmt properties; + properties.parent = parent_id; + properties.type = 1; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + int id = -1; + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_TITLE, title, 0); + free(ids); + + if (ret < 0) + return -1; + + if (ids_count > 0) { + return 0; + } + + bp_bookmark_info_fmt info; + info.type = 1; + info.parent = parent_id; + info.sequence = -1; + info.is_operator = by_operator; + info.access_count = -1; + info.editable = 1; + if (title != nullptr && strlen(title) > 0) + { + info.title = (char *)title; + } + ret = bp_bookmark_adaptor_easy_create(&id, &info); + + if (ret == 0) { + ret = bp_bookmark_adaptor_set_sequence(id, -1); // max sequence + if (ret == 0) { + *saved_folder_id = id; + BROWSER_LOGD("bmsvc_add_bookmark is success(id:%d)", *saved_folder_id); + bp_bookmark_adaptor_publish_notification(); + return id; + } + } + BROWSER_LOGD("bmsvc_add_bookmark is failed"); + return -1; +} + +bool BookmarkService::delete_by_id(int id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id[%d]", id); + if (bp_bookmark_adaptor_delete(id) < 0) + return false; + else { + bp_bookmark_adaptor_publish_notification(); + return true; + } +} + +bool BookmarkService::delete_by_id_notify(int id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id[%d]", id); + + BookmarkItem item; + get_item_by_id(id, &item); + return delete_by_id(id); +} + +bool BookmarkService::delete_by_uri(const char *uri) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("uri[%s]", uri); + bp_bookmark_property_cond_fmt properties; + properties.parent = -1; + properties.type = 0; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0); + bool result = false; + if (ret >= 0 && ids_count > 0) + { + delete_by_id_notify(ids[0]); + free(ids); + } + + return result; +} + +int BookmarkService::update_bookmark(int id, const char *title, const char *uri, int parent_id, int order, + bool is_duplicate_check_needed, bool is_URI_check_needed) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + bool is_URI_exist = (uri != nullptr && strlen(uri) > 0); + bool is_title_exist = (title != nullptr && strlen(title) > 0); + int ret = -1; + if (is_duplicate_check_needed) { + bp_bookmark_property_cond_fmt properties; + properties.parent = -1; + properties.type = 0; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + int *ids = nullptr; + int ids_count = -1; + //This is a bookmark item so check for any such URL already exists + if (is_URI_exist && is_URI_check_needed) { + ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0); + free(ids); + if (ret < 0) + return -1; + } + //This is a bookmark folder so check for any such folder with same title already exists + else if (is_title_exist) { + ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_TITLE, title, 0); + free(ids); + if (ret < 0) + return -1; + } + + if (ids_count > 0) { + BROWSER_LOGD("same bookmark already exist"); + return 0; + } + } + bp_bookmark_info_fmt info; + info.type = -1; + info.parent = parent_id; + info.sequence = order; + info.editable = -1; + if (is_URI_exist) + info.url = (char *)uri; + if (is_title_exist) + info.title = (char *)title; + + ret = bp_bookmark_adaptor_easy_create(&id, &info); + if (ret == 0) { + BROWSER_LOGD("bp_bookmark_adaptor_easy_create is success"); + bp_bookmark_adaptor_publish_notification(); + return 1; + } + int errcode = bp_bookmark_adaptor_get_errorcode(); + BROWSER_LOGD("bp_bookmark_adaptor_easy_create is failed[%d]", errcode); + return -1; +} + +int BookmarkService::update_bookmark_notify(int id, const char *title, const char *uri, int parent_id, int order, + bool is_duplicate_check_needed, bool is_URI_check_needed) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + int ret = update_bookmark(id, title, uri, parent_id, order, is_duplicate_check_needed, is_URI_check_needed); + return ret; +} + +bool BookmarkService::is_in_bookmark(const char *uri) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("uri[%s]", uri); + + int id = 0; + return get_id(uri, &id); +} + +bool BookmarkService::is_in_folder(int parent_folder, const char *title) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + + bp_bookmark_property_cond_fmt properties; + properties.parent = parent_folder; + properties.type = 1; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_TITLE, title, 0); + free(ids); + return ((ret >= 0) && (ids_count > 0)); +} + +bool BookmarkService::get_id(const char *uri, int *bookmark_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + bp_bookmark_property_cond_fmt properties; + properties.parent = -1; + properties.type = 0; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0); + free(ids); + bool result = ((ret >= 0) && (ids_count > 0)); + if (result) { + *bookmark_id = ids[0]; + } + return result; +} + +bool BookmarkService::get_folder_id(const char *title, int parent_id, int *folder_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + bp_bookmark_property_cond_fmt properties; + properties.parent = parent_id; + properties.type = 1; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_TITLE, title, 0); + free(ids); + bool result = ((ret >= 0) && (ids_count > 0)); + if (result) { + *folder_id = ids[0]; + } + return false; +} + +bool BookmarkService::get_item_by_id(int id, BookmarkItem *item) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("ID: %d", id); + if (!item) { + BROWSER_LOGE("item is nullptr"); + return false; + } + + if (id == get_root_folder_id()) { + item->setTittle("Bookmarks"); + item->setAddress(""); + item->setId(id); + item->set_folder_flag(1); + item->set_editable_flag(1); + item->setDir(-1); + return true; + } + bp_bookmark_info_fmt info; + if (bp_bookmark_adaptor_get_info(id, (BP_BOOKMARK_O_TYPE | BP_BOOKMARK_O_PARENT | BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL |BP_BOOKMARK_O_TITLE), &info) == 0) { + item->setId(id); + item->set_folder_flag(static_cast(info.type)); + item->setDir(info.parent); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + bp_bookmark_adaptor_easy_free(&info); + return true; + } + BROWSER_LOGD("bp_bookmark_adaptor_get_easy_all is failed"); + return false; +} + +std::vector BookmarkService::get_list_by_folder(const int folder_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + std::vector list; + BROWSER_LOGD("folder ID: %d", folder_id); + int *ids = nullptr; + int ids_count = -1; + + if (bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, -1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 1) < 0) { + BROWSER_LOGD("bp_bookmark_adaptor_get_sequence_child_ids_p is failed"); + return list; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return list; + } + + bp_bookmark_info_fmt info; + for(int i = 0; i < ids_count; i++) { + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE | BP_BOOKMARK_O_IS_OPERATOR), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + + item->set_folder_flag(static_cast(info.type)); + item->setDir(folder_id); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + list.push_back(item); + bp_bookmark_adaptor_easy_free(&info); + } + } + free(ids); + return list; +} + +bool BookmarkService::get_list_users_by_folder(const int folder_id, std::vector &list) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + int *ids = nullptr; + int ids_count = -1; + if (bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, -1, 0, -1, BP_BOOKMARK_O_SEQUENCE, 1) < 0) { + BROWSER_LOGD("bp_bookmark_adaptor_get_ids_p is failed"); + return false; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return false; + } + + bp_bookmark_info_fmt info; + for(int i = 0; i < ids_count; i++) { + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE | + BP_BOOKMARK_O_IS_OPERATOR), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + item->set_folder_flag(static_cast(info.type)); + item->setDir(folder_id); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + if (info.is_operator > 0) { + delete item; + } else { + list.push_back(item); + } + bp_bookmark_adaptor_easy_free(&info); + } + } + free(ids); + return (list.empty() == false); +} + +bool BookmarkService::get_list_by_dividing(const int folder_id, std::vector &list, int *list_item_count, int genlist_block_size) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + + int *ids = nullptr; + int ids_count = -1; + if (bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, genlist_block_size, *list_item_count, folder_id, -1, -1, -1, + BP_BOOKMARK_O_SEQUENCE, 1) < 0) { + BROWSER_LOGD("bp_bookmark_adaptor_get_ids_p is failed"); + return false; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return false; + } + + bp_bookmark_info_fmt info; + for(int i = 0; i < ids_count; i++) { + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE | BP_BOOKMARK_O_IS_OPERATOR), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + item->set_folder_flag(static_cast(info.type)); + item->setDir(folder_id); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + list.push_back(item); + bp_bookmark_adaptor_easy_free(&info); + } + } + free(ids); + return true; +} + +bool BookmarkService::get_list_users_by_dividing(const int folder_id, std::vector &list, int *list_item_count, int genlist_block_size) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + int *ids = nullptr; + int ids_count = -1; + if (bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, genlist_block_size, *list_item_count, folder_id, -1, 0, 1, + BP_BOOKMARK_O_SEQUENCE, 1) < 0) { + BROWSER_LOGD("bp_bookmark_adaptor_get_ids_p is failed"); + return false; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return false; + } + + bp_bookmark_info_fmt info; + BROWSER_LOGD("list.size() before : %d", list.size()); + BROWSER_LOGD("ids_count: %d", ids_count); + for(int i = 0; i < ids_count; i++) { + BROWSER_LOGD("list.size(): %d", list.size()); + BROWSER_LOGD("index : %d", i); + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE | + BP_BOOKMARK_O_IS_OPERATOR), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + item->set_folder_flag(static_cast(info.type)); + item->setDir(folder_id); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + if (info.is_operator > 0) { + BROWSER_LOGD("this is operator bookmark"); + delete item; + } else { + BROWSER_LOGD("item is pushed"); + list.push_back(item); + } + bp_bookmark_adaptor_easy_free(&info); + } + } + BROWSER_LOGD("list.size() after: %d", list.size()); + free(ids); + return (list.empty() == false); +} + +int BookmarkService::_get_folder_count(const int folder_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + + int *ids = nullptr; + int ids_count = -1; + bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, 1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + free(ids); + return ids_count; +} + + +int BookmarkService::_get_bookmarks_count(const int folder_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + + int *ids = nullptr; + int ids_count = -1; + bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, 0, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + free(ids); + return ids_count; +} + + +int BookmarkService::_get_total_contents_count(const int folder_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + + int *ids = nullptr; + int ids_count = -1; + bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, 0, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + free(ids); + return ids_count; +} + +bool BookmarkService::get_list_operators(const int folder_id, std::vector &list) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + int *ids = nullptr; + int ids_count = -1; + + if (bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, -1, 1, -1, BP_BOOKMARK_O_SEQUENCE, 1) < 0) { + BROWSER_LOGD("bp_bookmark_adaptor_get_ids_p is failed"); + return false; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return false; + } + + bp_bookmark_info_fmt info; + for(int i = 0; i < ids_count; i++) { + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + item->set_folder_flag(static_cast(info.type)); + item->setDir(folder_id); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + list.push_back(item); + bp_bookmark_adaptor_easy_free(&info); + } + } + free(ids); + return (list.empty() == false); +} + +bool BookmarkService::get_list_by_keyword(const char *keyword, std::vector &list) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + + if (!keyword || (strlen(keyword) == 0)) { + BROWSER_LOGD("keyword is nullptr"); + return false; + } + + std::string buf_str(keyword); + buf_str = "%" + buf_str + "%"; + + bp_bookmark_property_cond_fmt properties; + properties.parent = -1; + properties.type = 0; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = -1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_TITLE; + conds.ordering = -1; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + + int *ids = nullptr; + int ids_count = -1; + if (bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, + (BP_BOOKMARK_O_TITLE | BP_BOOKMARK_O_URL), buf_str.c_str(), 1) < 0) { + BROWSER_LOGE("bp_bookmark_adaptor_get_cond_ids_p is failed"); + return false; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return false; + } + + bp_bookmark_info_fmt info; + for(int i = 0; i < ids_count; i++) { + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_PARENT | BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + item->set_folder_flag(static_cast(info.type)); + item->setDir(info.parent); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + list.push_back(item); + bp_bookmark_adaptor_easy_free(&info); + } + } + free(ids); + return true; +} + +void BookmarkService::destroy_list(std::vector &list) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + + for(unsigned int i = 0 ; i < list.size() ; i++) { + delete list[i]; + } + list.clear(); +} + +bool BookmarkService::get_folder_depth_count(int *depth_count) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("depth_count: %d", *depth_count); + return _get_depth_count_recursive(get_root_folder_id(), 0, depth_count); +} + +bool BookmarkService::_get_depth_count_recursive(int folder_id, int cur_depth, int *depth_count) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("current_depth: %d, depth_count:%d", cur_depth, *depth_count); + + std::vector bookmark_list = get_list_by_folder(folder_id); + if (!bookmark_list.empty()) { + BROWSER_LOGE("get_list_by_folder is failed(folder id:%d)",folder_id); + return false; + } + + for(unsigned int j = 0 ; j < bookmark_list.size() ; j++) { + if (bookmark_list[j]->is_folder()) { + /* Folder item is found. get sub list */ + if ((cur_depth+1) > *depth_count) + *depth_count = cur_depth+1; + + _get_depth_count_recursive(bookmark_list[j]->getId(), cur_depth+1, depth_count); + } + } + destroy_list(bookmark_list); + return true; +} + +bool BookmarkService::set_thumbnail(int id, Evas_Object *thumbnail) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + + int w = 0; + int h = 0; + int stride = 0; + int len = 0; + + //platform_Service ps. + //ps.evas_image_size_get(thumbnail, &w, &h, &stride); + len = stride * h; + BROWSER_LOGD("thumbnail w=[%d], h=[%d], stride=[%d], len=[%d]", w, h, stride, len); + + if (len == 0) + return false; + + void *thumbnail_data = evas_object_image_data_get(thumbnail, true); + int ret = bp_bookmark_adaptor_set_snapshot(id, w, h, (const unsigned char *)thumbnail_data, len); + if (ret < 0) { + BROWSER_LOGE("bp_bookmark_adaptor_set_thumbnail is failed"); + return false; + } + return true; +} + +Evas_Object *BookmarkService::get_thumbnail(int id, Evas_Object *parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + void *thumbnail_data = nullptr; + int w = 0; + int h = 0; + int len = 0; + Evas_Object *icon = nullptr; + + int ret = bp_bookmark_adaptor_get_snapshot(id, &w, &h, (unsigned char **)&thumbnail_data, &len); + BROWSER_LOGE("len: %d, w:%d, h:%d", len, w, h); + if (len > 0){ + /* gengrid event area has scaled with original image if it is evas image. + therefore use elm_image*/ + icon = elm_image_add(parent); + Evas_Object *icon_object = elm_image_object_get(icon); + evas_object_image_colorspace_set(icon_object, EVAS_COLORSPACE_ARGB8888); + evas_object_image_size_set(icon_object, w, h); + evas_object_image_fill_set(icon_object, 0, 0, w, h); + evas_object_image_filled_set(icon_object, true); + evas_object_image_alpha_set(icon_object,true); + + void *target_image_data = evas_object_image_data_get(icon_object, true); + memcpy(target_image_data, thumbnail_data, len); + evas_object_image_data_set(icon_object, target_image_data); + } + + return icon; +} + +bool BookmarkService::set_favicon(int id, Evas_Object *favicon) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + + int w = 0; + int h = 0; + int stride = 0; + int len = 0; + + //platform_Service ps. + //ps.evas_image_size_get(favicon, &w, &h, &stride); + len = stride * h; + BROWSER_LOGD("favicon w=[%d], h=[%d], stride=[%d], len=[%d]", w, h, stride, len); + + if (len == 0) + return false; + + void *favicon_data = evas_object_image_data_get(favicon, true); + int ret = bp_bookmark_adaptor_set_icon(id, w, h, (const unsigned char *)favicon_data, len); + if (ret < 0) { + BROWSER_LOGE("bp_bookmark_adaptor_set_favicon is failed"); + return false; + } + return true; +} + +Evas_Object *BookmarkService::get_favicon(int id, Evas_Object *parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + void *favicon_data = nullptr; + int w = 0; + int h = 0; + int len = 0; + + Evas *e = nullptr; + e = evas_object_evas_get(parent); + if (!e) { + BROWSER_LOGE("canvas is nullptr"); + return nullptr; + } + int ret = bp_bookmark_adaptor_get_icon(id, &w, &h, (unsigned char **)&favicon_data, &len); + if (ret < 0) { + BROWSER_LOGE("bp_bookmark_adaptor_set_favicon is failed"); + return nullptr; + } + + Evas_Object *icon = nullptr; + BROWSER_LOGE("len: %d, w:%d, h:%d", len, w, h); + if (len > 0){ + icon = evas_object_image_filled_add(e); + if (w == 0 || h == 0) { + // Android bookmark. + evas_object_image_memfile_set(icon, favicon_data, len, nullptr, nullptr); + } else { + // Tizen bookmark. + evas_object_image_colorspace_set(icon, EVAS_COLORSPACE_ARGB8888); + evas_object_image_size_set(icon, w, h); + evas_object_image_fill_set(icon, 0, 0, w, h); + evas_object_image_filled_set(icon, true); + evas_object_image_alpha_set(icon,true); + + void *target_image_data = evas_object_image_data_get(icon, true); + memcpy(target_image_data, favicon_data, len); + evas_object_image_data_set(icon, target_image_data); + } + } + return icon; +} + +bool BookmarkService::set_webicon(int id, Evas_Object *webicon) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + + int w = 0; + int h = 0; + int stride = 0; + int len = 0; + + //platform_Service ps; + //ps.evas_image_size_get(webicon, &w, &h, &stride); + len = stride * h; + BROWSER_LOGD("webicon w=[%d], h=[%d], stride=[%d], len=[%d]", w, h, stride, len); + + if (len == 0) + return false; + + void *webicon_data = evas_object_image_data_get(webicon, true); + int ret = bp_bookmark_adaptor_set_webicon(id, w, h, (const unsigned char *)webicon_data, len); + if (ret != 0) + BROWSER_LOGE("set webicon is failed"); + return false; +} + +Evas_Object *BookmarkService::get_webicon(int id, Evas_Object *parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + void *webicon_data = nullptr; + int w = 0; + int h = 0; + int len = 0; + + int ret = bp_bookmark_adaptor_get_webicon(id, &w, &h, (unsigned char **)&webicon_data, &len); + if (ret != 0) { + BROWSER_LOGE("bp_bookmark_adaptor_set_webicon is failed"); + return nullptr; + } + + Evas_Object *icon = nullptr; + BROWSER_LOGE("len: %d, w:%d, h:%d", len, w, h); + if (len > 0){ + Evas *e = evas_object_evas_get(parent); + icon = evas_object_image_filled_add(e); + + evas_object_image_colorspace_set(icon, EVAS_COLORSPACE_ARGB8888); + evas_object_image_size_set(icon, w, h); + evas_object_image_fill_set(icon, 0, 0, w, h); + evas_object_image_filled_set(icon, true); + evas_object_image_alpha_set(icon,true); + + void *target_image_data = evas_object_image_data_get(icon, true); + memcpy(target_image_data, webicon_data, len); + evas_object_image_data_set(icon, target_image_data); + } + + return icon; +} + +bool BookmarkService::set_access_count(int id, int count) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + return !bp_bookmark_adaptor_set_access_count(id, count); +} + +bool BookmarkService::get_access_count(int id, int *count) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + return !bp_bookmark_adaptor_get_access_count(id, count); +} + +bool BookmarkService::increase_access_count(int id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + int count; + if(get_access_count(id, &count) == false) { + BROWSER_LOGD("get_access_count is failed"); + return false; + } + + if(set_access_count(id, count + 1) == false) { + BROWSER_LOGD("set_access_count is failed"); + return false; + } + + return true; +} + +bool BookmarkService::set_last_sequence(int id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + return (bp_bookmark_adaptor_set_sequence(id, -1) == -1); +} + +const char* BookmarkService::get_path_info(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%s", m_path_string.c_str()); + return m_path_string.c_str(); +} + +BookmarkService::folder_info *BookmarkService::get_path_by_index(unsigned int index) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%s", m_path_history[index]->folder_name); + return m_path_history[index]; +} + +int BookmarkService::get_path_size(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%d", m_path_history.size()); + return m_path_history.size(); +} + +void BookmarkService::push_back_path(folder_info *item) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("path size before push: %d", m_path_history.size()); + m_path_history.push_back(item); +} + +void BookmarkService::pop_back_path(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("path size before pop: %d", m_path_history.size()); + m_path_history.pop_back(); +} + +void BookmarkService::clear_path_history(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + free_path_history(); + m_path_history.clear(); +} + +void BookmarkService::free_path_history(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + for(unsigned int i = 0 ; i < m_path_history.size() ; i++) { + if (m_path_history[i]) { + if (m_path_history[i]->folder_name) + free(m_path_history[i]->folder_name); + + free(m_path_history[i]); + } + } +} + +void BookmarkService::change_path_lang(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + m_path_string.clear(); + + char *old_str = m_path_history[0]->folder_name; + m_path_history[0]->folder_name = strdup("Bookmarks"); + free(old_str); + + for(int i = 0 ; i < get_path_size(); i++) { + if (get_path_by_index(i)) { + if (m_path_string.empty()) { + m_path_string = m_path_history[0]->folder_name; + } else { + m_path_string += "/"; + m_path_string += get_path_by_index(i)->folder_name; + } + } + } + BROWSER_LOGD("str: %s", m_path_string.c_str()); +} + +void BookmarkService::path_into_sub_folder(int folder_id, const char *folder_name) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + + folder_info *item = (folder_info *)calloc(1, sizeof(folder_info)); + + item->folder_id = folder_id; + if (folder_id == get_root_folder_id()) { + item->folder_name = strdup("Bookmarks"); + } else + item->folder_name = strdup(folder_name); + push_back_path(item); + + m_path_string.clear(); + for(int i = 0 ; i < get_path_size() ; i++) { + if (get_path_by_index(i)) { + if (m_path_string.empty()) { + m_path_string = get_path_by_index(i)->folder_name; + } else { + m_path_string += "/"; + m_path_string += get_path_by_index(i)->folder_name; + } + } + } + char *path_string = (elm_entry_utf8_to_markup(m_path_string.c_str())); + m_path_string = path_string; + free(path_string); + BROWSER_LOGD("m_path_string: %s", m_path_string.c_str()); + + m_curr_folder = folder_id; +} + +bool BookmarkService::path_to_upper_folder(int *curr_folder) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + + int current_depth = get_path_size(); + BROWSER_LOGD("current_depth: %d", current_depth); + + if (current_depth <= 0) { + BROWSER_LOGE("[ERROR] top folder is not valid"); + return true; + } + + int curr_depth = current_depth - 1; + if (curr_depth > 0) { + *curr_folder = get_path_by_index(curr_depth - 1)->folder_id; + if (get_path_by_index(curr_depth) && get_path_by_index(curr_depth)->folder_name) { + free(get_path_by_index(curr_depth)->folder_name); + free(get_path_by_index(curr_depth)); + } + pop_back_path(); + } else { + /* Current folder is root folder */ + if (*curr_folder != get_root_folder_id()) { + BROWSER_LOGE("[ERROR] top folder is not root folder"); + return true; + } + if (get_path_by_index(curr_depth) && get_path_by_index(curr_depth)->folder_name) { + free(get_path_by_index(curr_depth)->folder_name); + free(get_path_by_index(curr_depth)); + } + pop_back_path(); + m_path_string.clear(); + return false; + } + + m_path_string.clear(); + for(int i = 0 ; i < get_path_size() ; i++) { + if (get_path_by_index(i)) { + if (m_path_string.empty()) { + m_path_string = get_path_by_index(i)->folder_name; + } else { + m_path_string += "/"; + m_path_string += get_path_by_index(i)->folder_name; + } + } + } + BROWSER_LOGD("m_path_string: %s", m_path_string.c_str()); + + m_curr_folder = *curr_folder; + return true; +} } /* end of namespace services*/ } /* end of namespace tizen_browser */ diff --git a/services/BookmarkService/BookmarkService.h b/services/BookmarkService/BookmarkService.h index f33db1d..75ed2f2 100644 --- a/services/BookmarkService/BookmarkService.h +++ b/services/BookmarkService/BookmarkService.h @@ -24,7 +24,6 @@ #define BOOKMARKSERVICE_H #include "browser_config.h" - #include #include #include @@ -82,11 +81,12 @@ public: /** * @brief Get bookmarks from platform service and store it in private m_bookmarksList * - * @return list of bookmark items + * @return list of bookmark items, bookmark items in a folder & bookmark folders */ - std::vector > getBookmarks(); + std::vector > getBookmarks(int folder_id = 0); + std::vector > getBookmarkFolders(); - /** + /** * @brief Delete all bookmarks * * @return true if success, false on error @@ -104,19 +104,77 @@ public: void synchronizeBookmarks(); -private: + typedef struct _folder_info { + int folder_id; + char *folder_name; + } folder_info; + + int get_root_folder_id(void); + int save_folder(const char *title, int *saved_bookmark_id, int parent_id=0,int by_operator = 0); + bool delete_by_id(int id); + bool delete_by_id_notify(int id); + bool delete_by_uri(const char *uri); + int update_bookmark(int id, const char *title, const char *uri, int parent_id, int order, + bool is_duplicate_check_needed = false, bool is_URI_check_needed = false); + int update_bookmark_notify(int id, const char *title, const char *uri, int parent_id, int order, + bool is_duplicate_check_needed = false, bool is_URI_check_needed = false); + bool delete_all(void); + bool get_item_by_id(int id, BookmarkItem *item); + std::vector get_list_by_folder(const int folder_id); + bool get_list_users_by_folder(const int folder_id, std::vector &list); + bool get_list_by_dividing(const int folder_id, std::vector &list, int *last_item, int genlist_block_size); + bool get_list_users_by_dividing(const int folder_id, std::vector &list, int *last_item, int genlist_block_size); + int _get_folder_count(const int folder_id); + int _get_bookmarks_count(const int folder_id); + int _get_total_contents_count(const int folder_id); + bool get_list_operators(const int folder_id, std::vector &list); + bool get_list_by_keyword(const char *keyword, std::vector &list); + void destroy_list(std::vector &list); + int get_count(void); + bool get_id(const char *uri, int *bookmark_id); + bool get_folder_id(const char *title, int parent_id, int *folder_id); + bool is_in_bookmark(const char *uri); + bool is_in_folder(int parent_folder, const char *title); + bool get_folder_depth_count(int *depth_count); + bool set_thumbnail(int id, Evas_Object *thumbnail); + Evas_Object *get_thumbnail(int id, Evas_Object *parent); + bool set_favicon(int id, Evas_Object *favicon); + Evas_Object *get_favicon(int id, Evas_Object *parent); + bool set_webicon(int id, Evas_Object *webicon); + Evas_Object *get_webicon(int id, Evas_Object *parent); + bool set_access_count(int id, int count); + bool get_access_count(int id, int *count); + bool increase_access_count(int id); + bool set_last_sequence(int id); + const char* get_path_info(void); + folder_info *get_path_by_index(unsigned int index); + int get_path_size(void); + void push_back_path(folder_info *item); + void pop_back_path(void); + void clear_path_history(void); + void free_path_history(void); + void change_path_lang(void); + void path_into_sub_folder(int folder_id, const char *folder_name); + bool path_to_upper_folder(int *curr_folder); + + bool get_memory_full(void) { return m_memory_full; } + int get_current_folder_id(void) { return m_curr_folder; } +private: + bool _get_depth_count_recursive(int folder_id, int cur_depth, int *depth_count); + + std::vector m_bookmark_list; + std::vector m_path_history; + std::string m_path_string; + bool m_memory_full; + bool m_bookmark_adaptor_initialize; + int m_curr_folder; std::shared_ptr m_storageManager; - std::vector > m_bookmarks; - - /// \todo Need to change getBookmarkId function for finding stored bookmark - check getBookmarkExists function int getBookmarkId(const std::string & url); - std::shared_ptr getStorageManager(); - config::DefaultConfig config; }; diff --git a/services/BookmarksUI/BookmarksUI.cpp b/services/BookmarksUI/BookmarksUI.cpp deleted file mode 100644 index 5e9a505..0000000 --- a/services/BookmarksUI/BookmarksUI.cpp +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright (c) 2014 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. - */ - -#include -#include -#include -#include - -#include "BookmarksUI.h" -#include "ServiceManager.h" -#include "BrowserLogger.h" -#include "Tools/EflTools.h" -#include "../Tools/BrowserImage.h" - - -namespace tizen_browser{ -namespace base_ui{ - -EXPORT_SERVICE(BookmarksUI, "org.tizen.browser.bookmarksui") - - -typedef struct _BookmarkItemData -{ - std::shared_ptr item; - std::shared_ptr bookmarksUI; -} BookmarkItemData; - -BookmarksUI::BookmarksUI() - : m_gengrid(NULL) - , m_parent(NULL) - , m_item_class(NULL) - , m_gengridSetup(false) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -} - -BookmarksUI::~BookmarksUI() -{ - -} - -void BookmarksUI::init(Evas_Object* p) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_parent = p; - m_gengrid = elm_gengrid_add(m_parent); - - evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, NULL); - evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, NULL); - evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this); - - if (!m_item_class) { - m_item_class = elm_genlist_item_class_new(); - m_item_class->item_style = "bookmark_item"; - m_item_class->func.text_get = NULL; - m_item_class->func.content_get = _grid_content_get; - m_item_class->func.state_get = NULL; - m_item_class->func.del = NULL; - } -} - - -Evas_Object * BookmarksUI::getContent() -{ - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - M_ASSERT(m_parent); - - if(m_map_bookmark_views.size() == 0) { - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoBookmarksLabel()); - } - - - if(!m_gengridSetup) { - std::string edjFilePath = EDJE_DIR; - edjFilePath.append("BookmarksUI/Bookmarks.edj"); - elm_theme_extension_add(NULL, edjFilePath.c_str()); - - - elm_object_style_set(m_gengrid, "bookmarks"); - - elm_gengrid_align_set(m_gengrid, 0, 0); - elm_gengrid_item_size_set(m_gengrid, 395, 357); - elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE); - elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE); - elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE); - elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); - elm_scroller_page_size_set(m_gengrid, 0, 327); - - evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); - - m_gengridSetup = true; - } - return m_gengrid; -} - -void BookmarksUI::addBookmarkItem(std::shared_ptr bi) -{ - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - BookmarkItemData *itemData = new BookmarkItemData(); - itemData->item = bi; - itemData->bookmarksUI = std::shared_ptr(this); - Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, NULL, this); - m_map_bookmark_views.insert(std::pair(bi->getAddress(),bookmarkView)); - - // unselect by default - elm_gengrid_item_selected_set(bookmarkView, EINA_FALSE); - - setEmptyGengrid(false); -} - -void BookmarksUI::addBookmarkItems(std::vector > items) -{ - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - for (auto it = items.begin(); it != items.end(); ++it) { - addBookmarkItem(*it); - } -} - -void BookmarksUI::removeBookmarkItem(const std::string& uri) -{ - BROWSER_LOGD("[%s] uri=%s", __func__, uri.c_str()); - if(m_map_bookmark_views.find(uri) == m_map_bookmark_views.end()) { - return; - } - - Elm_Object_Item* bookmarkView = m_map_bookmark_views.at(uri); - elm_object_item_del(bookmarkView); - m_map_bookmark_views.erase(uri); - - setEmptyGengrid(0 == m_map_bookmark_views.size()); -} - -void BookmarksUI::_item_deleted(void * /* data */, Evas_Object * /* obj */) -{ - -} - -Evas_Object * BookmarksUI::_grid_content_get(void *data, Evas_Object *obj, const char *part) -{ - BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); - BookmarkItemData *itemData = reinterpret_cast(data); - - if (!strcmp(part, "elm.thumbnail")) { - if (itemData->item->getThumbnail()) { - Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->bookmarksUI->m_parent); - return thumb; - } - else { - return NULL; - } - } - else if (!strcmp(part, "favicon")) { - Evas_Object * favicon = NULL; - if(itemData->item->getFavicon().get()){ - favicon = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getFavicon(), obj); - } - return favicon; - } - else if (!strcmp(part, "elm.label")) { - Evas_Object *label = elm_label_add(obj); - elm_object_style_set(label, "bookmarks_label"); - elm_object_text_set(label, itemData->item->getTittle().c_str()); - return label; - } - else if (!strcmp(part, "elm.deleteButton")) { - Evas_Object *deleteButton = elm_button_add(obj); - elm_object_style_set(deleteButton, "deleteButton"); - evas_object_smart_callback_add(deleteButton, "clicked", tizen_browser::base_ui::BookmarksUI::_deleteBookmark, data); - return deleteButton; - } - else if (!strcmp(part, "elm.thumbButton")) { - Evas_Object *thumbButton = elm_button_add(obj); - elm_object_style_set(thumbButton, "thumbButton"); - evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::BookmarksUI::_thumbSelected, data); - return thumbButton; - } - return NULL; -} - -void BookmarksUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) -{ - Elm_Object_Item * selected = reinterpret_cast(event_info); - BookmarkItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); - BookmarksUI * self = reinterpret_cast(data); - - self->bookmarkClicked(itemData->item); -} - -void BookmarksUI::_deleteBookmark(void *data, Evas_Object * /* obj */, void * /* event_info */) -{ - BookmarkItemData * itemData = reinterpret_cast(data); - itemData->bookmarksUI->bookmarkDeleteClicked(itemData->item); -} - -void BookmarksUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) -{ - BookmarkItemData * itemData = reinterpret_cast(data); - itemData->bookmarksUI->bookmarkClicked(itemData->item); -} - -Evas_Object* BookmarksUI::createNoBookmarksLabel() -{ - Evas_Object *label = elm_label_add(m_parent); - elm_object_text_set(label, "No favorite websites."); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - return label; -} - -void BookmarksUI::setEmptyGengrid(bool setEmpty) -{ - if(setEmpty) { - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoBookmarksLabel()); - } else { - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", NULL); - } -} - -void BookmarksUI::deleteAllItems() -{ - BROWSER_LOGD("Deleting all items from gengrid"); - elm_gengrid_clear(m_gengrid); - m_map_bookmark_views.clear(); - setEmptyGengrid(true); -} - -void BookmarksUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,in", "over2"); - - // selected manually - elm_gengrid_item_selected_set(item, EINA_TRUE); -} - -void BookmarksUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,out", "over2"); - - // unselected manually - elm_gengrid_item_selected_set(item, EINA_FALSE); -} - -std::shared_ptr BookmarksUI::getSelectedBookmarkItem() -{ - Elm_Object_Item * selected = elm_gengrid_selected_item_get(m_gengrid); - - if (!selected) { - BROWSER_LOGD("none selected"); - return std::make_shared(); - } - BookmarkItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); - return itemData->item; -} - - -} -} diff --git a/services/BookmarksUI/BookmarksUI.h b/services/BookmarksUI/BookmarksUI.h deleted file mode 100644 index 33bb924..0000000 --- a/services/BookmarksUI/BookmarksUI.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2014 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. - */ - -#ifndef BOOKMARKSUI_H -#define BOOKMARKSUI_H - -#include -#include - -#include "AbstractUIComponent.h" -#include "AbstractService.h" -#include "ServiceFactory.h" -#include "service_macros.h" -#include "BookmarkItem.h" - -namespace tizen_browser{ -namespace base_ui{ - -class BROWSER_EXPORT BookmarksUI - : public tizen_browser::interfaces::AbstractUIComponent - , public tizen_browser::core::AbstractService -{ -public: - BookmarksUI(); - ~BookmarksUI(); - void init(Evas_Object *main_layout); - Evas_Object *getContent(); - virtual std::string getName(); - void addBookmarkItem(std::shared_ptr); - void addBookmarkItems(std::vector >); - void removeBookmarkItem(const std::string& uri); - void deleteAllItems(); - std::shared_ptr getSelectedBookmarkItem(); - - - boost::signals2::signal)> bookmarkClicked; - boost::signals2::signal)> bookmarkDeleteClicked; -private: - static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); - static void _itemSelected(void * data, Evas_Object * obj, void * event_info); - static void _item_deleted(void *data, Evas_Object *obj); - static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); - static void _deleteBookmark(void *data, Evas_Object *obj, void *event_info); - void setEmptyGengrid(bool setEmpty); - -private: - Evas_Object *m_gengrid; - Evas_Object *m_parent; - Elm_Gengrid_Item_Class * m_item_class; - std::map m_map_bookmark_views; - bool m_gengridSetup; - Evas_Object *createNoBookmarksLabel(); - - static void focusItem(void* data, Evas_Object* obj, void* event_info); - static void unFocusItem(void* data, Evas_Object* obj, void* event_info); -}; - - -} -} - -#endif // BOOKMARKSUI_H diff --git a/services/BookmarksUI/edc/Bookmarks.edc b/services/BookmarksUI/edc/Bookmarks.edc deleted file mode 100644 index 7638300..0000000 --- a/services/BookmarksUI/edc/Bookmarks.edc +++ /dev/null @@ -1,440 +0,0 @@ -#define DEBUG_RECT_OVER(over_part, r, g, b) \ - part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ - \ -scale:1; \ - type : RECT; \ - repeat_events: 1; \ - description { \ - state: "default" 0.0; \ - visible: 1; \ - color: r g b 128; \ - rel1 { to: over_part; relative: 0 0; } \ - rel2 { to: over_part; relative: 1 1; } \ - } \ - } - -collections { - -group { name: "elm/label/base/bookmarks_label"; - styles { - style { name: "textblock_white"; - base: "font=Sans font_size="30" color=#D3D3D3"; - } - } - styles { - style { name: "textblock_white_bold"; - base: "font=Sans:style=Bold font_size="30" color=#D3D3D3"; - } - } - - parts { - part { name: "elm.text"; - type: TEXTBLOCK; - description { state: "default" 0.0; - rel1.relative: 0.0 0.0; - rel2.relative: 1.0 1.0; - align: 0.0 0.0; - fixed: 1 1; - text { - style: "textblock_white"; - min: 0 1; - } - } - description { state: "bold" 0.0; - inherit: "default" 0.0; - text { - style: "textblock_white_bold"; - min: 0 1; - } - } - } - } -} - -group { name: "elm/button/base/thumbButton"; - images { - image: "ico_delete.png" COMP; - } - parts { - part { name: "elm.swallow.content"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - visible: 1; - rel1.relative: 0.0 0.0; - rel2.relative: 1.0 1.0; - align: 0.0 0.0; - } - } - } - - programs { - program { name: "mouse,clicked"; - signal: "mouse,down,1"; - source: "elm.swallow.content"; - action: SIGNAL_EMIT "elm,action,click" ""; - } - } -} - -group { name: "elm/button/base/deleteButton"; - parts { - part { name: "delete_x"; - type: IMAGE; - description { state: "default" 0.0; - min: 27 27; - max: 27 27; - image.normal: "ico_delete.png"; - rel1.relative: 0.0 0.0; - rel2.relative: 1.0 1.0; - align: 0.5 0.5; - visible: 0; - } - description { state: "over" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - - part { name: "elm.swallow.content"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - visible: 1; - rel1.relative: 0.0 0.0; - rel2.relative: 1.0 1.0; - align: 0.0 0.0; - } - } - } - programs { - program { name: "mouse,clicked"; - signal: "mouse,down,1"; - source: "elm.swallow.content"; - action: SIGNAL_EMIT "elm,action,click" ""; - } - program { name: "mouse_in"; - signal: "mouse,in"; - source: "elm.swallow.content"; - action: STATE_SET "over" 0.0; - target: "delete_x"; - } - program { name: "mouse_out"; - signal: "mouse,out"; - source: "elm.swallow.content"; - action: STATE_SET "default" 0.0; - target: "delete_x"; - } - } -} -group { name: "elm/gengrid/base/bookmarks"; - data { - item: "focus_highlight" "off"; - } - - parts { - part { name: "clipper"; - type: RECT; - mouse_events: 0; - description { state: "default" 0.0; - rel1 { - relative: 0 0; - } - rel2{ - relative: 1 1; - } - } - } - part { name: "background"; - type: RECT; - mouse_events: 0; - description { state: "default" 0.0; - color: 42 50 64 255; - rel1 { - relative: 0 0; - } - rel2{ - relative: 1 1; - } - } - } - part { name: "elm.swallow.content"; - type: SWALLOW; - clip_to: "clipper"; - description { state: "default" 0.0; - rel1 { - relative: 0 0; - offset: 169 110; - } - rel2 { - relative: 1 1; - offset: -169 0; - } - } - } - part { name: "elm.swallow.empty"; - type: SWALLOW; - description { state: "default" 0.0; - align: 0.5 0.5; - rel1 { - relative: 0.5 0.5; - } - rel2 { - relative: 0.5 0.5; - } - } - } - } -} -group { name: "elm/gengrid/item/bookmark_item/default"; - data.item: "texts" "elm.text"; - data.item: "contents" "elm.thumbnail favicon elm.text elm.label elm.deleteButton elm.thumbButton"; - images { - image: "web_frame_selected.png" COMP; - image: "ico_bg_round_shape_37x37.png" COMP; - } - parts { - part { name: "bg"; - clip_to: "disclip"; - mouse_events: 0; - description { state: "default" 0.0; - visible: 0; - color: 255 255 255 0; - } - } - - part { name: "elm.thumbnail"; - clip_to: "disclip"; - type: SWALLOW; - description { state: "default" 0.0; - fixed: 1 0; - align: 0.0 0.0; - min: 373 240; - max: 373 240; - rel1 { - relative: 0.0 0.0; - } - rel2 { - relative: 1.0 1.0; - } - } - description { state: "selected"; - inherit: "default" 0.0; - } - } - - part { name: "focus_highlight"; - type: IMAGE; - description { state: "default" 0.0; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 0.0; - } - rel2 { - to: "elm.thumbnail"; - relative: 1.0 1.0; - } - image.normal: "web_frame_selected.png"; - image.border: 8 8 8 0; - image.border_scale: 1; - image.middle: NONE; - visible: 0; - } - description { state: "selected"; - inherit: "default" 0.0; - visible: 1; - } - } - - part { name: "background"; - clip_to: "disclip"; - type: RECT; - description { state: "default" 0.0; - min: 373 87; - max: 373 87; - align: 0.0 0.0; - color: 30 38 50 255; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 1.0; - offset: 0 0; - } - rel2 { - relative: 1.0 1.0; - } - } - description { state: "selected" 0.0; - inherit: "default" 0.0; - color: 70 143 254 255; - } - } - - part { name: "favicon_bg"; - clip_to: "disclip"; - type: IMAGE; - description { state: "default" 0.0; - fixed: 1 0; - align: 0.0 0.0; - min: 37 37; - max: 37 37; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 1.0; - offset: 25 25; - } - rel2 { - relative: 1.0 1.0; - } - // image.normal: "ico_bg_round_shape_37x37.png"; - } - } - - part { name: "favicon"; - clip_to: "disclip"; - type: SWALLOW; - description { state: "default" 0.0; - fixed: 1 0; - align: 0.5 0.5; - min: 37 37; - max: 37 37; - rel1.to: "favicon_bg"; - rel2.to: "favicon_bg"; - } - } - - part { name: "elm.label"; - clip_to: "disclip"; - type: SWALLOW; - description { state: "default" 0.0; - min: 273 41; - max: 273 41; - align: 0.0 0.0; - rel1 { - to: "favicon_bg"; - relative: 1.0 0.0; - offset: 13 0; - } - rel2 { - relative: 1.0 1.0; - } - } - } - - part { name: "delete_bg"; - clip_to: "disclip"; - type: RECT; - description { state: "default" 0.0; - min: 373 87; - max: 373 87; - align: 0.0 0.0; - color: 70 143 254 204; - rel1.to: "background"; - rel2.to: "background"; - visible: 0; - } - description { state: "over" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - - part { name: "disclip"; - type: RECT; - description { state: "default" 0.0; - rel1.to: "bg"; - rel2.to: "bg"; - } - } - - part { name: "elm.deleteButton"; - clip_to: "disclip"; - type: SWALLOW; - description { state: "default" 0.0; - min: 373 87; - max: 373 87; - align: 0.0 0.0; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 1.0; - offset: 0 0; - } - rel2 { - relative: 1.0 1.0; - } - visible: 1; - } - description { state: "over" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - - part { name: "elm.thumbButton"; - clip_to: "disclip"; - type: SWALLOW; - description { state: "default" 0.0; - rel1.to: "elm.thumbnail"; - rel2.to: "elm.thumbnail"; - } - } - - part { name: "over2"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - rel1.to: "bg"; - rel2.to: "background"; - } - } - part { name: "over3"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - rel1.to: "background"; - rel2.to: "background"; - } - } - } - - programs{ - program { name: "mouse_in"; - signal: "mouse,in"; - source: "over2"; - action: STATE_SET "selected" 0.0; - target: "background"; - target: "focus_highlight"; - target: "elm.thumbnail"; - } - program { name: "mouse_out"; - signal: "mouse,out"; - source: "over2"; - action: STATE_SET "default" 0.0; - target: "background"; - target: "focus_highlight"; - target: "elm.thumbnail"; - } - program { name: "mouse_in_delete"; - signal: "mouse,in"; - source: "over3"; - action: STATE_SET "over" 0.0; - target: "delete_bg"; - target: "elm.deleteButton"; - } - program { name: "mouse_out_delete"; - signal: "mouse,out"; - source: "over3"; - action: STATE_SET "default" 0.0; - target: "delete_bg"; - target: "elm.deleteButton"; - } - } -} -} diff --git a/services/BookmarksUI/images/ico_delete.png b/services/BookmarksUI/images/ico_delete.png deleted file mode 100644 index 92f42cccdae78c7360bfd8d7015de1e91a8440b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18365 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 diff --git a/services/CMakeLists.txt b/services/CMakeLists.txt index 8952538..1d32393 100644 --- a/services/CMakeLists.txt +++ b/services/CMakeLists.txt @@ -1,9 +1,18 @@ project(services) add_subdirectory(WebKitEngineService) -add_subdirectory(BookmarksUI) +# MERGE_ME +#add_subdirectory(MoreMenuUI) +add_subdirectory(MainUI) +# MERGE_ME +#add_subdirectory(HistoryUI) +#add_subdirectory(TabUI) add_subdirectory(SimpleUI) +#MERGE_ME +#add_subdirectory(SettingsUI) add_subdirectory(SimpleURI) +#MERGE_ME +#add_subdirectory(BookmarkManagerUI) add_subdirectory(StorageService) add_subdirectory(HistoryService) add_subdirectory(PlatformInputManager) diff --git a/services/HistoryService/CMakeLists.txt b/services/HistoryService/CMakeLists.txt index 7acc4b9..0a5dcf7 100644 --- a/services/HistoryService/CMakeLists.txt +++ b/services/HistoryService/CMakeLists.txt @@ -1,8 +1,8 @@ PROJECT(HistoryService) set(HistoryService_SOURCES - src/HistoryService.cpp - src/HistoryItem.cpp + HistoryService.cpp + HistoryItem.cpp ) set(HistoryService_HEADERS diff --git a/services/HistoryService/src/HistoryItem.cpp b/services/HistoryService/HistoryItem.cpp similarity index 92% rename from services/HistoryService/src/HistoryItem.cpp rename to services/HistoryService/HistoryItem.cpp index ac61514..1d9ce89 100644 --- a/services/HistoryService/src/HistoryItem.cpp +++ b/services/HistoryService/HistoryItem.cpp @@ -32,6 +32,7 @@ HistoryItem::HistoryItem(const std::string & url, : m_url(url) , m_title(title) , m_favIcon(image) + , m_lastVisit() { } @@ -141,6 +142,17 @@ std::shared_ptr HistoryItem::getFavIcon() return m_favIcon; } +void HistoryItem::setThumbnail(std::shared_ptr thumbnail) +{ + m_thumbnail = thumbnail; +}; + +std::shared_ptr HistoryItem::getThumbnail() const +{ + + return m_thumbnail; +}; + void HistoryItem::setUriFavicon(const std::string & uri) { m_urifavicon = uri; } diff --git a/services/HistoryService/HistoryItem.h b/services/HistoryService/HistoryItem.h index 98049c0..1d1e7ab 100644 --- a/services/HistoryService/HistoryItem.h +++ b/services/HistoryService/HistoryItem.h @@ -34,7 +34,9 @@ public: std::shared_ptr image); HistoryItem(HistoryItem && other) throw(); + HistoryItem(const std::string& url); + HistoryItem(const std::string& url, int& date_created); HistoryItem(const HistoryItem& source); virtual ~HistoryItem(); @@ -64,7 +66,10 @@ public: void setVisitCounter(int visitCounter); int getVisitCounter(); - void setFavIcon(std::shared_ptr favIcon); + void setThumbnail(std::shared_ptr thumbnail); + std::shared_ptr getThumbnail() const ; + + void setFavIcon(std::shared_ptr favIcon); std::shared_ptr getFavIcon(); void setUriFavicon(const std::string & uri); @@ -77,6 +82,7 @@ private: std::string m_title; boost::gregorian::date m_visitDate; boost::posix_time::ptime m_lastVisit; + std::shared_ptr m_thumbnail; std::shared_ptr m_favIcon; std::string m_urifavicon; int m_visitCounter; diff --git a/services/HistoryService/HistoryService.cpp b/services/HistoryService/HistoryService.cpp new file mode 100644 index 0000000..f2ebbfb --- /dev/null +++ b/services/HistoryService/HistoryService.cpp @@ -0,0 +1,396 @@ +/* + * Copyright (c) 2014 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. + */ + +#include +#include +#include +#include +#include +#include + +#include "ServiceManager.h" +#include "HistoryService.h" +#include "HistoryItem.h" +#include "AbstractWebEngine.h" +#include "EflTools.h" + + + + +namespace tizen_browser +{ +namespace services +{ + +EXPORT_SERVICE(HistoryService, DOMAIN_HISTORY_SERVICE) + +HistoryService::HistoryService() : m_testDbMod(false) +{ + BROWSER_LOGD("HistoryService"); +} + +HistoryService::~HistoryService() +{ +} + +std::shared_ptr HistoryService::getStorageManager() +{ + if (!m_storageManager) { + m_storageManager = std::dynamic_pointer_cast < + tizen_browser::services::StorageService, + tizen_browser::core::AbstractService > ( + tizen_browser::core::ServiceManager::getInstance().getService( + DOMAIN_STORAGE_SERVICE)); + } + + M_ASSERT(m_storageManager); + m_storageManager->init(m_testDbMod); + + return m_storageManager; +} + +void HistoryService::setStorageServiceTestMode(bool testmode) { + m_testDbMod = testmode; +} + +int HistoryService::getHistoryItemsCount(){ + int *ids = nullptr; + int count=0; + bp_history_rows_cond_fmt conds; + conds.limit = 20; //no of rows to get negative means no limitation + conds.offset = -1; //the first row's index + conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort + conds.ordering = 1; //way of ordering 0 asc 1 desc + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_TODAY; + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + if (ret<0){ + BROWSER_LOGD("Error! Could not get ids!"); + } + + BROWSER_LOGD("[%s:%d] History Count %d", __PRETTY_FUNCTION__, __LINE__, count); + return count; +} + +static int __get_duplicated_ids_p(int **ids, int *count, const int limit, const int offset, + const bp_history_offset order_column_offset, const int ordering, + const bp_history_offset check_column_offset, + const char *keyword, const int is_like) +{ + bp_history_rows_cond_fmt conds; + conds.limit = limit; + conds.offset = offset; + conds.ordering = ordering; + conds.order_offset = order_column_offset; + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_ALL; + + return bp_history_adaptor_get_cond_ids_p(ids, count, &conds, check_column_offset, keyword, is_like); +} + +bool isDuplicate(const char* title) +{ + int *ids=nullptr; + int count=0; + bp_history_rows_cond_fmt conds; + conds.limit = 20; //no of rows to get negative means no limitation + conds.offset = -1; //the first row's index + conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort + conds.ordering = 1; //way of ordering 0 asc 1 desc + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_TODAY; + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + if (ret<0){ + BROWSER_LOGD("Error! Could not get ids!"); + } + + bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); + + for(int i = 0; i< count; i++){ + bp_history_info_fmt history_info; + bp_history_adaptor_get_info(ids[i],offset,&history_info); + if(!strcmp(history_info.title, title)) { + int freq; + bp_history_adaptor_get_frequency(ids[i], &freq); + bp_history_adaptor_set_frequency(ids[i], freq + 1); + return true; + } + } + return false; + +} + + +HistoryItemVector& HistoryService::getMostVisitedHistoryItems() +{ + history_list.clear(); + + int *ids=nullptr; + int count=-1; + bp_history_rows_cond_fmt conds; + conds.limit = 20; //no of rows to get negative means no limitation + conds.offset = -1; //the first row's index + conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort + conds.ordering = 1; //way of ordering 0 asc 1 desc + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_TODAY; + + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + if (ret<0){ + BROWSER_LOGD("Error! Could not get ids!"); + } + + bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); + + int freq_arr[1000]; + for(int i = 0; i< count; i++){ + bp_history_info_fmt history_info; + bp_history_adaptor_get_info(ids[i],offset,&history_info); + + int freq; + if (0 == bp_history_adaptor_get_frequency(ids[i], &freq)) + { + freq_arr[i] = freq; + } + } + + int index_array[6]; + int j=0; + int maximum = freq_arr[0]; + int position = 0; + + for(int k=1; k<=5;k++){ + if(k > count || count == 0) + break; + + maximum = freq_arr[0]; + position = 0; + + for(int i =1;i maximum) + { + maximum = freq_arr[i]; + position = i; + } + } + index_array[j++] = position; + freq_arr[position] = -1; + } + + for(int i = 0; i < j; i++){ + bp_history_info_fmt history_info; + bp_history_adaptor_get_info(ids[index_array[i]],offset,&history_info); + + std::shared_ptr history = std::make_shared(std::string(history_info.url)); + history->setUrl(std::string(history_info.url ? history_info.url : "")); + history->setTitle(std::string(history_info.title ? history_info.title : "")); + + //thumbail + std::shared_ptr hi = std::make_shared(); + hi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; + hi->width = history_info.thumbnail_width; + hi->height = history_info.thumbnail_height; + hi->dataSize = history_info.thumbnail_length; + hi->imageData = (void*)malloc(history_info.thumbnail_length); + memcpy(hi->imageData, (void*)history_info.thumbnail, history_info.thumbnail_length); + history->setThumbnail(hi); + + history_list.push_back(history); + } + free(ids); + return history_list; +} + +void HistoryService::addHistoryItem(std::shared_ptr his,std::shared_ptr thumbnail){ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + his->setFavIcon(his->getFavIcon()); + his->setThumbnail(thumbnail); + + if(isDuplicate(his->getTitle().c_str())) + return; + + int id = -1; + int ret = bp_history_adaptor_create(&id); + if (ret<0){ + BROWSER_LOGE("Error! Could not create new bookmark!"); + } + + int *ids=nullptr; + int count=-1; + bp_history_rows_cond_fmt conds; + conds.limit = 20; //no of rows to get negative means no limitation + conds.offset = -1; //the first row's index + conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort + conds.ordering = 1; //way of ordering 0 asc 1 desc + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_TODAY; + + ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + if (ret<0){ + BROWSER_LOGE("Error! Could not get ids!"); + } + + bp_history_adaptor_set_url(id, (his->getUrl()).c_str()); + bp_history_adaptor_set_title(id, (his->getTitle()).c_str()); + bp_history_adaptor_set_date_visited(id,-1); + bp_history_adaptor_set_frequency(id, 1); + + if (thumbnail) { + std::unique_ptr thumb_blob = tizen_browser::tools::EflTools::getBlobPNG(thumbnail); + unsigned char * thumb = std::move((unsigned char*)thumb_blob->getData()); + bp_history_adaptor_set_snapshot(id, thumbnail->width, thumbnail->height, thumb, thumb_blob->getLength()); + } + + std::shared_ptr favicon = his->getFavIcon(); + if (favicon) { + std::unique_ptr favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon); + unsigned char * fav = std::move((unsigned char*)favicon_blob->getData()); + bp_history_adaptor_set_icon(id, favicon->width, favicon->height, fav, favicon_blob->getLength()); + } + + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + historyAdded(his); +} + + +void HistoryService::insertOrRefresh(std::shared_ptr hi) { + /** + * No browser- provider implementation till now. Needs to be done + */ + //getStorageManager()->insertOrRefresh(hi); +} + +/** + * @throws HistoryException on error + */ +void HistoryService::clearAllHistory() +{ + bp_history_adaptor_reset(); + history_list.clear(); + historyAllDeleted(); +} + +int HistoryService::getHistoryId(const std::string & url) +{ + bp_history_rows_cond_fmt conds; + conds.limit = -1; + conds.offset = 0; + conds.order_offset = BP_HISTORY_O_DATE_CREATED; + conds.ordering = 0; + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_ALL; + int *ids = nullptr; + int ids_count = 0; + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&ids_count, &conds, BP_HISTORY_O_URL, url.c_str(), 0); + if (ids_count!=0){ + int i = *ids; + free(ids); + return i; + } + return 0; +} + + +/** + * @throws HistoryException on error + */ +void HistoryService::clearURLHistory(const std::string & url) +{ + int id = getHistoryId(url); + if (id!=0) + bp_history_adaptor_delete(id); + if(0 == getHistoryItemsCount()) + historyEmpty(true); + historyDeleted(url); +} + + +HistoryItemVector& HistoryService::getHistoryItems(int historyDepthInDays, int maxItems) +{ + history_list.clear(); + + int *ids=nullptr; + int count=-1; + bp_history_rows_cond_fmt conds; + conds.limit = 20; //no of rows to get negative means no limitation + conds.offset = -1; //the first row's index + conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort + conds.ordering = 1; //way of ordering 0 asc 1 desc + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_TODAY; + + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + if (ret<0){ + BROWSER_LOGD("Error! Could not get ids!"); + } + + bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); + + for(int i = 0; i< count; i++){ + bp_history_info_fmt history_info; + bp_history_adaptor_get_info(ids[i],offset,&history_info); + + int date; + bp_history_adaptor_get_date_created(ids[i], &date); + + struct tm *item_time_info; + time_t item_time = (time_t)date; + item_time_info = localtime(&item_time); + + int m_year = item_time_info->tm_year; + int m_month = item_time_info->tm_mon + 1; + int m_day = item_time_info->tm_yday; + int m_month_day = item_time_info->tm_mday; + int m_date = date; + int min = item_time_info->tm_min; + int hour= item_time_info->tm_hour; + int sec = item_time_info->tm_sec; + + m_year = 2000 + m_year % 100; + + std::shared_ptr history = std::make_shared(std::string(history_info.url)); + boost::gregorian::date d(m_year,m_month,m_month_day); + boost::posix_time::ptime t(d,boost::posix_time::time_duration(hour,min,sec)); + history->setLastVisit(t); + history->setUrl(std::string(history_info.url ? history_info.url : "")); + history->setTitle(std::string(history_info.title ? history_info.title : "")); + + //thumbail + std::shared_ptr hi = std::make_shared(); + hi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; + hi->width = history_info.thumbnail_width; + hi->height = history_info.thumbnail_height; + hi->dataSize = history_info.thumbnail_length; + hi->imageData = (void*)malloc(history_info.thumbnail_length); + memcpy(hi->imageData, (void*)history_info.thumbnail, history_info.thumbnail_length); + history->setThumbnail(hi); + + history_list.push_back(history); + } + free(ids); + return history_list; +} + +int HistoryService::getHistoryVisitCounter(const std::string & url) +{ /** + * No browser- provider implementation till now. Needs to be done + */ +// return getStorageManager()->getHistoryVisitCounter(url); + +} + +} +} diff --git a/services/HistoryService/HistoryService.h b/services/HistoryService/HistoryService.h index 0e09cab..3f2c44e 100644 --- a/services/HistoryService/HistoryService.h +++ b/services/HistoryService/HistoryService.h @@ -44,10 +44,12 @@ public: virtual std::string getName(); int getHistoryId(const std::string & url); + /** * @throws HistoryException on error */ - void addHistoryItem(std::shared_ptr hi); + void addHistoryItem(std::shared_ptr hi, + std::shared_ptr thumbnail=std::shared_ptr()); /** * If hi->getUrl() exists on a table HISTORY update visit_counter and visit_date, unless insert hi to database. @@ -75,6 +77,7 @@ public: * @throws HistoryException on error */ HistoryItemVector & getHistoryItems(int historyDepthInDays = 7, int maxItems = 50); + HistoryItemVector & getMostVisitedHistoryItems(); /** * @throws HistoryException on error @@ -89,6 +92,10 @@ public: void setStorageServiceTestMode(bool testmode = true); boost::signals2::signalhistoryEmpty; + boost::signals2::signal)> historyAdded; + boost::signals2::signal historyDeleted; + boost::signals2::signal historyAllDeleted; + private: bool m_testDbMod;; std::vector> history_list; diff --git a/services/HistoryService/src/HistoryService.cpp b/services/HistoryService/src/HistoryService.cpp deleted file mode 100644 index 5aff218..0000000 --- a/services/HistoryService/src/HistoryService.cpp +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright (c) 2014 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. - */ - -#include -#include -#include -#include -#include -#include - -#include "ServiceManager.h" -#include "HistoryService.h" -#include "HistoryItem.h" -#include "AbstractWebEngine.h" -#include "EflTools.h" - -namespace tizen_browser -{ -namespace services -{ - -EXPORT_SERVICE(HistoryService, DOMAIN_HISTORY_SERVICE) - -HistoryService::HistoryService() : m_testDbMod(false) -{ - BROWSER_LOGD("HistoryService"); -} - -HistoryService::~HistoryService() -{ -} - -std::shared_ptr HistoryService::getStorageManager() -{ - if (!m_storageManager) { - m_storageManager = std::dynamic_pointer_cast < - tizen_browser::services::StorageService, - tizen_browser::core::AbstractService > ( - tizen_browser::core::ServiceManager::getInstance().getService( - DOMAIN_STORAGE_SERVICE)); - } - - M_ASSERT(m_storageManager); - m_storageManager->init(m_testDbMod); - - return m_storageManager; -} - -void HistoryService::setStorageServiceTestMode(bool testmode) { - m_testDbMod = testmode; -} - -int HistoryService::getHistoryItemsCount(){ - return history_list.size(); -} - -static int __get_duplicated_ids_p(int **ids, int *count, const int limit, const int offset, - const bp_history_offset order_column_offset, const int ordering, - const bp_history_offset check_column_offset, - const char *keyword, const int is_like) -{ - bp_history_rows_cond_fmt conds; - memset(&conds, 0x00, sizeof(bp_history_rows_cond_fmt)); - - conds.limit = limit; - conds.offset = offset; - conds.ordering = ordering; - conds.order_offset = order_column_offset; - conds.period_offset = BP_HISTORY_O_DATE_CREATED; - conds.period_type = BP_HISTORY_DATE_ALL; - - return bp_history_adaptor_get_cond_ids_p - (ids, count, - &conds, - check_column_offset, - keyword, - is_like); -} - -void HistoryService::addHistoryItem(std::shared_ptr his){ - - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - his->setFavIcon(his->getFavIcon()); - std::shared_ptr favicon = his->getFavIcon(); - - int id = -1; - int ret = bp_history_adaptor_create(&id); - if (ret<0){ - BROWSER_LOGE("Error! Could not create new bookmark!"); - } - - int *ids=NULL; - int count=-1; - int **id1=&ids; - int *count1=&count; - - bp_history_rows_cond_fmt conds; - conds.limit = 20; //no of rows to get negative means no limitation - - conds.offset = -1; //the first row's index - conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort - - conds.ordering = 1; //way of ordering 0 asc 1 desc - - conds.period_offset = BP_HISTORY_O_DATE_CREATED; - conds.period_type = BP_HISTORY_DATE_TODAY; - - ret = bp_history_adaptor_get_cond_ids_p(id1 ,count1, &conds, 0, NULL, 0); - if (ret<0){ - BROWSER_LOGE("Error! Could not get ids!"); - } - - bp_history_adaptor_set_url(id, (his->getUrl()).c_str()); - bp_history_adaptor_set_title(id, (his->getTitle()).c_str()); - bp_history_adaptor_set_date_visited(id,-1); - - std::unique_ptr favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon); - unsigned char * fav = std::move((unsigned char*)favicon_blob->getData()); - bp_history_adaptor_set_icon(id, favicon->width, favicon->height, fav, favicon_blob->getLength()); - history_list.push_back(his); - - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -} - - -void HistoryService::insertOrRefresh(std::shared_ptr hi) { - getStorageManager()->insertOrRefresh(hi); -} - -/** - * @throws HistoryException on error - */ -void HistoryService::clearAllHistory() -{ - bp_history_adaptor_reset(); - history_list.clear(); -} - -int HistoryService::getHistoryId(const std::string & url) -{ - bp_history_rows_cond_fmt conds; - conds.limit = -1; - conds.offset = 0; - conds.order_offset = BP_HISTORY_O_DATE_CREATED; - conds.ordering = 0; - conds.period_offset = BP_HISTORY_O_DATE_CREATED; - conds.period_type = BP_HISTORY_DATE_ALL; - int *ids = 0; - int ids_count = 0; - int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&ids_count, &conds, BP_HISTORY_O_URL, url.c_str(), 0); - if (ids_count!=0){ - int i = *ids; - free(ids); - return i; - } - return 0; -} - -/** - * @throws HistoryException on error - */ -void HistoryService::clearURLHistory(const std::string & url) -{ - int id = getHistoryId(url); - if (id != 0) - bp_history_adaptor_delete(id); - if (0 == (getHistoryItemsCount() - 1)) { - historyEmpty(true); - history_list.clear(); - } -} - - -HistoryItemVector& HistoryService::getHistoryItems(int historyDepthInDays, int maxItems) -{ - history_list.clear(); - - int *ids=NULL; - int count=-1; - int **id1=&ids; - int *count1=&count; - - bp_history_rows_cond_fmt conds; - conds.limit = 20; //no of rows to get negative means no limitation - - conds.offset = -1; //the first row's index - conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort - - conds.ordering = 1; //way of ordering 0 asc 1 desc - - conds.period_offset = BP_HISTORY_O_DATE_CREATED; - - conds.period_type = BP_HISTORY_DATE_TODAY; - - int ret = bp_history_adaptor_get_cond_ids_p(id1 ,count1, &conds, 0, NULL, 0); - if (ret<0){ - BROWSER_LOGD("Error! Could not get ids!"); - } - - bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); - - for(int i = 0; i< (*count1); i++){ - bp_history_info_fmt history_info; - bp_history_adaptor_get_info(ids[i],offset,&history_info); - - int date; - bp_history_adaptor_get_date_created(ids[i], &date); - - struct tm *item_time_info; - time_t item_time = (time_t)date; - item_time_info = localtime(&item_time); - - int m_year = item_time_info->tm_year; - int m_month = item_time_info->tm_mon + 1; - int m_day = item_time_info->tm_yday; - int m_month_day = item_time_info->tm_mday; - int m_date = date; - int min = item_time_info->tm_min; - int hour= item_time_info->tm_hour; - int sec = item_time_info->tm_sec; - m_year = 2000 + m_year % 100; - - std::shared_ptr history = std::make_shared(std::string(history_info.url)); - boost::gregorian::date d(m_year,m_month,m_month_day); - boost::posix_time::ptime t(d,boost::posix_time::time_duration(hour,min,sec)); - history->setLastVisit(t); - history->setUrl(std::string(history_info.url ? history_info.url : "")); - history->setTitle(std::string(history_info.title ? history_info.title : "")); - history_list.push_back(history); - } - ids = NULL; - free(ids); - - return history_list; -} - -int HistoryService::getHistoryVisitCounter(const std::string & url) -{ - return getStorageManager()->getHistoryVisitCounter(url); -} - -} -} diff --git a/services/BookmarksUI/CMakeLists.txt b/services/MainUI/CMakeLists.txt similarity index 62% rename from services/BookmarksUI/CMakeLists.txt rename to services/MainUI/CMakeLists.txt index 1806b0f..fd1710f 100644 --- a/services/BookmarksUI/CMakeLists.txt +++ b/services/MainUI/CMakeLists.txt @@ -1,11 +1,11 @@ -project(BookmarksUI) +project(MainUI) -set(BookmarksUI_SRCS - BookmarksUI.cpp +set(MainUI_SRCS + MainUI.cpp ) -set(BookmarksUI_HEADERS - BookmarksUI.h +set(MainUI_HEADERS + MainUI.h ) include(Coreheaders) @@ -13,7 +13,7 @@ include(EFLHelpers) include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) -add_library(${PROJECT_NAME} SHARED ${BookmarksUI_SRCS}) +add_library(${PROJECT_NAME} SHARED ${MainUI_SRCS}) if(TIZEN_BUILD) target_link_libraries(${PROJECT_NAME} ${pkgs_LDFLAGS}) @@ -24,6 +24,6 @@ install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION services/static) include(EDCCompile) -EDJ_TARGET(Bookmarks.edj - ${CMAKE_CURRENT_SOURCE_DIR}/edc/Bookmarks.edc +EDJ_TARGET(MainUI.edj + ${CMAKE_CURRENT_SOURCE_DIR}/edc/MainUI.edc ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp new file mode 100644 index 0000000..d45d22c --- /dev/null +++ b/services/MainUI/MainUI.cpp @@ -0,0 +1,559 @@ +/* + * Copyright (c) 2014 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. + */ + +#include +#include +#include +#include + +#include "MainUI.h" +#include "ServiceManager.h" +#include "BrowserLogger.h" +#include "Tools/EflTools.h" +#include "../Tools/BrowserImage.h" + +#define efl_scale (elm_config_scale_get() / elm_app_base_scale_get()) + +namespace tizen_browser{ +namespace base_ui{ + +EXPORT_SERVICE(MainUI, "org.tizen.browser.mainui") + +typedef struct _HistoryItemData +{ + std::shared_ptr item; + std::shared_ptr mainUI; +} HistoryItemData; + +typedef struct _BookmarkItemData +{ + std::shared_ptr item; + std::shared_ptr mainUI; +} BookmarkItemData; + +struct ItemData{ + tizen_browser::base_ui::MainUI * mainUI; + const char* button_name; + Elm_Object_Item * e_item; +}; + +MainUI::MainUI() + : m_gengrid(nullptr) + , m_genListTop(nullptr) + , m_genListBottom(nullptr) + , m_parent(nullptr) + , m_big_item_class(nullptr) + , m_medium_item_class(nullptr) + , m_small_item_class(nullptr) + , m_bookmark_item_class(nullptr) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + edjFilePath = EDJE_DIR; + edjFilePath.append("MainUI/MainUI.edj"); +} + +MainUI::~MainUI() +{ +} + +void MainUI::show(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(nullptr, edjFilePath.c_str()); + m_layout = elm_layout_add(parent); + elm_layout_file_set(m_layout, edjFilePath.c_str(), "mv_bookmarks"); + evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(m_layout); + m_parent = m_layout; + + m_genListMVBig = elm_genlist_add(m_layout); + elm_object_part_content_set(m_layout, "elm.swallow.mvBig", m_genListMVBig); + elm_genlist_homogeneous_set(m_genListMVBig, EINA_FALSE); + elm_genlist_multi_select_set(m_genListMVBig, EINA_FALSE); + elm_genlist_select_mode_set(m_genListMVBig, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListMVBig, ELM_LIST_LIMIT); + evas_object_size_hint_weight_set(m_genListMVBig, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + m_genListMVMedium = elm_genlist_add(m_layout); + elm_object_part_content_set(m_layout, "elm.swallow.mvMedium", m_genListMVMedium); + elm_genlist_homogeneous_set(m_genListMVMedium, EINA_FALSE); + elm_genlist_multi_select_set(m_genListMVMedium, EINA_FALSE); + elm_genlist_select_mode_set(m_genListMVMedium, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListMVMedium, ELM_LIST_LIMIT); + evas_object_size_hint_weight_set(m_genListMVMedium, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + m_genListMVSmall = elm_genlist_add(m_layout); + elm_object_part_content_set(m_layout, "elm.swallow.mvSmall", m_genListMVSmall); + elm_genlist_homogeneous_set(m_genListMVSmall, EINA_FALSE); + elm_genlist_multi_select_set(m_genListMVSmall, EINA_FALSE); + elm_genlist_select_mode_set(m_genListMVSmall, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListMVSmall, ELM_LIST_LIMIT); + evas_object_size_hint_weight_set(m_genListMVSmall, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + if (!m_big_item_class) { + m_big_item_class = elm_genlist_item_class_new(); + m_big_item_class->item_style = "big_grid_item"; + m_big_item_class->func.text_get = _grid_text_get; + m_big_item_class->func.content_get = _grid_content_get; + m_big_item_class->func.state_get = nullptr; + m_big_item_class->func.del = nullptr; + } + + if (!m_medium_item_class) { + m_medium_item_class = elm_genlist_item_class_new(); + m_medium_item_class->item_style = "medium_grid_item"; + m_medium_item_class->func.text_get = _grid_text_get; + m_medium_item_class->func.content_get = _grid_content_get; + m_medium_item_class->func.state_get = nullptr; + m_medium_item_class->func.del = nullptr; + } + + if (!m_small_item_class) { + m_small_item_class = elm_genlist_item_class_new(); + m_small_item_class->item_style = "small_grid_item"; + m_small_item_class->func.text_get = _grid_text_get; + m_small_item_class->func.content_get = _grid_content_get; + m_small_item_class->func.state_get = nullptr; + m_small_item_class->func.del = nullptr; + } + + /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); + evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/ + + + m_gengrid = elm_gengrid_add(m_layout); + //elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid); + + evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, nullptr); + evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, nullptr); + evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this); + + if (!m_bookmark_item_class) { + m_bookmark_item_class = elm_gengrid_item_class_new(); + m_bookmark_item_class->item_style = "grid_item"; + m_bookmark_item_class->func.text_get = _grid_bookmark_text_get; + m_bookmark_item_class->func.content_get = _grid_bookmark_content_get; + m_bookmark_item_class->func.state_get = nullptr; + m_bookmark_item_class->func.del = nullptr; + } + + M_ASSERT(m_parent); + elm_theme_extension_add(nullptr, edjFilePath.c_str()); + elm_gengrid_align_set(m_gengrid, 0, 0); + elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE); + elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE); + //elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE); + elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_scroller_page_size_set(m_gengrid, 0, 327); + evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_gengrid_item_size_set(m_gengrid, 364 * efl_scale, 320 * efl_scale); + + showTopButtons(); + showBottomButton(); +} + + +void MainUI::showTopButtons() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(nullptr, edjFilePath.c_str()); + m_genListTop = elm_genlist_add(m_layout); + elm_object_part_content_set(m_layout, "elm.swallow.genlistTop", m_genListTop); + elm_genlist_homogeneous_set(m_genListTop, EINA_FALSE); + elm_genlist_multi_select_set(m_genListTop, EINA_FALSE); + elm_genlist_select_mode_set(m_genListTop, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListTop, ELM_LIST_LIMIT); + //elm_genlist_decorate_mode_set(m_genListTop, EINA_TRUE); + evas_object_size_hint_weight_set(m_genListTop, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); + evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/ + + m_itemClassTop = elm_genlist_item_class_new(); + m_itemClassTop->item_style = "top_button_item"; + m_itemClassTop->func.text_get = nullptr; // &listTopItemTextGet; + m_itemClassTop->func.content_get = &listTopItemContentGet; + m_itemClassTop->func.state_get = 0; + m_itemClassTop->func.del = 0; + + ItemData * id = new ItemData; + id->mainUI = this; + Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListTop, //genlist + m_itemClassTop, //item Class + id, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE,//item type + nullptr, + nullptr //data passed to above function + ); + id->e_item = elmItem; + ItemData * id2 = new ItemData; + id2->mainUI = this; + Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListTop, //genlist + m_itemClassTop, //item Class + id2, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE,//item type + nullptr, + nullptr //data passed to above function + ); + id2->e_item = elmItem2; + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); +} + +void MainUI::showBottomButton() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(nullptr, edjFilePath.c_str()); + m_genListBottom = elm_genlist_add(m_layout); + elm_object_part_content_set(m_layout, "elm.swallow.genlistBottom", m_genListBottom); + elm_genlist_homogeneous_set(m_genListBottom, EINA_FALSE); + elm_genlist_multi_select_set(m_genListBottom, EINA_FALSE); + elm_genlist_select_mode_set(m_genListBottom, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListBottom, ELM_LIST_LIMIT); + //elm_genlist_decorate_mode_set(m_genListBottom, EINA_TRUE); + evas_object_size_hint_weight_set(m_genListBottom, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); + evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/ + + m_itemClassBottom = elm_genlist_item_class_new(); + m_itemClassBottom->item_style = "bottom_button_item"; + m_itemClassBottom->func.text_get = nullptr; + m_itemClassBottom->func.content_get = &listItemBottomContentGet; + m_itemClassBottom->func.state_get = 0; + m_itemClassBottom->func.del = 0; + + ItemData * id = new ItemData; + id->mainUI = this; + Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListBottom, //genlist + m_itemClassBottom, //item Class + id, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE,//item type + nullptr, + nullptr //data passed to above function + ); + id->e_item = elmItem; +} + +Evas_Object* MainUI::listTopItemContentGet(void* data, Evas_Object* obj, const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!strcmp(part, "mostvisited_click")) + { + Evas_Object *mvButton = elm_button_add(obj); + elm_object_style_set(mvButton, "invisible_button"); + evas_object_smart_callback_add(mvButton, "clicked", tizen_browser::base_ui::MainUI::_mostVisited_clicked, data); + return mvButton; + } + else if(!strcmp(part, "bookmark_click")) + { + Evas_Object *bmButton = elm_button_add(obj); + elm_object_style_set(bmButton, "invisible_button"); + evas_object_smart_callback_add(bmButton, "clicked", tizen_browser::base_ui::MainUI::_bookmark_clicked, data); + return bmButton; + } + return nullptr; +} + +void MainUI::_mostVisited_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->mainUI->mostVisitedClicked(std::string()); +} + +void MainUI::_bookmark_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->mainUI->bookmarkClicked(std::string()); +} + +void MainUI::_bookmark_manager_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->mainUI->bookmarkManagerClicked(std::string()); +} + +Evas_Object* MainUI::listItemBottomContentGet(void* data, Evas_Object* obj, const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!strcmp(part, "bookmarkmanager_click")) + { + Evas_Object *bmButton = elm_button_add(obj); + elm_object_style_set(bmButton, "invisible_button"); + evas_object_smart_callback_add(bmButton, "clicked", tizen_browser::base_ui::MainUI::_bookmark_manager_clicked, data); + return bmButton; + } + return nullptr; +} + +void MainUI::addHistoryItem(std::shared_ptr hi) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + if (m_map_history_views.size() >= 5) + return; + + HistoryItemData *itemData = new HistoryItemData(); + itemData->item = hi; + itemData->mainUI = std::shared_ptr(this); + Elm_Object_Item* historyView = nullptr; + + switch(m_map_history_views.size()) + { + case 0: + BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); + historyView = elm_genlist_item_append(m_genListMVBig, m_big_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); + break; + case 1: + case 2: + BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); + historyView = elm_genlist_item_append(m_genListMVMedium, m_medium_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); + break; + case 3: + case 4: + BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); + historyView = elm_genlist_item_append(m_genListMVSmall, m_small_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); + break; + } + + m_map_history_views.insert(std::pair(hi->getUrl(),historyView)); + + setEmptyGengrid(false); +} + +void MainUI::addHistoryItems(std::vector > items) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + int i = 0; + for (auto it = items.begin(); it != items.end(); ++it) { + i++; + if (i > 5) break; + addHistoryItem(*it); + } +} + +void MainUI::addBookmarkItem(std::shared_ptr bi) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + BookmarkItemData *itemData = new BookmarkItemData(); + itemData->item = bi; + itemData->mainUI = std::shared_ptr(this); + Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_bookmark_item_class, itemData, nullptr, this); + m_map_bookmark_views.insert(std::pair(bi->getAddress(),bookmarkView)); + + // unselect by default + elm_gengrid_item_selected_set(bookmarkView, EINA_FALSE); + + setEmptyGengrid(false); +} + +void MainUI::addBookmarkItems(std::vector > items) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + for (auto it = items.begin(); it != items.end(); ++it) { + addBookmarkItem(*it); + } +} + +char* MainUI::_grid_text_get(void *data, Evas_Object *obj, const char *part) +{ + HistoryItemData *itemData = reinterpret_cast(data); + if (!strcmp(part, "page_title")) { + return strdup(itemData->item->getTitle().c_str()); + } + if (!strcmp(part, "page_url")) { + return strdup(itemData->item->getUrl().c_str()); + } + return strdup(""); +} + +char* MainUI::_grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part) +{ + BookmarkItemData *itemData = reinterpret_cast(data); + if (!strcmp(part, "page_title")) { + return strdup(itemData->item->getTittle().c_str()); + } + if (!strcmp(part, "page_url")) { + return strdup(itemData->item->getAddress().c_str()); + } + return strdup(""); +} + +Evas_Object * MainUI::_grid_content_get(void *data, Evas_Object *obj, const char *part) +{ + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + HistoryItemData *itemData = reinterpret_cast(data); + + if (!strcmp(part, "elm.thumbnail")) { + if (itemData->item->getThumbnail()) { + Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->mainUI->m_parent); + return thumb; + } + else { + return nullptr; + } + } + else if (!strcmp(part, "elm.thumbButton")) { + Evas_Object *thumbButton = elm_button_add(obj); + elm_object_style_set(thumbButton, "thumbButton"); + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MainUI::_thumbSelected, data); + return thumbButton; + } + return nullptr; +} + +Evas_Object * MainUI::_grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part) +{ + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + BookmarkItemData *itemData = reinterpret_cast(data); + + if (!strcmp(part, "elm.thumbnail")) { + if (itemData->item->getThumbnail()) { + Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->mainUI->m_parent); + return thumb; + } + else { + return nullptr; + } + } + else if (!strcmp(part, "elm.thumbButton")) { + Evas_Object *thumbButton = elm_button_add(obj); + elm_object_style_set(thumbButton, "thumbButton"); + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MainUI::_thumbSelected, data); + return thumbButton; + } + return nullptr; +} + + +void MainUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) +{ + Elm_Object_Item * selected = reinterpret_cast(event_info); + HistoryItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); + MainUI * self = reinterpret_cast(data); + + self->historyClicked(itemData->item); +} + +void MainUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) +{ + HistoryItemData * itemData = reinterpret_cast(data); + itemData->mainUI->historyClicked(itemData->item); +} + +void MainUI::clearHistoryGenlist() +{ + elm_genlist_clear(m_genListMVSmall); + elm_genlist_clear(m_genListMVBig); + elm_genlist_clear(m_genListMVMedium); + m_map_history_views.clear(); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvBig")); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvSmall")); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvMedium")); +} + +void MainUI::showHistoryGenlist() +{ + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.grid")); + elm_object_part_content_unset(m_layout, "elm.swallow.grid"); + elm_object_part_content_set(m_layout, "elm.swallow.mvBig", m_genListMVBig); + elm_object_part_content_set(m_layout, "elm.swallow.mvSmall", m_genListMVSmall); + elm_object_part_content_set(m_layout, "elm.swallow.mvMedium", m_genListMVMedium); +} + +void MainUI::clearBookmarkGengrid() +{ + elm_gengrid_clear(m_gengrid); + m_map_bookmark_views.clear(); + evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.grid")); +} + +void MainUI::showBookmarkGengrid() +{ + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvBig")); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvSmall")); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvMedium")); + elm_object_part_content_unset(m_layout, "elm.swallow.mvBig"); + elm_object_part_content_unset(m_layout, "elm.swallow.mvSmall"); + elm_object_part_content_unset(m_layout, "elm.swallow.mvMedium"); + elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid); +} + +void MainUI::hide() +{ + BROWSER_LOGD("MainUI Hide"); + evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.genlistTop")); + evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.genlistBottom")); + evas_object_hide(m_layout); + clearItems(); +} + +void MainUI::clearItems() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + clearHistoryGenlist(); + clearBookmarkGengrid(); + elm_genlist_clear(m_genListTop); + elm_genlist_clear(m_genListBottom); +} + +Evas_Object* MainUI::createNoHistoryLabel() +{ + Evas_Object *label = elm_label_add(m_parent); + elm_object_text_set(label, "No favorite websites."); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + return label; +} + +void MainUI::setEmptyGengrid(bool setEmpty) +{ + if(setEmpty) { + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoHistoryLabel()); + } else { + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", nullptr); + } +} + +void MainUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,in", "over2"); + + // selected manually + elm_gengrid_item_selected_set(item, EINA_TRUE); +} + +void MainUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,out", "over2"); + + // unselected manually + elm_gengrid_item_selected_set(item, EINA_FALSE); +} + +} +} diff --git a/services/MainUI/MainUI.h b/services/MainUI/MainUI.h new file mode 100644 index 0000000..c0beb25 --- /dev/null +++ b/services/MainUI/MainUI.h @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2014 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. + */ + +#ifndef MAINUI_H +#define MAINUI_H + +#include +#include + +#include "AbstractUIComponent.h" +#include "AbstractService.h" +#include "ServiceFactory.h" +#include "service_macros.h" +#include "services/HistoryService/HistoryItem.h" +#include "BookmarkItem.h" + +namespace tizen_browser{ +namespace base_ui{ + +class BROWSER_EXPORT MainUI + : public tizen_browser::interfaces::AbstractUIComponent + , public tizen_browser::core::AbstractService +{ +public: + MainUI(); + ~MainUI(); + void show(Evas_Object *main_layout); + void hide(); + virtual std::string getName(); + void clearHistoryGenlist(); + void clearBookmarkGengrid(); + void showHistoryGenlist(); + void showBookmarkGengrid(); + void showTopButtons(); + void showBottomButton(); + void clearItems(); + + void addHistoryItem(std::shared_ptr); + void addHistoryItems(std::vector >); + void addBookmarkItem(std::shared_ptr); + void addBookmarkItems(std::vector >); + + boost::signals2::signal)> historyClicked; + boost::signals2::signal mostVisitedClicked; + boost::signals2::signal bookmarkClicked; + boost::signals2::signal bookmarkManagerClicked; +private: + static Evas_Object* listItemBottomContentGet(void *data, Evas_Object *obj, const char *part); + static Evas_Object* listTopItemContentGet(void *data, Evas_Object *obj, const char *part); + //static char* listItemTextGet(void *data, Evas_Object *obj, const char *part); + + static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); + static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); + static char* _grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part); + static Evas_Object * _grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part); + static void _itemSelected(void * data, Evas_Object * obj, void * event_info); + static void _item_deleted(void *data, Evas_Object *obj); + static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); + static void _deleteBookmark(void *data, Evas_Object *obj, void *event_info); + void setEmptyGengrid(bool setEmpty); + + static void _mostVisited_clicked(void * data, Evas_Object * obj, void * event_info); + static void _bookmark_clicked(void * data, Evas_Object * obj, void * event_info); + static void _bookmark_manager_clicked(void * data, Evas_Object * obj, void * event_info); +private: + Evas_Object *m_genListTop; + Evas_Object *m_genListMVBig; + Evas_Object *m_genListMVMedium; + Evas_Object *m_genListMVSmall; + Elm_Genlist_Item_Class *m_itemClassTop; + Evas_Object *m_genListBottom; + Elm_Genlist_Item_Class *m_itemClassBottom; + Evas_Object *m_gengrid; + Evas_Object *m_layout; + Evas_Object *m_parent; + Elm_Gengrid_Item_Class * m_big_item_class; + Elm_Gengrid_Item_Class * m_medium_item_class; + Elm_Gengrid_Item_Class * m_small_item_class; + Elm_Gengrid_Item_Class * m_bookmark_item_class; + std::multimap m_map_history_views; + std::map m_map_bookmark_views; + bool m_gengridSetup; + std::string edjFilePath; + Evas_Object *createNoHistoryLabel(); + + static void focusItem(void* data, Evas_Object* obj, void* event_info); + static void unFocusItem(void* data, Evas_Object* obj, void* event_info); +}; + +} +} + +#endif // BOOKMARKSUI_H diff --git a/services/MainUI/edc/MainUI.edc b/services/MainUI/edc/MainUI.edc new file mode 100644 index 0000000..8357ec7 --- /dev/null +++ b/services/MainUI/edc/MainUI.edc @@ -0,0 +1,1505 @@ +#define DEBUG_RECT_OVER(over_part, r, g, b) \ + part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ + \ +scale:1; \ + type : RECT; \ + repeat_events: 1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + color: r g b 128; \ + rel1 { to: over_part; relative: 0 0; } \ + rel2 { to: over_part; relative: 1 1; } \ + } \ + } + +collections { + +#define WIDTH 1920 +#define HEIGHT 181 +#define ITEM_WIDTH 374 +#define PARENT_ITEM_HEIGHT 36 + + group{ + name: "elm/button/base/invisible_button"; + parts{ + part{ + name: "button"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 0 0 0 0; + } + } + part{ + name: "over"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "button";} + rel2 { relative: 1.0 1.0;to: "button";} + color: 0 0 0 0; + } + } + } + programs{ + program { + name: "mouse_click"; + signal: "mouse,clicked,1"; + source: "over"; + script { + emit("elm,action,click", ""); + } + } + } + } + +group { name: "elm/button/base/thumbButton"; + images { + image: "ico_delete.png" COMP; + } + parts { + part { name: "elm.swallow.content"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + visible: 1; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + } + } + } + + programs { + program { name: "mouse,clicked"; + signal: "mouse,down,1"; + source: "elm.swallow.content"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + } +} + +group { name: "mv_bookmarks"; + data { + item: "focus_highlight" "off"; + } + images { + image: "web_shadow.png" COMP; + } + color_classes{ + color_class{ + name: "defaultBgColor"; + color: 18 22 34 255; + } + color_class{ + name: "focusBgColor"; + color: 69 143 255 255; + } + color_class{ + name: "highlightBgColor"; + color: 69 143 255 102; + } + color_class{ + name: "imageHighlight"; + color: 255 255 255 102; + } + color_class{ + name: "focusbtBgColor"; + color: 22 120 224 255; + } + color_class{ + name: "titleTextColor"; + color: 74 74 74 255; + } + color_class{ + name: "focusTextColor"; + color: 255 255 255 255; + } + color_class{ + name: "highlightTextColor"; + color: 255 255 255 51; + } + color_class{ + name: "urlTextColor"; + color: 116 116 116 204; + } + color_class{ + name: "transparent"; + color: 0 0 0 0; + } + } + + parts { + part { name: "genlistTop_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + min: 1920 181; + max: 1920 181; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; offset: 0 104; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "gengrid_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + min: 1920 626; + max: 1920 626; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 1; to: "genlistTop_bg"; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "genlistBottom_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + min: 1920 181; + max: 1920 181; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 1; to: "gengrid_bg"; + } + rel2{ + relative: 1 1; + } + } + } + + part { name: "elm.swallow.grid"; + type: SWALLOW; + description { state: "default" 0.0; + min: 1920 614; + max: 1920 614; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "gengrid_bg"; offset: 63 0; + } + rel2 { + relative: 1 1; + offset: 0 0; + } + } + } + part { name: "elm.swallow.mvBig"; + type: SWALLOW; + description { state: "default" 0.0; + min: 800 626; + max: 800 626; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "gengrid_bg"; offset: 63 0; + } + rel2 { + relative: 1 1; + offset: 0 0; + } + } + } + part { name: "elm.swallow.mvMedium"; + type: SWALLOW; + description { state: "default" 0.0; + min: 600 626; + max: 600 626; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "gengrid_bg"; offset: 889 0; + } + rel2{ + relative: 1 1; + offset: 0 0; + } + } + } + part { name: "elm.swallow.mvSmall"; + type: SWALLOW; + description { state: "default" 0.0; + min: 342 626; + max: 342 626; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "gengrid_bg"; offset: 1515 0; + } + rel2 { + relative: 1 1; + offset: 0 0; + } + } + } + + part { name: "elm.swallow.genlistTop"; + type: SWALLOW; + description { state: "default" 0.0; + min: 1920 181; + max: 1920 181; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "genlistTop_bg"; + } + rel2 { + relative: 1 1; + offset: 0 0; + } + } + } + part { name: "uri_bar_shadow"; + type: IMAGE; + scale: 1; + repeat_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + fixed: 0 0; + min: 1920 14; + max: 1920 14; + image.normal: "web_shadow.png"; + rel1 { relative: 0.0 0.0; to: "elm.swallow.genlistTop"; } + rel2 { relative: 1.0 1.0; } + } + } + part { name: "elm.swallow.genlistBottom"; + type: SWALLOW; + description { state: "default" 0.0; + min: 1920 181; + max: 1920 181; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "genlistBottom_bg"; + } + rel2 { + relative: 1 1; + offset: 0 0; + } + } + } + part { name: "elm.swallow.empty"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 0.5; + rel1 { + relative: 0.5 0.5; + } + rel2 { + relative: 0.5 0.5; + } + } + } + } +} + +group { name: "elm/genlist/item/big_grid_item/default"; + data.item: "texts" "page_title page_url"; + data.item: "contents" "elm.thumbnail elm.thumbButton"; + min: 600 614; + max: 600 614; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 800 613; + max: 800 613; + visible: 1; + color: 231 231 231 255; + rel1.offset: 0 13; + } + description { state: "selected"; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "elm.thumbnail"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.0; + color : 231 231 231 255; + min: 800 526; + max: 800 526; + rel1 { + relative: 0.0 0.0; to: "bg"; + } + rel2 { + relative: 1.0 1.0; to: "bg"; + } + } + description { state: "selected"; + inherit: "default" 0.0; + } + } + + part { name: "focus_highlight"; + type: IMAGE; + description { state: "default" 0.0; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; + } + image.normal: "web_frame_selected.png"; + image.border: 8 8 8 0; + image.border_scale: 1; + image.middle: NONE; + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "background"; + type: RECT; + description { state: "default" 0.0; + min: 800 87; + max: 800 87; + align: 0.0 0.0; + color: 231 231 231 255; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 1.0; + } + rel2 { + relative: 1.0 1.0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "page_title"; + type: TEXT; + description { state: "default" 0.0; + min: 700 48; + max: 700 48; + align: 0.0 0.5; + rel1 { + to: "background"; + relative: 0.0 0.0; + offset: 17 0; + } + rel2 { + to: "background"; + relative: 1.0 1.0; + } + color: 51 51 51 255; + text { + text: "Web page title"; + font: "Sans"; + size: 27; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "page_url"; + type: TEXT; + description { state: "default" 0.0; + min: 700 48; + max: 700 48; + align: 0 0.5; + rel1 { + to: "page_title"; + relative: 0.0 1.0; + } + rel2 { + to: "page_title"; + relative: 1.0 1.0; + } + color: 153 153 153 255; + text { + text: "Web page url"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "elm.thumbButton"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "elm.thumbnail"; + rel2.to: "elm.thumbnail"; + } + } + + part { name: "over2"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "bg"; + rel2.to: "background"; + } + } + part { name: "over3"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "background"; + rel2.to: "background"; + } + } + } + + programs{ + program { name: "mouse_in"; + signal: "mouse,in"; + source: "over2"; + action: STATE_SET "selected" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "over2"; + action: STATE_SET "default" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + } +} + +group { name: "elm/genlist/item/medium_grid_item/default"; + data.item: "texts" "page_title page_url"; + data.item: "contents" "elm.thumbnail elm.thumbButton"; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 600 300; + max: 600 300; + visible: 1; + color: 231 231 231 255; + rel1.offset: 0 13; + } + description { state: "selected"; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "elm.thumbnail"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.0; + color : 231 231 231 255; + min: 600 203; + max: 600 203; + rel1 { + relative: 0.0 0.0; to: "bg"; + } + rel2 { + relative: 1.0 1.0; to: "bg"; + } + } + description { state: "selected"; + inherit: "default" 0.0; + } + } + + part { name: "focus_highlight"; + type: IMAGE; + description { state: "default" 0.0; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; + } + image.normal: "web_frame_selected.png"; + image.border: 8 8 8 0; + image.border_scale: 1; + image.middle: NONE; + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "background"; + type: RECT; + description { state: "default" 0.0; + min: 600 87; + max: 600 87; + align: 0.0 0.0; + color: 231 231 231 255; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 1.0; + } + rel2 { + relative: 1.0 1.0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "page_title"; + type: TEXT; + description { state: "default" 0.0; + min: 500 48; + max: 500 48; + align: 0.0 0.5; + rel1 { + to: "background"; + relative: 0.0 0.0; + offset: 17 0; + } + rel2 { + to: "background"; + relative: 1.0 1.0; + } + color: 51 51 51 255; + text { + text: "Web page title"; + font: "Sans"; + size: 27; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "page_url"; + type: TEXT; + description { state: "default" 0.0; + min: 500 48; + max: 500 48; + align: 0 0.5; + rel1 { + to: "page_title"; + relative: 0.0 1.0; + } + rel2 { + to: "page_title"; + relative: 1.0 1.0; + } + color: 153 153 153 255; + text { + text: "Web page url"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "elm.thumbButton"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "elm.thumbnail"; + rel2.to: "elm.thumbnail"; + } + } + + part { name: "over2"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "bg"; + rel2.to: "background"; + } + } + part { name: "over3"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "background"; + rel2.to: "background"; + } + } + } + + programs{ + program { name: "mouse_in"; + signal: "mouse,in"; + source: "over2"; + action: STATE_SET "selected" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "over2"; + action: STATE_SET "default" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + } +} + +group { name: "elm/genlist/item/small_grid_item/default"; + data.item: "texts" "page_title page_url"; + data.item: "contents" "elm.thumbnail elm.thumbButton"; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 342 300; + max: 342 300; + visible: 1; + color: 231 231 231 255; + rel1.offset: 0 13; + } + description { state: "selected"; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "elm.thumbnail"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.0; + color : 231 231 231 255; + min: 342 203; + max: 342 203; + rel1 { + relative: 0.0 0.0; to: "bg"; + } + rel2 { + relative: 1.0 1.0; to: "bg"; + } + } + description { state: "selected"; + inherit: "default" 0.0; + } + } + + part { name: "focus_highlight"; + type: IMAGE; + description { state: "default" 0.0; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; + } + image.normal: "web_frame_selected.png"; + image.border: 8 8 8 0; + image.border_scale: 1; + image.middle: NONE; + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "background"; + type: RECT; + description { state: "default" 0.0; + min: 342 87; + max: 342 87; + align: 0.0 0.0; + color: 231 231 231 255; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 1.0; + } + rel2 { + relative: 1.0 1.0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "page_title"; + type: TEXT; + description { state: "default" 0.0; + min: 320 48; + max: 320 48; + align: 0.0 0.5; + rel1 { + to: "background"; + relative: 0.0 0.0; + offset: 17 0; + } + rel2 { + to: "background"; + relative: 1.0 1.0; + } + color: 51 51 51 255; + text { + text: "Web page title"; + font: "Sans"; + size: 27; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "page_url"; + type: TEXT; + description { state: "default" 0.0; + min: 320 48; + max: 320 48; + align: 0 0.5; + rel1 { + to: "page_title"; + relative: 0.0 1.0; + } + rel2 { + to: "page_title"; + relative: 1.0 1.0; + } + color: 153 153 153 255; + text { + text: "Web page url"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "elm.thumbButton"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "elm.thumbnail"; + rel2.to: "elm.thumbnail"; + } + } + + part { name: "over2"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "bg"; + rel2.to: "background"; + } + } + part { name: "over3"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "background"; + rel2.to: "background"; + } + } + } + + programs{ + program { name: "mouse_in"; + signal: "mouse,in"; + source: "over2"; + action: STATE_SET "selected" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "over2"; + action: STATE_SET "default" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + } +} + +group { name: "elm/gengrid/item/grid_item/default"; + data.item: "texts" "page_title page_url"; + data.item: "contents" "elm.thumbnail elm.thumbButton"; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 338 294; + max: 338 294; + visible: 1; + color: 231 231 231 255; + rel1.offset: -26 -26; + } + description { state: "selected"; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "elm.thumbnail"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.0; + color : 231 231 231 255; + min: 338 198; + max: 338 198; + rel1 { + relative: 0.0 0.0; to: "bg"; + } + rel2 { + relative: 1.0 1.0; to: "bg"; + } + } + description { state: "selected"; + inherit: "default" 0.0; + } + } + + part { name: "focus_highlight"; + type: IMAGE; + description { state: "default" 0.0; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; + } + image.normal: "web_frame_selected.png"; + image.border: 8 8 8 0; + image.border_scale: 1; + image.middle: NONE; + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "background"; + type: RECT; + description { state: "default" 0.0; + min: 338 87; + max: 338 87; + align: 0.0 0.0; + color: 231 231 231 255; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 1.0; + } + rel2 { + relative: 1.0 1.0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "page_title"; + type: TEXT; + description { state: "default" 0.0; + min: 300 48; + max: 300 48; + align: 0.0 0.5; + rel1 { + to: "background"; + relative: 0.0 0.0; + offset: 17 0; + } + rel2 { + to: "background"; + relative: 1.0 1.0; + } + color: 51 51 51 255; + text { + text: "Web page title"; + font: "Sans"; + size: 27; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "page_url"; + type: TEXT; + description { state: "default" 0.0; + min: 300 48; + max: 300 48; + align: 0 0.5; + rel1 { + to: "page_title"; + relative: 0.0 1.0; + } + rel2 { + to: "page_title"; + relative: 1.0 1.0; + } + color: 153 153 153 255; + text { + text: "Web page url"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "elm.thumbButton"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "elm.thumbnail"; + rel2.to: "elm.thumbnail"; + } + } + + part { name: "over2"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "bg"; + rel2.to: "background"; + } + } + part { name: "over3"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "background"; + rel2.to: "background"; + } + } + } + + programs{ + program { name: "mouse_in"; + signal: "mouse,in"; + source: "over2"; + action: STATE_SET "selected" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "over2"; + action: STATE_SET "default" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + } +} + +group { name: "elm/genlist/item/top_button_item/default"; + min: 1920 181; + max: 1920 181; + data.item: "texts" "mostvisited_text bookmark_text"; + data.item: "contents" "mostvisited_click bookmark_click"; + parts{ + part { + name: "bg_clipper"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 255 255 255 255; + align: 0 0; + min: 1920 181; + max: 1920 181; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + } + } + part { + name: "mostvisited_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 192 192 192 255; + align: 0 0; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 611 58;} + rel2 { relative: 1.0 1.0; to: "bg_clipper"; } + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part{ + name: "mostvisited_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "mostvisited_button";} + rel2 { relative: 1.0 1.0;to: "mostvisited_button";} + color: 0 0 0 255; + text { + text: "Most visited"; + font: "Sans"; + size: 27; + align: 0.5 0.5; + } + } + } + part { + name: "mostvisited_over"; + scale:1; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "mostvisited_button";} + rel2 { relative: 1.0 1.0; to: "mostvisited_button";} + color_class: transparent; + } + } + part { + name: "mostvisited_click"; + scale:1; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "mostvisited_over";} + rel2 { relative: 1.0 1.0; to: "mostvisited_over";} + } + } + part { + name: "bookmark_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 192 192 192 255; + align: 0 0; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 961 58;} + rel2 { relative: 1.0 1.0; to: "bg_clipper"; } + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part{ + name: "bookmark_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "bookmark_button";} + rel2 { relative: 1.0 1.0;to: "bookmark_button";} + color: 0 0 0 255; + text { + text: "Bookmark"; + font: "Sans"; + size: 27; + align: 0.5 0.5; + } + } + } + part { + name: "bookmark_over"; + scale:1; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "bookmark_button";} + rel2 { relative: 1.0 1.0; to: "bookmark_button";} + color_class: transparent; + } + } + part { + name: "bookmark_click"; + scale:1; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "bookmark_over";} + rel2 { relative: 1.0 1.0; to: "bookmark_over";} + color_class: transparent; + } + } + + programs{ + program { + name: "mouse_click_mostvisited"; + signal: "mouse,clicked,1"; + source: "mostvisited_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_mostvisited_click"; + signal: "mouse,in"; + source: "mostvisited_*"; + action: STATE_SET "highlight" 0.0; + target: "mostvisited_button"; + target: "mostvisited_over"; + target: "mostvisited_text"; + } + program { + name: "mouse_out_mostvisited_click"; + signal: "mouse,out"; + source: "mostvisited_*"; + action: STATE_SET "default" 0.0; + target: "mostvisited_button"; + target: "mostvisited_over"; + target: "mostvisited_text"; + } + program { + name: "mouse_click_bookmark"; + signal: "mouse,clicked,1"; + source: "bookmark_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_bookmark_click"; + signal: "mouse,in"; + source: "bookmark_*"; + action: STATE_SET "highlight" 0.0; + target: "bookmark_button"; + target: "bookmark_over"; + target: "bookmark_text"; + } + program { + name: "mouse_out_bookmark_click"; + signal: "mouse,out"; + source: "bookmark_*"; + action: STATE_SET "default" 0.0; + target: "bookmark_button"; + target: "bookmark_over"; + target: "mostvisited_text"; + } + } + } +} + +group { name: "elm/genlist/item/bottom_button_item/default"; + min: 1920 181; + max: 1920 181; + data.item: "texts" "bookmarkmanager_text"; + data.item: "contents" "bookmarkmanager_click"; + parts{ + part { + name: "bg_clipper"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 255 255 255 255; + align: 0 0; + min: 1920 181; + max: 1920 181; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + } + } + part { + name: "bookmarkmanager_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 348 65; + max: 348 65; + color: 192 192 192 255; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 786 58;} + rel2 { relative: 1.0 1.0; to: "bg_clipper"; } + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part{ + name: "bookmarkmanager_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "bookmarkmanager_button";} + rel2 { relative: 1.0 1.0;to: "bookmarkmanager_button";} + color: 0 0 0 255; + text { + text: "Bookmark Manager"; + font: "Sans"; + size: 27; + align: 0.5 0.5; + } + } + } + part { + name: "bookmarkmanager_over"; + scale:1; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "bookmarkmanager_button";} + rel2 { relative: 1.0 1.0; to: "bookmarkmanager_button";} + color_class: transparent; + } + } + part { + name: "bookmarkmanager_click"; + scale:1; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "bookmarkmanager_over";} + rel2 { relative: 1.0 1.0; to: "bookmarkmanager_over";} + } + } + } + programs{ + program { + name: "mouse_click_bookmarkmanager"; + signal: "mouse,clicked,1"; + source: "bookmarkmanager_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_bookmarkmanager_click"; + signal: "mouse,in"; + source: "bookmarkmanager_*"; + action: STATE_SET "highlight" 0.0; + target: "bookmarkmanager_button"; + target: "bookmarkmanager_over"; + target: "bookmarkmanager_text"; + } + program { + name: "mouse_out_bookmarkmanager_click"; + signal: "mouse,out"; + source: "bookmarkmanager_*"; + action: STATE_SET "default" 0.0; + target: "bookmarkmanager_button"; + target: "bookmarkmanager_over"; + target: "bookmarkmanager_text"; + } + } + } +} diff --git a/services/BookmarksUI/edc/error.edc b/services/MainUI/edc/error.edc similarity index 100% rename from services/BookmarksUI/edc/error.edc rename to services/MainUI/edc/error.edc diff --git a/services/BookmarksUI/images/web_frame_selected.png b/services/MainUI/images/web_frame_selected.png similarity index 100% rename from services/BookmarksUI/images/web_frame_selected.png rename to services/MainUI/images/web_frame_selected.png diff --git a/services/BookmarksUI/images/ico_bg_round_shape_37x37.png b/services/MainUI/images/web_shadow.png similarity index 91% rename from services/BookmarksUI/images/ico_bg_round_shape_37x37.png rename to services/MainUI/images/web_shadow.png index 00182eda393bba8bd7548044060c54661dd2e1bd..f9018b0a6e15ae5670b67d580b890d1950636066 100644 GIT binary patch delta 422 zcmdnn%ebVAQL!_?&z+Y`ii?4Pf!EW+B?w3}0x=&48<2eGTo$uYv6zcdX!BGqGiDA$ z3o9TpGMRjt*ABsvRJMMx=ASpNxBv$#zx7e$%$#n zMk$l`@mVOF86+neC8g;an3$RCrWpg(S*9gh>LwXknx+}18k?jUnoO4DcOXh#4gUk8 z)G-R#BAo6fR6F^bkl5sK!8YPtjjVgKo6sI6M#IT0qUKD7CYx2;uunK%jSq7pMwJf%Ylun1AeWGKmAl{;sWEN2Lx>n%ElbzaVrq3-YA;A@z37Y adl@qre>2b^V%Uel6***Vz= zdi9JaJzX3_DsG*b;jiryC~>U*d&EQ!9UmQ4pS$N1o)~ZVz?oCasj9g#WXTl!c*h@H zS3Hs|HwqdnhZ*;ut$ro6v%IbPeDM3ESu;QXt9tkH&Uc%MDn_fsXKe0j^h~(0DzB6~ zhA}iq>`p*?nQH)<66^)i{4-Fvdu%7E2|X~z-q z*Q|_*wb%c$zrP|9@Rw=k_FE2;J3b0%voil&zU|T6S6kC99X_sNUd%Uxm*vF!wOyOH z*Ltk7khXUUdeczfd0>H>jDd{A6%Un_q6Z2mgq&tPdtgpg>4D&c0Drz6{5-GDF-~uE zjJ15AWU%71N09snffK8jF;0>Bz&3~F(Iw6g&z`T`bT^}W-twdcuM}4u2t24KD|LLi zWG&AQy^MU*2FV5AO5N5oo@U*-T$i`te;)Fy_sn(nNhohmcJD(olyCW`Ll!S t#7e$Mv0r>P>PF{_ABa?(z4RcNVL893?FdKd%4) diff --git a/services/PlatformInputManager/PlatformInputManager.cpp b/services/PlatformInputManager/PlatformInputManager.cpp index e7cc333..4fc5fbc 100644 --- a/services/PlatformInputManager/PlatformInputManager.cpp +++ b/services/PlatformInputManager/PlatformInputManager.cpp @@ -170,8 +170,9 @@ Eina_Bool PlatformInputManager::__filter(void *data, void */*loop_data*/, int ty self->rightPressed(); else if(!keyName.compare("KEY_ENTER")) self->enterPressed(); -// else if(!keyName.compare("BackSpace")) -// self->backPressed(); + // MERGE_ME dont know if should be commented out + else if(!keyName.compare("BackSpace")) + self->backPressed(); } else if(type == ECORE_EVENT_KEY_UP) { M_ASSERT(event); Ecore_Event_Key *ev = static_cast(event); diff --git a/services/SimpleUI/BookmarksManager.cpp b/services/SimpleUI/BookmarksManager.cpp new file mode 100644 index 0000000..8d82016 --- /dev/null +++ b/services/SimpleUI/BookmarksManager.cpp @@ -0,0 +1,411 @@ +/* + * Copyright (c) 2014 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. + */ + +#include "BookmarksManager.h" +#include +#include +#include +#include +#include +#include "BrowserLogger.h" + +namespace tizen_browser +{ +namespace base_ui +{ + +BookmarksManagerItem::BookmarksManagerItem() + : action(std::make_shared()) +{ + +} +BookmarksManagerItem::BookmarksManagerItem( std::shared_ptr action) + : action(action) +{ + +} + + +BookmarksManagerItem::BookmarksManagerItem(const BookmarksManagerItem& source) + : action(source.action) +{ + +} +BookmarksManagerItem::BookmarksManagerItem(const BookmarksManagerItem* source) + : action(source->action) +{ + +} + + +BookmarksManagerItem::~BookmarksManagerItem() +{ + //elm_genlist_item_class_free(m_itemClass);?? +} + +BookmarksManager::BookmarksManager(std::shared_ptr< Evas_Object > mainWindow, Evas_Object* parentButton) + : MenuButton(mainWindow, parentButton) + , m_popup (nullptr) + , m_isPopupShown (false) + , m_genlist(nullptr) + , m_itemClass(nullptr) + , m_internalPopup(nullptr) + , m_internalPopupVisible(false) + , m_pointerModeEnabled(true) +{ + std::string edjFilePath = EDJE_DIR; + edjFilePath.append("SimpleUI/BookmarksManager.edj"); + elm_theme_extension_add(0, edjFilePath.c_str()); + + m_genlist = elm_genlist_add(m_window.get()); + + evas_object_smart_callback_add(m_genlist, "item,focused", focusItem, nullptr); + evas_object_smart_callback_add(m_genlist, "item,unfocused", unFocusItem, nullptr); + + elm_object_style_set(m_genlist, "bookmarks_manager"); + elm_genlist_homogeneous_set(m_genlist, EINA_TRUE); + elm_genlist_multi_select_set(m_genlist, EINA_FALSE); + + elm_genlist_select_mode_set(m_genlist, ELM_OBJECT_SELECT_MODE_ALWAYS); + + m_itemClass = elm_genlist_item_class_new(); + m_itemClass->item_style = "bookmarks_manager_item"; + + m_itemClass->func.text_get = &gridTextGet; + m_itemClass->func.content_get = &gridOptionLabelGet; + m_itemClass->func.state_get = 0; + m_itemClass->func.del = 0; +} + +BookmarksManager::~BookmarksManager() +{ + +} + +Evas_Object* BookmarksManager::getContent() +{ + return m_genlist; +} + +tizen_browser::base_ui::MenuButton::ListSize BookmarksManager::calculateSize() +{ + ListSize result; + + result.width = 490; + result.height = 426; + + return result; +} + +Evas_Object* BookmarksManager::getFirstFocus() +{ + return m_genlist; +} + +void BookmarksManager::addAction(sharedAction action) +{ + std::shared_ptr bookmarks_managerItem = std::make_shared(action); + BROWSER_LOGD("[%s] %x: %s", __func__ , bookmarks_managerItem.get(), bookmarks_managerItem->action->getText().c_str() ); + Elm_Object_Item* elmItem= elm_genlist_item_append(m_genlist, //genlist + m_itemClass, //item Class + bookmarks_managerItem.get(), //item data + 0, //parent item + ELM_GENLIST_ITEM_NONE,//item type + itemClicked, + this + ); + m_bookmarks_managerItemsMap[elmItem] = bookmarks_managerItem; + BROWSER_LOGD("[%s:%d] \n\t %x:%s ", __PRETTY_FUNCTION__, __LINE__, elmItem, bookmarks_managerItem->action->getText().c_str()); + if(!bookmarks_managerItem->action->isEnabled()){ + elm_object_item_disabled_set(elmItem, EINA_TRUE); + } + if(bookmarks_managerItem->action->isCheckable()){ + elm_object_item_signal_emit(elmItem, + (bookmarks_managerItem->action->isChecked() ? "switch,on" : "switch,off") + , "BookmarksManagerModel"); + } else { + elm_object_item_signal_emit(elmItem, "switch,hide", "BookmarksManagerModel"); + } + action->enabledChanged.connect(boost::bind(&BookmarksManager::onEnabledChanged, this, action)); + m_actionButtonMap[action] = elmItem; +} + +void BookmarksManager::onEnabledChanged(sharedAction action) +{ + BROWSER_LOGD("[%s]", __func__); + refreshAction(action); +} + +void BookmarksManager::refreshAction(sharedAction action) +{ + BROWSER_LOGD("[%s]", __func__); + if(action->isEnabled()) + elm_object_item_disabled_set(m_actionButtonMap[action], EINA_FALSE); + else + elm_object_item_disabled_set(m_actionButtonMap[action], EINA_TRUE); +} + +char* BookmarksManager::gridTextGet(void* data, Evas_Object* /*obj*/, const char* part) +{ + BROWSER_LOGD("[%s]", __func__); + BookmarksManagerItem *bookmarks_managerItem =reinterpret_cast(data); + if(!strcmp(part, "optionName")){ + if(!bookmarks_managerItem->action->getText().empty()){ + return strdup(bookmarks_managerItem->action->getText().c_str()); + } + } + return strdup(""); +} + +Evas_Object* BookmarksManager::gridOptionLabelGet(void* data, Evas_Object* obj, const char* part) +{ + BookmarksManagerItem *bookmarks_managerItem =reinterpret_cast(data); + if(!strcmp(part, "optionValue")){ + if(bookmarks_managerItem->action->isEnabled() && bookmarks_managerItem->action->isCheckable()){ + Evas_Object *label = elm_label_add(obj); + elm_object_text_set(label, (bookmarks_managerItem->action->isChecked() ? "On" :"Off" )); + elm_object_style_set(label, "bookmarks_manager_label"); + return label; + } + } + return nullptr; + +} + +void BookmarksManager::itemClicked(void* data, Evas_Object* /*o*/, void* event_info) +{ + BROWSER_LOGD("[%s]", __func__); + + BookmarksManager* bookmarks_manager = reinterpret_cast(data); + Elm_Object_Item* elmItem = reinterpret_cast(event_info); + BROWSER_LOGD("[%s:%d] \n\t %x", __PRETTY_FUNCTION__, __LINE__, elmItem); + if(bookmarks_manager->m_bookmarks_managerItemsMap.count(elmItem)){ + std::shared_ptr bookmarks_managerItem(bookmarks_manager->m_bookmarks_managerItemsMap[elmItem]);// elm_object_item_data_get(elmItem) + if(bookmarks_managerItem->action->isEnabled()){ + if(bookmarks_managerItem->action->isCheckable()) { + bookmarks_manager->showInternalPopup(elmItem); + } else{ + bookmarks_managerItem->action->trigger(); + } + } + } +} + +void BookmarksManager::showPopup() +{ + BROWSER_LOGD("[%s:%d] this: %x ", __PRETTY_FUNCTION__, __LINE__, this); + + if (isPopupShown()){ + m_isPopupShown = false; + unbindFocus(); + evas_object_hide(m_popup); + return; + } + + if(!m_popup) { + m_popup = elm_popup_add(m_window.get()); + BROWSER_LOGD("[%s:%d] - new popup: %x ", __PRETTY_FUNCTION__, __LINE__, m_popup); + evas_object_smart_callback_add(m_popup, "block,clicked", block_clicked, this); + // elm_object_content_set(m_popup, getContent()); + elm_object_part_text_set(m_popup, "title,text", "Add to Bookmark"); + + Evas_Coord w,h,x,y; + evas_object_geometry_get(m_window.get(), &x, &y, &w, &h); + evas_object_geometry_set(m_popup,0,0,w,h); + + //elm_object_style_set(m_popup, "message_popup"); + } + //evas_object_resize(m_popup, 480, 800); + realShow(m_popup); +} + +void BookmarksManager::realShow(Evas_Object* popup) +{ + elm_object_focus_next_object_set(m_parentButton, getFirstFocus(), ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(getFirstFocus(), m_parentButton, ELM_FOCUS_UP); + + // ListSize listSize = calculateSize(); + // evas_object_size_hint_min_set(m_popup, listSize.width, listSize.height); + // evas_object_size_hint_max_set(m_popup, listSize.width, listSize.height); + elm_popup_item_append(popup,"Folde 1",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 2",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 3",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 4",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 5",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 6",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 7",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 8",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 8",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 10",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 11",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 12",nullptr,nullptr,this); + evas_object_show(popup); + m_isPopupShown=true; +} + +void BookmarksManager::unbindFocus() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_object_focus_next_object_set(m_parentButton, nullptr, ELM_FOCUS_DOWN); +} + +bool BookmarksManager::isPopupShown() +{ + return m_isPopupShown; +} + +void BookmarksManager::block_clicked(void *data, Evas_Object *obj, void *event_info) +{ + evas_object_hide(obj); +} + +void BookmarksManager::hidePopup() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + evas_object_hide(m_popup); + m_isPopupShown = false; +} + +void BookmarksManager::showInternalPopup(Elm_Object_Item* listItem) +{ + BROWSER_LOGD("[%s]", __func__); + m_internalPopupVisible = true; + m_trackedItem = listItem; + + if(!m_internalPopup){ + m_internalPopup = elm_ctxpopup_add(m_window.get()); + evas_object_smart_callback_add(m_internalPopup, "dismissed", BookmarksManager::dismissedCtxPopup, this); + } + Evas_Object * buttonBox = elm_box_add(m_internalPopup); + Evas_Object * radioOn = elm_radio_add(m_internalPopup); + Evas_Object * radioOff = elm_radio_add(m_internalPopup); + + + elm_object_text_set(radioOn, "On"); + elm_object_text_set(radioOff, "Off"); + + elm_object_style_set(radioOn, "bookmarks_manager_radio"); + elm_object_style_set(radioOff, "bookmarks_manager_radio"); + + elm_box_pack_end(buttonBox, radioOn); + elm_box_pack_end(buttonBox, radioOff); + + m_checkState = (m_bookmarks_managerItemsMap[m_trackedItem]->action->isChecked() ? CheckStateOn : CheckStateOff ); + + elm_radio_state_value_set(radioOn, CheckStateOn);//true + elm_radio_value_pointer_set(radioOn, reinterpret_cast(&m_checkState)); + + elm_radio_state_value_set(radioOff, CheckStateOff);//false + elm_radio_value_pointer_set(radioOff, reinterpret_cast(&m_checkState)); + + elm_radio_group_add(radioOff, radioOn); + + evas_object_smart_callback_add(radioOn, "changed", radioChanged, this); + evas_object_smart_callback_add(radioOff, "changed", radioChanged, this); + + evas_object_size_hint_weight_set(buttonBox, EVAS_HINT_EXPAND,EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(buttonBox, EVAS_HINT_FILL, EVAS_HINT_FILL); + + evas_object_show(buttonBox); + evas_object_show(radioOn); + evas_object_show(radioOff); + + + elm_object_content_set(m_internalPopup, buttonBox); + elm_ctxpopup_direction_priority_set(m_internalPopup, + ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_DOWN); + Evas_Coord w,h,x,y; + +#if PLATFORM(TIZEN) + evas_object_geometry_get(elm_object_item_track(m_trackedItem), &x, &y, &w, &h); + + BROWSER_LOGD("[%s:%d] \n\tx:%d; y:%d; w:%d; h:%d ", __PRETTY_FUNCTION__, __LINE__, + x, y, w, h); + evas_object_move(m_internalPopup, x + 354, y);//354 is proper value +#endif + + elm_object_style_set(m_internalPopup, "bookmarks_manager_button"); + evas_object_show(m_internalPopup); + if(!m_pointerModeEnabled) + elm_object_focus_set(radioOn, EINA_TRUE); + elm_object_item_signal_emit(m_trackedItem, "selected", "BookmarksManagerModel"); + elm_object_signal_emit(m_genlist, "show_popup", "BookmarksManagerModel"); +} + +void BookmarksManager::dismissedCtxPopup(void* data, Evas_Object* obj, void* /*event_info*/) +{ + BROWSER_LOGD("[%s]", __func__); + BookmarksManager* bookmarks_manager = static_cast(data); + evas_object_hide(obj); + bookmarks_manager->m_internalPopup = 0; + elm_object_signal_emit(bookmarks_manager->m_genlist, "hide_popup", "BookmarksManagerModel"); + elm_object_item_signal_emit(bookmarks_manager->m_trackedItem, "unselected", "BookmarksManagerModel"); + +#if PLATFORM(TIZEN) + elm_object_item_untrack(bookmarks_manager->m_trackedItem); +#endif + bookmarks_manager->m_internalPopupVisible = false; +} + +void BookmarksManager::radioChanged(void* data, Evas_Object* /*obj*/, void* /*event_info*/) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BookmarksManager *bookmarks_manager = static_cast(data); + std::shared_ptr bookmarks_managerItem(bookmarks_manager->m_bookmarks_managerItemsMap[bookmarks_manager->m_trackedItem]); + bookmarks_managerItem->action->toggle(); + elm_object_item_signal_emit(bookmarks_manager->m_trackedItem, + (bookmarks_managerItem->action->isChecked() ? "switch,on" : "switch,off") + , "BookmarksManagerModel"); + elm_genlist_item_update(bookmarks_manager->m_trackedItem); + elm_object_signal_emit(bookmarks_manager->m_internalPopup, "elm,state,hide", "elm"); +} + +void BookmarksManager::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,in", "option*"); +} + +void BookmarksManager::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,out", "option*"); +} + +void BookmarksManager::setPointerModeEnabled (bool enabled) +{ + m_pointerModeEnabled = enabled; +} + +bool BookmarksManager::canBeDismissed() +{ + BROWSER_LOGD("[%s]", __func__); + bool internalPopupVisible = m_internalPopup && m_internalPopupVisible; + if(internalPopupVisible) { + elm_ctxpopup_dismiss(m_internalPopup); + return false; + } + return true; +} + +}//namespace base_ui + +}//namespace tizen_browser diff --git a/services/SimpleUI/BookmarksManager.h b/services/SimpleUI/BookmarksManager.h new file mode 100644 index 0000000..b2dbde0 --- /dev/null +++ b/services/SimpleUI/BookmarksManager.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2014 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. + */ + +#ifndef BOOKSMARK_MANAGER_H +#define BOOKSMARK_MANAGER_H +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Action.h" +#include "MenuButton.h" + +namespace tizen_browser +{ +namespace base_ui +{ + +struct BookmarksManagerItem{ + std::shared_ptr action; + BookmarksManagerItem(); + BookmarksManagerItem(std::shared_ptr action); + BookmarksManagerItem(const BookmarksManagerItem& source); + BookmarksManagerItem(const BookmarksManagerItem* source); + ~BookmarksManagerItem(); +}; + + +class BookmarksManager: public MenuButton +{ +public: + BookmarksManager(std::shared_ptr< Evas_Object > mainWindow, Evas_Object* parentButton); + ~BookmarksManager(); + virtual Evas_Object *getContent(); + virtual ListSize calculateSize(); + virtual Evas_Object* getFirstFocus(); + void addAction(sharedAction action); + void onEnabledChanged(sharedAction action); + void refreshAction(sharedAction action); + void setPointerModeEnabled (bool enabled); + void showPopup(); + void hidePopup(); + bool isPopupShown(); + virtual bool canBeDismissed(); +private: + static char *gridTextGet(void *data, Evas_Object* obj, const char *part); + static Evas_Object *gridOptionLabelGet(void* data, Evas_Object* /*obj*/, const char* part); + static void itemClicked(void *data, Evas_Object *o, void *event_info); + static void block_clicked(void *data, Evas_Object *obj, void *event_info); + + void showInternalPopup(Elm_Object_Item* parent); + static void dismissedCtxPopup(void* data, Evas_Object* obj, void* event_info); + static void radioChanged(void *data, Evas_Object *obj, void *event_info); + +private: + Evas_Object *m_popup; + Evas_Object *m_genlist; + Evas_Object *m_internalPopup; + Elm_Object_Item *m_trackedItem; + Elm_Genlist_Item_Class *m_itemClass; + bool m_internalPopupVisible; + bool m_pointerModeEnabled; + std::map> m_bookmarks_managerItemsMap; + std::map m_actionButtonMap; + enum CheckState{ + CheckStateOn=1 + ,CheckStateOff=2 + }; + CheckState m_checkState; + void realShow(Evas_Object* popup); + void unbindFocus(); + bool m_isPopupShown; + + static void focusItem(void* data, Evas_Object* obj, void* event_info); + static void unFocusItem(void* data, Evas_Object* obj, void* event_info); +}; + +}//namespace base_ui + +}//namespace tizen_browser + +#endif // BOOKSMARK_MANAGER_H diff --git a/services/SimpleUI/CMakeLists.txt b/services/SimpleUI/CMakeLists.txt index 4053a76..bc3292c 100644 --- a/services/SimpleUI/CMakeLists.txt +++ b/services/SimpleUI/CMakeLists.txt @@ -8,6 +8,7 @@ set(SimpleUI_SRCS SimplePopup.cpp ZoomList.cpp TabList.cpp + BookmarksManager.cpp Settings.cpp SimpleScroller.cpp WebTitleBar.cpp @@ -22,6 +23,7 @@ set(SimpleUI_HEADERS SimplePopup.h ZoomList.h TabList.h + BookmarksManager.h Settings.h SimpleScroller.h HistoryList.h @@ -41,10 +43,18 @@ include_directories(${CMAKE_SOURCE_DIR}/services/SimpleURI) include_directories(${CMAKE_SOURCE_DIR}/services/WebEngineService) include_directories(${CMAKE_SOURCE_DIR}/services/WebEngineService/src) include_directories(${CMAKE_SOURCE_DIR}/services/StorageService) +#MERGE_ME +#include_directories(${CMAKE_SOURCE_DIR}/services/BookmarkManagerUI) include_directories(${CMAKE_SOURCE_DIR}/services/StorageService/Storage/include) include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) include_directories(${CMAKE_SOURCE_DIR}/services/HistoryService) -include_directories(${CMAKE_SOURCE_DIR}/services/BookmarksUI) +include_directories(${CMAKE_SOURCE_DIR}/services/MoreMenuUI) +#MERGE_ME +#include_directories(${CMAKE_SOURCE_DIR}/services/HistoryUI) +include_directories(${CMAKE_SOURCE_DIR}/services/MainUI) +#MERGE_ME +#include_directories(${CMAKE_SOURCE_DIR}/services/SettingsUI) +#include_directories(${CMAKE_SOURCE_DIR}/services/TabUI) include_directories(${CMAKE_SOURCE_DIR}/services/PlatformInputManager) include_directories(${CMAKE_SOURCE_DIR}/services/SessionStorage) @@ -57,13 +67,27 @@ add_library(${PROJECT_NAME} SHARED ${SimpleUI_SRCS}) add_dependencies(${PROJECT_NAME} SimpleURI) add_dependencies(${PROJECT_NAME} StorageService) add_dependencies(${PROJECT_NAME} HistoryService) -add_dependencies(${PROJECT_NAME} BookmarksUI) +#MERGE_ME +#add_dependencies(${PROJECT_NAME} MoreMenuUI) +#add_dependencies(${PROJECT_NAME} BookmarkManagerUI) +add_dependencies(${PROJECT_NAME} MainUI) +#MERGE_ME +#add_dependencies(${PROJECT_NAME} HistoryUI) +#add_dependencies(${PROJECT_NAME} SettingsUI) +#add_dependencies(${PROJECT_NAME} TabUI) add_dependencies(${PROJECT_NAME} PlatformInputManager) add_dependencies(${PROJECT_NAME} SessionStorage) target_link_libraries(${PROJECT_NAME} SimpleURI) target_link_libraries(${PROJECT_NAME} StorageService) target_link_libraries(${PROJECT_NAME} HistoryService) -target_link_libraries(${PROJECT_NAME} BookmarksUI) +#MERGE_ME +#target_link_libraries(${PROJECT_NAME} MoreMenuUI) +target_link_libraries(${PROJECT_NAME} MainUI) +#MERGE_ME +#target_link_libraries(${PROJECT_NAME} HistoryUI) +#target_link_libraries(${PROJECT_NAME} SettingsUI) +#target_link_libraries(${PROJECT_NAME} TabUI) +#target_link_libraries(${PROJECT_NAME} BookmarkManagerUI) target_link_libraries(${PROJECT_NAME} PlatformInputManager) target_link_libraries(${PROJECT_NAME} SessionStorage) target_link_libraries(${PROJECT_NAME} ${EFL_LDFLAGS}) @@ -86,6 +110,7 @@ set(edcFiles AuthenticationPopup.edc TabItem.edc ZoomItem.edc + BookmarksManager.edc Settings.edc ScrollerDefault.edc HistoryItem.edc diff --git a/services/SimpleUI/HistoryList.cpp b/services/SimpleUI/HistoryList.cpp index 60623a6..508ae8f 100644 --- a/services/SimpleUI/HistoryList.cpp +++ b/services/SimpleUI/HistoryList.cpp @@ -21,6 +21,12 @@ #include "EflTools.h" #include +#if MERGE_ME +#include +#include +#include +#include +#endif namespace tizen_browser { @@ -210,11 +216,13 @@ char* HistoryList::listItemTextGet(void* data, Evas_Object* /* obj */, const cha return strdup(id->h_item->getUrl().c_str()); } } +#if MERGE_ME else if(!strcmp(part, "page_time")) { std::string retstr = boost::posix_time::to_simple_string(id->h_item->getLastVisit().time_of_day()); return strdup(retstr.c_str()); } +#endif return strdup(""); } diff --git a/services/SimpleUI/SimplePopup.cpp b/services/SimpleUI/SimplePopup.cpp index 363e905..57e2898 100644 --- a/services/SimpleUI/SimplePopup.cpp +++ b/services/SimpleUI/SimplePopup.cpp @@ -23,10 +23,10 @@ namespace base_ui evas_object_del(popup); } - SimplePopup::SimplePopup() : content(NULL) { } + SimplePopup::SimplePopup() : content(nullptr) { } SimplePopup::SimplePopup(const std::string &title, const std::string &message) - : content(NULL) + : content(nullptr) , title(title) , message(message) { } @@ -43,12 +43,15 @@ namespace base_ui popup = elm_popup_add(mainUi->getMainWindow().get()); evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - if(content != NULL) + if(content != nullptr) elm_object_content_set(popup, content); else elm_object_text_set(popup, message.c_str()); elm_popup_content_text_wrap_type_set(popup, ELM_WRAP_WORD); +#if MERGE_ME + elm_popup_content_text_wrap_type_set(popup, ELM_WRAP_CHAR); +#endif elm_object_part_text_set(popup, "title,text", title.c_str()); int buttonsCounter = 1; diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index ef0d403..381088f 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -17,7 +17,6 @@ #include "browser_config.h" #if defined(USE_EWEBKIT) -//#include #include #endif @@ -40,11 +39,11 @@ #include "BrowserImage.h" #include "SimpleURI.h" #include "SimpleUI.h" -#include "../BookmarksUI/BookmarksUI.h" #include "BookmarkItem.h" #include "Tools/EflTools.h" #include "BrowserImage.h" #include "HistoryItem.h" +#include "BookmarkItem.h" #include "boost/date_time/gregorian/gregorian.hpp" #include "boost/date_time/posix_time/posix_time.hpp" #include "NetworkErrorHandler.h" @@ -58,24 +57,31 @@ EXPORT_SERVICE(SimpleUI, "org.tizen.browser.simpleui") const std::string HomePageURL = "about:home"; -SimpleUI::SimpleUI(/*Evas_Object *window*/) +SimpleUI::SimpleUI() : AbstractMainWindow() - , m_mainLayout(NULL) - , m_progressBar(NULL) - , m_popup(NULL) + , m_mainLayout(nullptr) + , m_progressBar(nullptr) + , m_popup(nullptr) +#if MERGE_ME , m_settings() + , m_moreMenuUI() + , m_tabUI() + , m_bookmarkManagerUI() +#endif + , m_mainUI() , m_initialised(false) + , m_isHomePageActive(false) , m_currentZoom(ZOOM_TYPE_100) , items_vector() , m_networkErrorPopup(0) , m_wvIMEStatus(false) { - elm_init(static_cast(NULL), static_cast(NULL)); + elm_init(0, nullptr); ewk_context_default_get(); Evas_Object *main_window = elm_win_util_standard_add("browserApp", "browserApp"); - if (main_window == NULL) + if (main_window == nullptr) BROWSER_LOGE("Failed to create main window"); -// m_zoomList = NULL; + setMainWindow(main_window); } @@ -97,16 +103,30 @@ std::string SimpleUI::edjePath(const std::string &file) return std::string(EDJE_DIR) + file; } -std::vector > SimpleUI::getBookmarks() +std::vector > SimpleUI::getBookmarks(int folder_id) +{ + return m_favoriteService->getBookmarks(folder_id); +} + +std::vector > SimpleUI::getHistory() { - return m_favoriteService->getBookmarks(); + return m_historyService->getMostVisitedHistoryItems(); } + +std::vector > SimpleUI::getBookmarkFolders() +{ + return m_favoriteService->getBookmarkFolders(); +} + + + int SimpleUI::exec(const std::string& _url) { BROWSER_LOGD("[%s] _url=%s, initialised=%d", __func__, _url.c_str(), m_initialised); std::string url = _url; Session::Session lastSession; + if(!m_initialised){ if (m_window.get()) { config::DefaultConfig config; @@ -115,10 +135,9 @@ int SimpleUI::exec(const std::string& _url) m_favoritesLimit = boost::any_cast (config.get("FAVORITES_LIMIT")); elm_win_alpha_set(m_window.get(), EINA_FALSE); - // creatin main window + // creating main window int width = 0; int height = 0; - //ecore_x_window_size_get(ecore_x_window_root_first_get(), &width, &height); ecore_wl_screen_size_get(&width, &height); evas_object_move(m_window.get(), 0, 0); evas_object_resize(m_window.get(), width, height); @@ -168,29 +187,23 @@ int SimpleUI::exec(const std::string& _url) // bookmarks UI BROWSER_LOGD("[%s:%d] service: bookmarksui ", __PRETTY_FUNCTION__, __LINE__); - m_bookmarksUI = - std::dynamic_pointer_cast - - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarksui")); - M_ASSERT(m_bookmarksUI); - m_bookmarksUI->init(m_mainLayout); // favorites service BROWSER_LOGD("[%s:%d] service: favoriteservice ", __PRETTY_FUNCTION__, __LINE__); std::string favoriteService(boost::any_cast < std::string > (config.get("favorite_service_name"))); - BROWSER_LOGD("favorite config"); + BROWSER_LOGD("favorite config"); m_favoriteService = std::dynamic_pointer_cast (tizen_browser::core::ServiceManager::getInstance().getService(favoriteService)); - BROWSER_LOGD("favorite create"); + BROWSER_LOGD("favorite create"); M_ASSERT(m_favoriteService); -// m_favoriteService->synchronizeBookmarks(); - BROWSER_LOGD("favorite before getBookmarks"); + m_favoriteService->synchronizeBookmarks(); + BROWSER_LOGD("favorite before getBookmarks"); m_favoriteService->getBookmarks(); - BROWSER_LOGD("favorite after getBookmarks"); + BROWSER_LOGD("favorite after getBookmarks"); - // history service + // history service BROWSER_LOGD("[%s:%d] service: historyservice ", __PRETTY_FUNCTION__, __LINE__); m_historyService = std::dynamic_pointer_cast @@ -211,22 +224,19 @@ int SimpleUI::exec(const std::string& _url) m_platformInputManager->backPressed.connect(boost::bind(&SimpleUI::onBackPressed, this)); createActions(); + // left buttons leftButtonBar = std::make_shared(m_mainLayout, "SimpleUI/LeftButtonBar.edj", "left_button_bar"); leftButtonBar->addAction(m_back, "prev_button"); leftButtonBar->addAction(m_forward, "next_button"); leftButtonBar->addAction(m_reload, "refresh_stop_button"); - leftButtonBar->addAction(m_bookmark, "bookmark_button"); //register action that will be used later by buttons leftButtonBar->registerEnabledChangedCallback(m_stopLoading, "refresh_stop_button"); - leftButtonBar->registerEnabledChangedCallback(m_unbookmark, "bookmark_button"); // right buttons rightButtonBar = std::make_shared(m_mainLayout, "SimpleUI/RightButtonBar.edj", "right_button_bar"); rightButtonBar->addAction(m_tab, "tab_button"); - rightButtonBar->addAction(m_history, "history_button"); - rightButtonBar->addAction(m_zoom_in, "zoom_in_button"); - rightButtonBar->addAction(m_showSettingsPopup, "setting_button"); + rightButtonBar->addAction(m_showMoreMenu, "setting_button"); m_progressBar = elm_progressbar_add(m_mainLayout); elm_object_style_set(m_progressBar,"play_buffer"); @@ -234,7 +244,6 @@ int SimpleUI::exec(const std::string& _url) webTitleBar = std::make_shared(m_mainLayout, "SimpleUI/WebTitleBar.edj", "web_title_bar"); elm_object_part_content_set(m_mainLayout, "web_title_bar", webTitleBar->getContent()); - // put components on layout elm_object_part_content_set(m_mainLayout, "uri_entry", m_simpleURI->getContent(m_mainLayout)); elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_left", leftButtonBar->getContent()); elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_right", rightButtonBar->getContent()); @@ -261,20 +270,15 @@ int SimpleUI::exec(const std::string& _url) m_favoriteService->bookmarkAdded.connect(boost::bind(&SimpleUI::onBookmarkAdded, this,_1)); m_favoriteService->bookmarkDeleted.connect(boost::bind(&SimpleUI::onBookmarkRemoved, this, _1)); - m_favoriteService->bookmarksDeleted.connect(boost::bind(&tizen_browser::base_ui::BookmarksUI::deleteAllItems, m_bookmarksUI.get())); - m_bookmarksUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this,_1)); - m_bookmarksUI->bookmarkDeleteClicked.connect(boost::bind(&SimpleUI::onBookmarkDeleteClicked, this,_1)); - - m_historyService->historyEmpty.connect(boost::bind(&SimpleUI::disableHistoryButton, this, _1)); + //m_historyService->historyEmpty.connect(boost::bind(&SimpleUI::disableHistoryButton, this, _1)); + m_historyService->historyAdded.connect(boost::bind(&SimpleUI::onHistoryAdded, this,_1)); + m_historyService->historyDeleted.connect(boost::bind(&SimpleUI::onHistoryRemoved, this,_1)); connectActions(); elm_layout_signal_callback_add(m_simpleURI->getContent(), "slide_websearch", "elm", SimpleUI::favicon_clicked, this); - // add bookmarks for main screen - m_bookmarksUI->addBookmarkItems(getBookmarks()); - // show main layout and window evas_object_show(m_mainLayout); evas_object_show(m_window.get()); @@ -296,29 +300,32 @@ int SimpleUI::exec(const std::string& _url) } m_initialised = true; + // only when first run + if (url.empty()) { + BROWSER_LOGD("[%s]: changing to homeUrl", __func__); + switchViewToHomePage(); +#if MERGE_ME // Not sure if this should be enabled + filterURL(HomePageURL); +#endif + if(lastSession.items().size() >= 1){ + for(auto iter=lastSession.items().begin(), + end=lastSession.items().end(); + iter != end; + iter++ + ){ + openNewTab(iter->second); + } + m_sessionService->getStorage()->deleteSession(lastSession); + } + } + else + openNewTab(url); } - // only when first run - if (url.empty()) { - BROWSER_LOGD("[%s]: changing to homeUrl", __func__); - switchViewToHomePage(); - filterURL(HomePageURL); - if(lastSession.items().size() >= 1){ - for(auto iter=lastSession.items().begin(), - end=lastSession.items().end(); - iter != end; - iter++ - ){ - openNewTab(iter->second); - } - m_sessionService->getStorage()->deleteSession(lastSession); - } - } - else - openNewTab(url); - BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str()); + saveFolder("Bookmark Bar",0,1); + m_simpleURI->setFocus(); return 0; @@ -326,9 +333,9 @@ int SimpleUI::exec(const std::string& _url) void SimpleUI::loadThemes() { - elm_theme_extension_add(NULL, edjePath("SimpleUI/ZoomItem.edj").c_str()); - elm_theme_extension_add(NULL, edjePath("SimpleUI/TabItem.edj").c_str()); - elm_theme_extension_add(NULL, edjePath("SimpleUI/ErrorMessage.edj").c_str()); + elm_theme_extension_add(nullptr, edjePath("SimpleUI/ZoomItem.edj").c_str()); + elm_theme_extension_add(nullptr, edjePath("SimpleUI/TabItem.edj").c_str()); + elm_theme_extension_add(nullptr, edjePath("SimpleUI/ErrorMessage.edj").c_str()); elm_theme_overlay_add(0, edjePath("SimpleUI/ScrollerDefault.edj").c_str()); elm_theme_overlay_add(0, edjePath("SimpleUI/Tooltip.edj").c_str()); @@ -337,6 +344,7 @@ void SimpleUI::loadThemes() void SimpleUI::createActions() { ///\todo Add MulitStateAction. and convert m_stopLoading and m_reload actons to it? + m_back = sharedAction(new Action("Back")); m_back->setToolTip("Previous"); m_back->setIcon("browser/toolbar_prev"); @@ -352,35 +360,14 @@ void SimpleUI::createActions() m_reload = sharedAction(new Action("Reload")); m_reload->setToolTip("Reload"); m_reload->setIcon("browser/toolbar_reload"); - - m_bookmark = sharedAction(new Action("Bookmark")); - m_bookmark->setToolTip("Add to favorite"); - m_bookmark->setIcon("browser/toolbar_bookmark"); - - m_unbookmark = sharedAction(new Action("Unbookmark")); - m_unbookmark->setToolTip("Unfavorite"); - m_unbookmark->setIcon("browser/toolbar_unbookmark"); - m_tab = sharedAction(new Action("Tabs")); m_tab->setToolTip("Tab page"); m_tab->setIcon("browser/toolbar_tab"); //m_tab->setCheckable(true); - m_history = sharedAction(new Action("History")); - m_history->setToolTip("History"); - m_history->setIcon("browser/toolbar_history"); - if(m_historyService->getHistoryItemsCount() == 0){ - m_history->setEnabled(false); - } - - m_zoom_in = sharedAction(new Action("Zoom in")); - m_zoom_in->setToolTip("Zoom in/out"); - m_zoom_in->setIcon("browser/toolbar_zoom_in"); - - - m_showSettingsPopup = sharedAction(new Action("Settings")); - m_showSettingsPopup->setToolTip("Settings"); - m_showSettingsPopup->setIcon("browser/toolbar_setting"); + m_showMoreMenu = sharedAction(new Action("Settings")); + m_showMoreMenu->setToolTip("Settings"); + m_showMoreMenu->setIcon("browser/toolbar_setting"); /* m_settingPointerMode = sharedAction(new Action("Pointer mode")); m_settingPointerMode->setToolTip("Switch to Pointer Mode"); @@ -388,13 +375,12 @@ void SimpleUI::createActions() m_settingPointerMode->setChecked(m_platformInputManager->getPointerModeEnabled()); m_settingPointerMode->setEnabled(true); */ -/* + m_settingPrivateBrowsing = sharedAction(new Action("Private browsing")); m_settingPrivateBrowsing->setToolTip("On exit from private mode all cookies, history, and stored data will be deleted"); m_settingPrivateBrowsing->setCheckable(true); m_settingPrivateBrowsing->setChecked(m_webEngine->isPrivateMode()); m_settingPrivateBrowsing->setEnabled(true); -*/ m_settingDeleteHistory = sharedAction(new Action("Delete history")); m_settingDeleteHistory->setToolTip("Delete History"); @@ -404,73 +390,101 @@ void SimpleUI::createActions() m_settingDeleteFavorite = sharedAction(new Action("Delete favorite site")); m_settingDeleteFavorite->setToolTip("Delete favorite site"); + + m_bookmarks_manager_Add_NewFolder = sharedAction(new Action("+ New Folder")); + m_bookmarks_manager_Add_NewFolder->setToolTip("Add a new Folder"); + + m_bookmarks_manager_BookmarkBar = sharedAction(new Action("Bookmark Bar")); + m_bookmarks_manager_BookmarkBar->setToolTip("show Bookmark bar"); + + m_bookmarks_manager_Folder3 = sharedAction(new Action("Folder 3")); + m_bookmarks_manager_Folder3->setToolTip("open Folder 3"); + + m_bookmarks_manager_Folder2 = sharedAction(new Action("Folder 2")); + m_bookmarks_manager_Folder2->setToolTip("open Folder 2"); + + m_bookmarks_manager_Folder1 = sharedAction(new Action("Folder 1")); + m_bookmarks_manager_Folder1->setToolTip("open Folder 1"); } void SimpleUI::connectActions() { //left bar m_back->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::back, m_webEngine.get())); - m_back->triggered.connect(boost::bind(&SimpleUI::switchViewToBrowser, this)); + m_back->triggered.connect(boost::bind(&SimpleUI::updateBrowserView, this)); m_forward->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::forward, m_webEngine.get())); m_stopLoading->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::stopLoading, m_webEngine.get())); m_reload->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::reload, m_webEngine.get())); - m_reload->triggered.connect(boost::bind(&SimpleUI::switchViewToBrowser, this)); - - m_bookmark->triggered.connect(boost::bind(&SimpleUI::addToBookmarks, this)); - m_unbookmark->triggered.connect(boost::bind(&SimpleUI::deleteBookmark, this)); + m_reload->triggered.connect(boost::bind(&SimpleUI::updateBrowserView, this)); //right bar - m_tab->triggered.connect(boost::bind(&SimpleUI::showTabMenu, this)); - m_zoom_in->triggered.connect(boost::bind(&SimpleUI::showZoomMenu, this)); - m_history->triggered.connect(boost::bind(&SimpleUI::showHistory, this)); - m_showSettingsPopup->triggered.connect(boost::bind(&SimpleUI::showSettingsMenu, this)); + m_tab->triggered.connect(boost::bind(&SimpleUI::showTabUI, this)); + m_showMoreMenu->triggered.connect(boost::bind(&SimpleUI::showMoreMenu, this)); -// m_settingPointerMode->toggled.connect(boost::bind(&tizen_browser::services::PlatformInputManager::setPointerModeEnabled, m_platformInputManager.get(), _1)); +// m_settingPointerMode->toggled.connect(boost::bind(&tizen_browser::services::PlatformInputManager::setPointerModeEnabled, m_platformInputManager.get(), _1)); +#if MERGE_ME + m_settingPrivateBrowsing->toggled.connect(boost::bind(&SimpleUI::settingsPrivateModeSwitch, this, _1)); +#endif + //m_settingDeleteHistory->triggered.connect(boost::bind(&SimpleUI::settingsDeleteHistory, this)); + //m_settingDeleteData->triggered.connect(boost::bind(&SimpleUI::settingsDeleteData, this));; + //m_settingDeleteFavorite->triggered.connect(boost::bind(&SimpleUI::settingsDeleteFavorite, this));; +#if MERGE_ME // m_settingPrivateBrowsing->toggled.connect(boost::bind(&SimpleUI::settingsPrivateModeSwitch, this, _1)); m_settingDeleteHistory->triggered.connect(boost::bind(&SimpleUI::settingsDeleteHistory, this)); m_settingDeleteData->triggered.connect(boost::bind(&SimpleUI::settingsDeleteData, this));; m_settingDeleteFavorite->triggered.connect(boost::bind(&SimpleUI::settingsDeleteFavorite, this));; +#endif } -void SimpleUI::updateBrowserView() +void SimpleUI::updateURIBarView() { + m_simpleURI->changeUri(m_webEngine->getURI()); + leftButtonBar->setActionForButton("refresh_stop_button", m_reload); + stopEnable(true); + reloadEnable(true); + hideProgressBar(); +} + +void SimpleUI::updateWebView() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); evas_object_hide(elm_object_part_content_get(m_mainLayout, "web_view")); elm_object_part_content_unset(m_mainLayout, "web_view"); elm_object_part_content_set(m_mainLayout, "web_view", m_webEngine->getLayout()); evas_object_show(m_webEngine->getLayout()); } +void SimpleUI::updateBrowserView() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(isHomePageActive()) + hideMainUI(); + + updateWebView(); + + updateURIBarView(); +} + void SimpleUI::switchToTab(const tizen_browser::basic_webengine::TabId& tabId) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if(m_webEngine->currentTabId() != tabId) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_webEngine->switchToTab(tabId); - switchViewToBrowser(); } -// if(!m_webEngine->isLoadError()){ -// BROWSER_LOGD("[%s:%d] swiching to web_view ", __PRETTY_FUNCTION__, __LINE__); -// updateBrowserView(); -// switchViewToBrowser(); -// } else { -// BROWSER_LOGD("[%s:%d] LOAD ERROR!", __PRETTY_FUNCTION__, __LINE__); -// loadError(); -// } - if(m_webEngine->isLoadError()){ BROWSER_LOGD("[%s:%d] LOAD ERROR!", __PRETTY_FUNCTION__, __LINE__); loadError(); - } else { - BROWSER_LOGD("[%s:%d] swiching to web_view ", __PRETTY_FUNCTION__, __LINE__); - updateBrowserView(); - switchViewToBrowser(); + return; } + BROWSER_LOGD("[%s:%d] swiching to web_view ", __PRETTY_FUNCTION__, __LINE__); + updateBrowserView(); } bool SimpleUI::isHomePageActive() { - BROWSER_LOGD("[%s]:%d", __func__, elm_object_part_content_get(m_mainLayout,"web_view") == m_bookmarksUI->getContent()); - return elm_object_part_content_get(m_mainLayout,"web_view") == m_bookmarksUI->getContent(); + BROWSER_LOGD("[%s:%d] isHomePageActive : %d", __PRETTY_FUNCTION__, __LINE__, m_isHomePageActive); + return m_isHomePageActive; } bool SimpleUI::isErrorPageActive() @@ -479,9 +493,9 @@ bool SimpleUI::isErrorPageActive() return elm_object_part_content_get(m_mainLayout, "web_view") == m_errorLayout; } - void SimpleUI::switchViewToHomePage() { +#if MERGE_ME // remove if(!isHomePageActive()){ evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view")); elm_object_part_content_unset(m_mainLayout, "web_view"); @@ -489,45 +503,32 @@ void SimpleUI::switchViewToHomePage() evas_object_show(m_bookmarksUI->getContent()); //m_simpleURI->changeUri(HomePageURL); filterURL(HomePageURL); + } +#endif + BROWSER_LOGD("[%s:%d] isHomePageActive : %d", __PRETTY_FUNCTION__, __LINE__, m_isHomePageActive); + if(isHomePageActive()) + return; - } + showMainUI(); + filterURL(HomePageURL); m_webEngine->disconnectCurrentWebViewSignals(); - - leftButtonBar->setActionForButton("bookmark_button", m_bookmark); leftButtonBar->setActionForButton("refresh_stop_button", m_reload); - zoomEnable(false); - addBookmarkEnable(false); - removeBookmarkEnable(false); stopEnable(false); reloadEnable(false); forwardEnable(false); backEnable(false); + evas_object_hide(leftButtonBar->getContent()); + elm_object_signal_emit(m_mainLayout, "shiftback_uri", "ui"); + elm_object_signal_emit(m_simpleURI->getContent(), "shiftback_uribg", "ui"); webTitleBar->hide(); hideProgressBar(); } -void SimpleUI::switchViewToBrowser() -{ - if (isHomePageActive() || isErrorPageActive()) { - updateBrowserView(); - } - - m_simpleURI->changeUri(m_webEngine->getURI()); - leftButtonBar->setActionForButton("refresh_stop_button", m_reload); - zoomEnable(true); - removeBookmarkEnable(true); - stopEnable(true); - reloadEnable(true); - bookmarkCheck(); - - hideProgressBar(); -} - void SimpleUI::checkTabId(const tizen_browser::basic_webengine::TabId& id){ BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); if(m_webEngine->currentTabId() != id || isErrorPageActive()){ @@ -542,13 +543,14 @@ void SimpleUI::openNewTab(const std::string &uri) } void SimpleUI::closeTab(){ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); auto tabId = m_webEngine->currentTabId(); closeTab(tabId); } void SimpleUI::closeTab(const tizen_browser::basic_webengine::TabId& id) { - + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); m_currentSession.removeItem(id.toString()); m_webEngine->closeTab(id); updateView(); @@ -561,22 +563,63 @@ void SimpleUI::bookmarkCheck() if(m_favoriteService->bookmarkExists(m_webEngine->getURI())){ BROWSER_LOGD("[%s] There is bookmark for this site [%s], set indicator on!", __func__, m_webEngine->getURI().c_str()); - leftButtonBar->setActionForButton("bookmark_button", m_unbookmark); + // MERGE_ME + //leftButtonBar->setActionForButton("bookmark_button", m_unbookmark); } else{ BROWSER_LOGD("[%s] There is no bookmark for this site [%s], set indicator off", __func__, m_webEngine->getURI().c_str()); - leftButtonBar->setActionForButton("bookmark_button", m_bookmark); - addBookmarkEnable(m_favoriteService->countBookmarksAndSubFolders() < m_favoritesLimit); + // MERGE_ME + //leftButtonBar->setActionForButton("bookmark_button", m_bookmark); + //addBookmarkEnable(m_favoriteService->countBookmarksAndSubFolders() < m_favoritesLimit); } } void SimpleUI::onBookmarkAdded(std::shared_ptr bookmarkItem) { - m_bookmarksUI->addBookmarkItem(bookmarkItem); +#if 0 BROWSER_LOGI("Bookmark added with address %s",bookmarkItem->getAddress().c_str()); bookmarkCheck(); webTitleBar->removeFavIcon(); webTitleBar->show("Added to favorites"); +#endif +} + +void SimpleUI::onHistoryAdded(std::shared_ptr historyItem) +{ +#if 0 + m_mainUI->addHistoryItem(historyItem); + BROWSER_LOGI("Bookmark added with address %s",historyItem->getUrl().c_str()); +#endif +} + +void SimpleUI::onHistoryClicked(std::shared_ptr historyItem) +{ + std::string historyAddress = historyItem->getUrl(); + openNewTab(historyAddress); +} + +void SimpleUI::onMostVisitedClicked(const std::string&) +{ + BROWSER_LOGD("[%s]", __func__); + m_mainUI->clearHistoryGenlist(); + m_mainUI->clearBookmarkGengrid(); + m_mainUI->addHistoryItems(getHistory()); + m_mainUI->showHistoryGenlist(); +} + +void SimpleUI::onBookmarkButtonClicked(const std::string&) +{ + BROWSER_LOGD("[%s]", __func__); + m_mainUI->clearBookmarkGengrid(); + m_mainUI->clearHistoryGenlist(); + m_mainUI->addBookmarkItems(getBookmarks()); + m_mainUI->showBookmarkGengrid(); +} + +void SimpleUI::onBookmarkManagerButtonClicked(const std::string&) +{ + BROWSER_LOGD("[%s]", __func__); + showBookmarkManagerMenu(); } void SimpleUI::onBookmarkClicked(std::shared_ptr bookmarkItem) @@ -593,12 +636,18 @@ void SimpleUI::onBookmarkDeleteClicked(std::shared_ptrremoveBookmarkItem(uri.c_str()); bookmarkCheck(); - webTitleBar->removeFavIcon(); webTitleBar->show("Removed from favorites"); +#endif +} + +void SimpleUI::onHistoryRemoved(const std::string& uri) +{ + BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str()); + //m_mainUI->removeHistoryItem(uri.c_str()); } void SimpleUI::onReturnPressed(MenuButton *m) @@ -610,7 +659,7 @@ void SimpleUI::onReturnPressed(MenuButton *m) m->hidePopup(); } -void SimpleUI::setwvIMEStatus(bool status) +void SimpleUI::setwvIMEStatus(bool status) { BROWSER_LOGD("[%s]", __func__); m_wvIMEStatus = status; @@ -619,7 +668,7 @@ void SimpleUI::setwvIMEStatus(bool status) void SimpleUI::onBackPressed() { BROWSER_LOGD("[%s]", __func__); - if (!m_simpleURI->hasFocus() && !m_wvIMEStatus) + if (!m_simpleURI->hasFocus() && !m_wvIMEStatus && !isHomePageActive() && m_back->isEnabled()) m_webEngine->backButtonClicked(); } @@ -645,38 +694,42 @@ void SimpleUI::stopEnable(bool enable) void SimpleUI::addBookmarkEnable(bool enable) { - m_bookmark->setEnabled(enable); + //MERGE_ME + //m_bookmark->setEnabled(enable); } void SimpleUI::removeBookmarkEnable(bool enable) { - m_unbookmark->setEnabled(enable); + //MERGE_ME + //m_unbookmark->setEnabled(enable); } void SimpleUI::zoomEnable(bool enable) { m_zoom_in->setEnabled(enable); } - void SimpleUI::settingsButtonEnable(bool enable) { - m_showSettingsPopup->setEnabled(enable); + m_showMoreMenu->setEnabled(enable); } - void SimpleUI::loadStarted() { BROWSER_LOGD("Switching \"reload\" to \"stopLoading\"."); showProgressBar(); + elm_object_signal_emit(m_simpleURI->getContent(), "shiftright_uribg", "ui"); + elm_object_signal_emit(m_mainLayout, "shiftright_uri", "ui"); + evas_object_show(leftButtonBar->getContent()); leftButtonBar->setActionForButton("refresh_stop_button", m_stopLoading); addBookmarkEnable(false); - zoomEnable(false); if(!m_webEngine->isPrivateMode()){ m_currentSession.updateItem(m_webEngine->currentTabId().toString(), m_webEngine->getURI()); } - //if(!m_platformInputManager->getPointerModeEnabled()) - // elm_object_focus_set(leftButtonBar->getButton("refresh_stop_button"), EINA_TRUE); +#if 0 + if(!m_platformInputManager->getPointerModeEnabled()) + elm_object_focus_set(leftButtonBar->getButton("refresh_stop_button"), EINA_TRUE); +#endif } void SimpleUI::progressChanged(double progress) @@ -697,8 +750,6 @@ void SimpleUI::loadFinished() addBookmarkEnable(m_favoriteService->countBookmarksAndSubFolders() < m_favoritesLimit); - zoomEnable(true); - if(m_simpleURI->getCurrentIconTyep() != SimpleURI::IconTypeFav){ m_simpleURI->setFavIcon(m_webEngine->getFavicon()); webTitleBar->setFavIcon(m_webEngine->getFavicon()); @@ -711,39 +762,26 @@ void SimpleUI::loadFinished() m_historyService->addHistoryItem(std::make_shared (m_webEngine->getURI(), m_webEngine->getTitle(), m_webEngine->getFavicon())); - m_history->setEnabled(true); } -/* +#if 0 if(!m_platformInputManager->getPointerModeEnabled()) elm_object_focus_set(leftButtonBar->getButton("refresh_stop_button"), EINA_TRUE); -*/ +#endif } void SimpleUI::loadError() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -// if(!isHomePageActive()){ -// evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view")); -// elm_object_part_content_unset(m_mainLayout, "web_view"); -// elm_object_part_content_set(m_mainLayout, "web_view", m_bookmarksUI->getContent()); -// evas_object_show(m_bookmarksUI->getContent()); -// //m_simpleURI->changeUri(HomePageURL); -// m_bookmarksUI->showErrorMsg(); -// //filterURL(HomePageURL); -// } - setErrorButtons(); - evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view")); - elm_object_part_content_unset(m_mainLayout, "web_view"); + hideWebView(); elm_object_part_content_set(m_mainLayout, "web_view",m_errorLayout); //evas_object_show(m_errorLayout); } void SimpleUI::setErrorButtons() { - leftButtonBar->setActionForButton("bookmark_button", m_bookmark); +// leftButtonBar->setActionForButton("bookmark_button", m_bookmark); leftButtonBar->setActionForButton("refresh_stop_button", m_reload); - zoomEnable(false); - addBookmarkEnable(false); +// addBookmarkEnable(false); stopEnable(false); reloadEnable(true); forwardEnable(false); @@ -773,7 +811,7 @@ void SimpleUI::filterURL(const std::string& url) m_webEngine->setURI(url); } m_simpleURI->clearFocus(); - addBookmarkEnable(false); + //addBookmarkEnable(false); } void SimpleUI::webEngineURLChanged(const std::string& url) @@ -827,34 +865,62 @@ void SimpleUI::zoomLevelChanged(int zoom_level) m_webEngine->setZoomFactor(zoom_level); m_currentZoom = static_cast (zoom_level); } -void SimpleUI::showTabMenu() -{ - if( !m_tabList ){ - BROWSER_LOGD("[%s:%d] - make_shared ", __PRETTY_FUNCTION__, __LINE__); - m_tabList = std::make_shared(m_window, - rightButtonBar->getButton("tab_button")); - m_tabList->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked,this)); - m_tabList->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this, _1)); - m_tabList->tabDelete.connect(boost::bind(&SimpleUI::closeTab, this, _1)); - m_platformInputManager->rightPressed.connect(boost::bind(&TabList::rightPressed, m_tabList.get())); - m_platformInputManager->leftPressed.connect(boost::bind(&TabList::leftPressed, m_tabList.get())); - m_platformInputManager->enterPressed.connect(boost::bind(&TabList::enterPressed, m_tabList.get())); +void SimpleUI::AddBookmarkPopup(std::string& str) +{ + BROWSER_LOGD("[%s]", __func__); + if(!m_bookmarks_manager){ + m_bookmarks_manager = std::make_shared(m_window, + rightButtonBar->getButton("bookmark_button")); + m_bookmarks_manager->addAction( m_bookmarks_manager_Add_NewFolder); + m_bookmarks_manager->addAction( m_bookmarks_manager_BookmarkBar); + m_bookmarks_manager->addAction( m_bookmarks_manager_Folder1); + m_bookmarks_manager->addAction( m_bookmarks_manager_Folder2); + m_bookmarks_manager->addAction( m_bookmarks_manager_Folder3); } m_platformInputManager->returnPressed.disconnect_all_slots(); - m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_tabList.get())); - hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_tabList.get())); - m_tabList->addItems(m_webEngine->getTabContents()); - m_tabList->setCurrentTabId(m_webEngine->currentTabId()); - m_tabList->disableNewTabBtn(m_tabList->getItemcCount() >= m_tabLimit); - m_tabList->showPopup(); + m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_bookmarks_manager.get())); + hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_bookmarks_manager.get())); + m_bookmarks_manager->showPopup(); } -void SimpleUI::newTabClicked() +void SimpleUI::AddNewFolderPopup(std::string& str) +{ + BROWSER_LOGD("[%s]", __func__); +} + +void SimpleUI::showTabUI() +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_tabUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.tabui")); + M_ASSERT(m_tabUI); + m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::closeTabUI, this,_1)); + m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this,_1)); + m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1)); + m_tabUI->newIncognitoTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this,_1)); + m_tabUI->show(m_window.get()); + m_tabUI->addTabItems(m_webEngine->getTabContents()); +#endif +} + +void SimpleUI::closeTabUI(const std::string& str) +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_tabUI = nullptr; +#endif +} + +void SimpleUI::newTabClicked(const std::string& str) { BROWSER_LOGD("%s", __func__); switchViewToHomePage(); } + void SimpleUI::tabClicked(const tizen_browser::basic_webengine::TabId& tabId) { BROWSER_LOGD("%s", __func__); @@ -939,52 +1005,196 @@ void SimpleUI::authPopupButtonClicked(PopupButtons button, std::shared_ptrgetContent(m_mainLayout)); + evas_object_hide(rightButtonBar->getContent()); + evas_object_hide(leftButtonBar->getContent()); + elm_object_part_content_unset(m_mainLayout, "uri_entry"); + elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_left"); + elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_right"); +} + +void SimpleUI::showURIBar() +{ + elm_object_part_content_unset(m_mainLayout, "uri_entry"); + elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_left"); + elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_right"); + elm_object_part_content_set(m_mainLayout, "uri_entry", m_simpleURI->getContent(m_mainLayout)); + elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_left", leftButtonBar->getContent()); + elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_right", rightButtonBar->getContent()); + evas_object_show(m_simpleURI->getContent(m_mainLayout)); + evas_object_show(leftButtonBar->getContent()); + evas_object_show(rightButtonBar->getContent()); + m_simpleURI->setFocus(); +} +#endif + +void SimpleUI::hideWebView() +{ + evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view")); + elm_object_part_content_unset(m_mainLayout, "web_view"); +} + +void SimpleUI::hideMainUI() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(m_mainUI) + m_mainUI->hide(); + m_mainUI = nullptr; + m_isHomePageActive = false; +} + +void SimpleUI::showMainUI() { - if(!m_settings){ - m_settings = std::make_shared(m_window, - rightButtonBar->getButton("setting_button")); - //m_settings->addAction( m_settingPointerMode); - //m_settings->addAction( m_settingPrivateBrowsing); - m_settings->addAction( m_settingDeleteHistory); - m_settings->addAction( m_settingDeleteData); - m_settings->addAction( m_settingDeleteFavorite); - //m_settingPointerMode->toggled.connect(boost::bind(&tizen_browser::base_ui::Settings::setPointerModeEnabled, m_settings.get(), _1)); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_mainUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.mainui")); + M_ASSERT(m_mainUI); + hideWebView(); + m_mainUI->show(m_window.get()); + m_mainUI->addHistoryItems(getHistory()); + + m_historyService->historyAllDeleted.connect(boost::bind(&tizen_browser::base_ui::MainUI::clearHistoryGenlist, m_mainUI.get())); + m_mainUI->historyClicked.connect(boost::bind(&SimpleUI::onHistoryClicked, this,_1)); + m_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this,_1)); + m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this,_1)); + m_mainUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this,_1)); + m_isHomePageActive = true; +} + +void SimpleUI::showHistoryUI(const std::string& str) +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_historyUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyui")); + M_ASSERT(m_historyUI); + m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this,_1)); + m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onHistoryClicked, this,_1)); + m_historyUI->addHistoryItems(getHistory()); + m_historyUI->show(m_window.get()); +#endif +} + +void SimpleUI::closeHistoryUI(const std::string& str) +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_historyUI = nullptr; +#endif +} + +void SimpleUI::showSettingsUI(const std::string& str) +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!m_settingsUI){ + m_settingsUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.settingsui")); + M_ASSERT(m_settingsUI); + m_settingsUI->closeSettingsUIClicked.disconnect_all_slots(); + m_settingsUI->closeSettingsUIClicked.connect(boost::bind(&SimpleUI::closeSettingsUI, this,_1)); + m_settingsUI->deleteSelectedDataClicked.disconnect_all_slots(); + m_settingsUI->deleteSelectedDataClicked.connect(boost::bind(&SimpleUI::settingsDeleteSelectedData, this,_1)); + m_settingsUI->resetMostVisitedClicked.disconnect_all_slots(); + m_settingsUI->resetMostVisitedClicked.connect(boost::bind(&SimpleUI::settingsResetMostVisited, this,_1)); + m_settingsUI->resetBrowserClicked.disconnect_all_slots(); + m_settingsUI->resetBrowserClicked.connect(boost::bind(&SimpleUI::settingsResetBrowser, this,_1)); + m_settingsUI->show(m_window.get()); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); } - m_platformInputManager->returnPressed.disconnect_all_slots(); - m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_settings.get())); - hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_settings.get())); - m_settingDeleteHistory->setEnabled(m_historyService->getHistoryItemsCount()); - m_settingDeleteFavorite->setEnabled(m_favoriteService->countBookmarksAndSubFolders()); - m_settings->showPopup(); +#endif +} + +void SimpleUI::closeSettingsUI(const std::string& str) +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_settingsUI.reset(); +#endif +} +void SimpleUI::showMoreMenu() +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + bool current_tab_as_new_tab = isHomePageActive() || (m_historyService->getHistoryItemsCount() == 0); + if(!m_moreMenuUI){ + m_moreMenuUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui")); + M_ASSERT(m_moreMenuUI); + m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this,_1)); + m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this,_1)); + m_moreMenuUI->closeMoreMenuClicked.disconnect_all_slots(); + m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this,_1)); + m_moreMenuUI->AddBookmarkInput.disconnect_all_slots(); + m_moreMenuUI->AddBookmarkInput.connect(boost::bind(&SimpleUI::addToBookmarks, this,_1)); + m_moreMenuUI->BookmarkFolderCreated.disconnect_all_slots(); + m_moreMenuUI->BookmarkFolderCreated.connect(boost::bind(&SimpleUI::NewFolder, this,_1,_2,_3)); + m_moreMenuUI->show(m_window.get()); + m_moreMenuUI->getBookmarkFolderList(getBookmarkFolders()); + m_moreMenuUI->showCurrentTab(current_tab_as_new_tab ? nullptr : m_historyService->getHistoryItems().front()); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + } +#endif } -void SimpleUI::showHistory() +void SimpleUI::closeMoreMenu(const std::string& str) { - if(!m_historyList) { - m_historyList = std::make_shared(m_window, rightButtonBar->getButton("history_button")); - m_historyList->clickedHistoryItem.connect(boost::bind(&SimpleUI::openLinkFromPopup, this,_1)); - m_historyList->deleteHistoryItem.connect(boost::bind(&tizen_browser::services::HistoryService::clearURLHistory, m_historyService.get(),_1)); - m_historyList->deleteHistoryItem.connect(boost::bind(&SimpleUI::hideHistory, this)); +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_moreMenuUI.reset() ; +#endif +} - m_platformInputManager->rightPressed.connect(boost::bind(&HistoryList::rightPressed, m_historyList.get())); - m_platformInputManager->leftPressed.connect(boost::bind(&HistoryList::leftPressed, m_historyList.get())); - m_platformInputManager->enterPressed.connect(boost::bind(&HistoryList::enterPressed, m_historyList.get())); +void SimpleUI::showBookmarkManagerMenu() +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!m_bookmarkManagerUI){ + m_bookmarkManagerUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkmanagerui")); + M_ASSERT(m_bookmarkManagerUI); + m_bookmarkManagerUI->closeBookmarkManagerClicked.disconnect_all_slots(); + m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::closeBookmarkManagerMenu, this,_1)); + m_bookmarkManagerUI->saveFolderClicked.disconnect_all_slots(); + m_bookmarkManagerUI->saveFolderClicked.connect(boost::bind(&SimpleUI::saveFolder, this,_1,_2,_3)); + m_bookmarkManagerUI->bookmarkFolderClicked.disconnect_all_slots(); + m_bookmarkManagerUI->bookmarkFolderClicked.connect(boost::bind(&SimpleUI::updateBookmakMangaerGenGrid, this,_1)); + m_bookmarkManagerUI->show(m_window.get()); + m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders()); + m_bookmarkManagerUI->showTopContent(); } - m_platformInputManager->returnPressed.disconnect_all_slots(); - m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_historyList.get())); - hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_historyList.get())); - m_historyList->addItems(m_historyService->getHistoryItems()); - m_historyList->showPopup(); +#endif } -void SimpleUI::disableHistoryButton(bool flag) +void SimpleUI::updateBookmakMangaerGenGrid(int folder_id) { - BROWSER_LOGD("[%s:%d] flag:%d ", __PRETTY_FUNCTION__, __LINE__, flag); - m_history->setEnabled(!flag); - m_settingDeleteHistory->setEnabled(m_historyService->getHistoryItemsCount()); - hidePopup(); +#if MERGE_ME + m_bookmarkManagerUI->updateGengrid(); + m_bookmarkManagerUI->addBookmarkItems(getBookmarks(folder_id)); + m_bookmarkManagerUI->showTopContent(); +#endif +} + +void SimpleUI::closeBookmarkManagerMenu(std::string& str) +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_bookmarkManagerUI.reset(); +#endif } void SimpleUI::openLinkFromPopup(const std::string &uri) @@ -1010,75 +1220,80 @@ void SimpleUI::settingsPrivateModeSwitch(bool newState) BROWSER_LOGD("[%s:%d] webEngine private mode: %s", __PRETTY_FUNCTION__, __LINE__, (m_webEngine->isPrivateMode() ? "true" : "false")); } -void SimpleUI::settingsDeleteHistory() +void SimpleUI::settingsDeleteSelectedData(const std::string& str) { BROWSER_LOGD("[%s]: Deleting Hisory", __func__); SimplePopup *popup = SimplePopup::createPopup(); - popup->setTitle("Delete history"); + popup->setTitle("Delete selected data"); popup->addButton(OK); popup->addButton(CANCEL); - popup->setMessage("Are you sure you want to clear all browsing history?"); - popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteHistoryButton, this, _1, _2)); + popup->setMessage("Are you sure you want to delete all selected data?"); + std::shared_ptr popupData = std::make_shared(); + popupData->text = str; + popup->setData(popupData); + popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteSelectedDataButton, this, _1, _2)); popup->show(); } -void SimpleUI::settingsDeleteData() +void SimpleUI::onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr< PopupData > popupData) { - BROWSER_LOGD("[%s]", __func__); - SimplePopup *popup = SimplePopup::createPopup(); - popup->setTitle("Delete data"); - popup->addButton(OK); - popup->addButton(CANCEL); - popup->setMessage("Are you sure you want to clear all cookies and cache?"); - popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteDataButton, this, _1, _2)); - popup->show(); - + if(button == OK){ + BROWSER_LOGD("[%s]: OK", __func__); + std::string dataText = std::static_pointer_cast(popupData)->text; + BROWSER_LOGD("[%s]: TYPE : %s", __func__, dataText.c_str()); + if (dataText.find("CACHE") != std::string::npos) + m_webEngine->clearPrivateData(); + if (dataText.find("COOKIES") != std::string::npos) + m_webEngine->clearPrivateData(); + if (dataText.find("HISTORY") != std::string::npos) + m_historyService->clearAllHistory(); + //webTitleBar->removeFavIcon(); + //webTitleBar->show("History deleted"); + } } -void SimpleUI::settingsDeleteFavorite() +void SimpleUI::settingsResetMostVisited(const std::string& str) { - BROWSER_LOGD("[%s]", __func__); + BROWSER_LOGD("[%s]: Deleting Hisory", __func__); SimplePopup *popup = SimplePopup::createPopup(); - popup->setTitle("Delete favorite site"); + popup->setTitle("Delete most visited"); popup->addButton(OK); popup->addButton(CANCEL); - popup->setMessage("Are you sure you want to clear all favorite site?"); - popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteFavoriteButton, this, _1, _2)); + popup->setMessage("Are you sure you want to delete most visited sites?"); + popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteMostVisitedButton, this, _1, _2)); popup->show(); } -void SimpleUI::onDeleteHistoryButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) +void SimpleUI::onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) { if(button == OK){ BROWSER_LOGD("[%s]: OK", __func__); - m_historyService->clearAllHistory(); - m_history->setEnabled(false); + BROWSER_LOGD("[%s]: Deleting most visited", __func__); + /*m_historyService->clearAllHistory(); webTitleBar->removeFavIcon(); - webTitleBar->show("All histories are deleted"); - hidePopup(); + webTitleBar->show("History deleted");*/ } } -void SimpleUI::onDeleteDataButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) +void SimpleUI::settingsResetBrowser(const std::string& str) { - if(button == OK){ - BROWSER_LOGD("[%s]: OK", __func__); - m_webEngine->clearPrivateData(); - webTitleBar->removeFavIcon(); - webTitleBar->show("All cookies and cache are deleted"); - hidePopup(); - } + BROWSER_LOGD("[%s]: Deleting Hisory", __func__); + SimplePopup *popup = SimplePopup::createPopup(); + popup->setTitle("Reset browser"); + popup->addButton(OK); + popup->addButton(CANCEL); + popup->setMessage("Are you sure you want to reset browser?"); + popup->buttonClicked.connect(boost::bind(&SimpleUI::onResetBrowserButton, this, _1, _2)); + popup->show(); } -void SimpleUI::onDeleteFavoriteButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) +void SimpleUI::onResetBrowserButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) { if(button == OK){ BROWSER_LOGD("[%s]: OK", __func__); - m_favoriteService->deleteAllBookmarks(); - bookmarkCheck(); - webTitleBar->removeFavIcon(); - webTitleBar->show("Favorites deleted"); - hidePopup(); + BROWSER_LOGD("[%s]: Resetting browser", __func__); + /*webTitleBar->removeFavIcon(); + webTitleBar->show("History deleted");*/ } } @@ -1114,7 +1329,7 @@ void SimpleUI::updateView() { switchViewToHomePage(); elm_object_part_text_set(rightButtonBar->getContent(), "tabs_number", ""); } else { - if (isHomePageActive() != true) { + if (!isHomePageActive()) { updateBrowserView(); } elm_object_part_text_set(rightButtonBar->getContent(), "tabs_number", (boost::format("%1%") % tabs).str().c_str()); @@ -1167,8 +1382,6 @@ void SimpleUI::hideProgressBar() evas_object_hide(m_progressBar); } - - void SimpleUI::searchWebPage(std::string &text, int flags) { m_webEngine->searchOnWebsite(text, flags); @@ -1184,12 +1397,50 @@ void SimpleUI::favicon_clicked(void *data, Evas_Object */*obj*/, const char */*e } } -void SimpleUI::addToBookmarks(void) -{ +void SimpleUI::addToBookmarks(int folder_id) +{ BROWSER_LOGD("[%s,%d],", __func__, __LINE__); if (m_favoriteService) - m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(), + { if( m_webEngine && !m_webEngine->getURI().empty()) + { m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(), m_webEngine->getSnapshotData(373, 240), - m_webEngine->getFavicon()); + m_webEngine->getFavicon(),(unsigned int)folder_id); + } + } +} + +void SimpleUI::saveFolder(const char* title,int folder_id, int by_operator) +{ BROWSER_LOGD("[%s,%d],", __func__, __LINE__); + int id = -1; + if (m_favoriteService) + m_favoriteService->save_folder(title, &id, folder_id, by_operator); + if (id >= 0 ) + { BROWSER_LOGD("[%s], Added New Folder", __func__); + } +#if MERGE_ME + if(m_bookmarkManagerUI) + { m_bookmarkManagerUI->updateGengrid(); + m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders()); + } +#endif +} + + + +void SimpleUI::NewFolder(const char* title,int folder_id, int by_operator) +{ BROWSER_LOGD("[%s,%d],", __func__, __LINE__); + int id = -1; + if (m_favoriteService) + m_favoriteService->save_folder(title, &id, folder_id, by_operator); + if (id >= 0 ) + { BROWSER_LOGD("[%s], Added New Folder", __func__); + } + if (m_favoriteService) + { if( m_webEngine && !m_webEngine->getURI().empty()) + { m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(), + m_webEngine->getSnapshotData(373, 240), + m_webEngine->getFavicon(),(unsigned int)id); + } + } } void SimpleUI::deleteBookmark(void) diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index 5c5f736..d106d49 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -26,9 +26,6 @@ #include -//#include -//#include - #include "AbstractMainWindow.h" #include "AbstractService.h" #include "AbstractFavoriteService.h" @@ -37,9 +34,21 @@ // components #include "AbstractWebEngine.h" -#include "BookmarksUI.h" +#if MERGE_ME +#include "BookmarkManagerUI.h" +#include "MoreMenuUI.h" +#include "HistoryUI.h" +#include "SettingsUI.h" +#endif +#include "MainUI.h" +#if MERGE_ME +#include "TabUI.h" +#endif #include "ButtonBar.h" #include "HistoryService.h" +#if MERGE_ME +#include "BookmarkManagerUI.h" +#endif #include "SimpleURI.h" #include "SimpleScroller.h" #include "WebTitleBar.h" @@ -53,6 +62,7 @@ #include "WebConfirmation.h" #include "ZoomList.h" #include "TabList.h" +#include "BookmarksManager.h" #include "Settings.h" #include "HistoryList.h" #include "NetworkErrorHandler.h" @@ -68,8 +78,6 @@ void AbstractMainWindow::setMainWindow(Evas_Object * rawPtr) m_window = std::shared_ptr(rawPtr, evas_object_del); } - - class BROWSER_EXPORT SimpleUI : public AbstractMainWindow { public: @@ -106,24 +114,35 @@ private: bool isHomePageActive(); void switchViewToHomePage(); - void switchViewToBrowser(); void updateBrowserView(); + void updateWebView(); + void updateURIBarView(); void updateView(); void openNewTab(const std::string &uri); void switchToTab(const tizen_browser::basic_webengine::TabId& tabId); - void newTabClicked(); + void newTabClicked(const std::string &); void tabClicked(const tizen_browser::basic_webengine::TabId& tabId); void tabCreated(); void tabClosed(const tizen_browser::basic_webengine::TabId& id); void bookmarkCheck(); - std::vector > getBookmarks(); + std::vector > getBookmarks(int folder_id = 0); + std::vector > getBookmarkFolders(); + std::vector > getHistory(); void onBookmarkAdded(std::shared_ptr bookmarkItem); + void onBookmarkClicked(std::shared_ptr bookmarkItem); void onBookmarkDeleteClicked(std::shared_ptr bookmarkItem); void onBookmarkRemoved(const std::string& uri); + void onHistoryAdded(std::shared_ptr historyItem); + void onHistoryRemoved(const std::string& uri); + void onHistoryClicked(std::shared_ptr historyItem); + void onMostVisitedClicked(const std::string&); + void onBookmarkButtonClicked(const std::string&); + void onBookmarkManagerButtonClicked(const std::string&); + void handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation); void authPopupButtonClicked(PopupButtons button, std::shared_ptr popupData); @@ -133,8 +152,6 @@ private: void setwvIMEStatus(bool status); - - sharedAction m_back; sharedAction m_forward; sharedAction m_stopLoading; @@ -142,14 +159,22 @@ private: sharedAction m_bookmark; sharedAction m_unbookmark; sharedAction m_tab; - sharedAction m_history; + sharedAction m_share; sharedAction m_zoom_in; - sharedAction m_showSettingsPopup; + sharedAction m_showMoreMenu; + sharedAction m_showBookmarkManagerUI; sharedAction m_settingPointerMode; -// sharedAction m_settingPrivateBrowsing; + sharedAction m_settingPrivateBrowsing; sharedAction m_settingDeleteHistory; sharedAction m_settingDeleteData; sharedAction m_settingDeleteFavorite; + sharedAction m_mostvisited; + sharedAction m_bookmarksvisited; + sharedAction m_bookmarks_manager_Add_NewFolder; + sharedAction m_bookmarks_manager_BookmarkBar; + sharedAction m_bookmarks_manager_Folder1; + sharedAction m_bookmarks_manager_Folder2; + sharedAction m_bookmarks_manager_Folder3; /** * \brief filters URL before it is passed to WebEngine. @@ -173,13 +198,13 @@ private: * and this is a back function that checks if address emited from browser should be changed. */ void webEngineURLChanged(const std::string& url); - - /** + void onmostHistoryvisitedClicked(); + void onBookmarkvisitedClicked(); + /** * @brief Adds current page to bookmarks. * */ - void addToBookmarks(void); - + void addToBookmarks(int); /** * @brief Remove current page from bookmarks * @@ -197,31 +222,48 @@ private: void showHistory(); void hideHistory(); - - /** - * \brief shows Tab showTabMenu - */ - void showTabMenu(); - - void showSettingsMenu(); + void AddBookmarkPopup(std::string& str); + void AddNewFolderPopup(std::string& str); + + void saveFolder(const char* title, int folder_id, int by_user); + void NewFolder(const char* title, int folder_id, int by_user); + void showTabUI(); + void closeTabUI(const std::string& str); + void showMoreMenu(); + void closeMoreMenu(const std::string& str); + void showHistoryUI(const std::string& str); + void closeHistoryUI(const std::string& str); + void showMainUI(); + void hideMainUI(); + void showURIBar(); + void hideURIBar(); + void hideWebView(); void hideSettingsMenu(); + void showSettingsUI(const std::string&); + void closeSettingsUI(const std::string&); void showProgressBar(); void hideProgressBar(); + void closeBookmarkManagerMenu(std::string& str); + void updateBookmakMangaerGenGrid(int folder_id); + void showBookmarkManagerMenu(); void showPopup(Evas_Object *content, char* btn1_text, char* btn2_text); - void closeTab(); void closeTab(const tizen_browser::basic_webengine::TabId& id); void settingsPointerModeSwitch(bool newState); void settingsPrivateModeSwitch(bool newState); - void settingsDeleteHistory(); void settingsDeleteData(); void settingsDeleteFavorite(); - void onDeleteHistoryButton(PopupButtons button, std::shared_ptr popupData); + void settingsDeleteSelectedData(const std::string& str); + void settingsResetMostVisited(const std::string& str); + void settingsResetBrowser(const std::string& str); + void onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr popupData); + void onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr popupData); + void onResetBrowserButton(PopupButtons button, std::shared_ptr popupData); void onDeleteDataButton(PopupButtons button, std::shared_ptr popupData); void onDeleteFavoriteButton(PopupButtons button, std::shared_ptr popupData); void tabLimitPopupButtonClicked(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/); @@ -242,6 +284,7 @@ private: Evas_Object *m_mainLayout; Evas_Object *m_progressBar; Evas_Object *m_popup; + Evas_Object *m_entry; Evas_Object *m_errorLayout; CustomPopup *m_ownPopup; SimpleScroller *m_scroller; @@ -249,19 +292,32 @@ private: std::shared_ptr> m_webEngine; std::shared_ptr m_simpleURI; std::shared_ptr leftButtonBar; + std::shared_ptr webviewbar; + std::shared_ptr rightButtonBar; std::shared_ptr m_favoriteService; std::shared_ptr m_historyService; - std::shared_ptr m_bookmarksUI; +#if MERGE_ME + std::shared_ptr m_moreMenuUI; + std::shared_ptr m_bookmarkManagerUI; +#endif + std::shared_ptr m_mainUI; +#if MERGE_ME + std::shared_ptr m_historyUI; + std::shared_ptr m_settingsUI; + std::shared_ptr m_tabUI; +#endif std::shared_ptr m_zoomList; std::shared_ptr m_tabList; std::shared_ptr m_platformInputManager; std::shared_ptr m_sessionService; tizen_browser::Session::Session m_currentSession; + std::shared_ptr m_bookmarks_manager; std::shared_ptr m_settings; std::shared_ptr m_historyList; std::shared_ptr webTitleBar; bool m_initialised; + bool m_isHomePageActive; zoom_type m_currentZoom; int m_tabLimit; int m_favoritesLimit; diff --git a/services/SimpleUI/edc/BookmarksManager.edc b/services/SimpleUI/edc/BookmarksManager.edc new file mode 100644 index 0000000..0b6e9b9 --- /dev/null +++ b/services/SimpleUI/edc/BookmarksManager.edc @@ -0,0 +1,574 @@ +#define WIDTH 473 +#define HEIGHT 490 +#define DEBUG_RECT_OVER(over_part, r, g, b) \ + part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ + \ +scale:1; \ + type : RECT; \ + repeat_events: 1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + color: r g b 128; \ + rel1 { to: over_part; relative: 0 0; } \ + rel2 { to: over_part; relative: 1 1; } \ + } \ + } +data { item: "width" WIDTH; item: "height" HEIGHT; } +color_classes{ + color_class{ + name: "defaultFontColor"; + color: 211 211 211 255; + } + color_class{ + name: "disabledFontColor"; + color: 60 60 60 160; + } + color_class{ + name: "selectedItemFontColor"; + color: 255 255 255 255; + } + color_class{ + name: "transparent"; + color: 0 0 0 0; + } + color_class{ + name: "selectedBackground"; + color: 69 143 255 255; + } + color_class{ + name: "dimmColor"; + color: 0 0 0 128; + } + color_class{ + name: "on_offBackgroundColor"; + color: 255 255 255 255; + } +} +collections { + group{ name: "elm/genlist/base/bookmarks_manager"; + min: 473 426; + max: 473 426; + parts{ + part { name: "clipper"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part{ + name: "background"; + type: RECT; + description{ + state: "default" 0.0; + color: 18 22 34 255; + rel1{ + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part{ + name: "elm.swallow.content"; + type: SWALLOW; + clip_to: "clipper"; + mouse_events: 1; + description{ + state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + rel1{ + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part{ + name: "elm.swallow.empty"; + type: SWALLOW; + description{ + state: "default" 0.0; + fixed: 1 1; + rel1{ + relative: 0.5 0.5; + } + rel2{ + relative: 0.5 0.5; + } + } + } + part{ name: "dimmer"; + type: RECT; + description{ + state: "default" 0.0; + color: 0 0 0 128; + visible: 0; + } + description{ + state: "popup_show" 0.0; + inherit: "default"; + visible:1; + } + } + }//parts + programs{ + program{ + name: "show_popup"; + signal: "show_popup"; + source: "SettingsModel"; + action: STATE_SET "popup_show" 0.0; + target: "dimmer"; + } + program{ + name: "hide_popup"; + signal: "hide_popup"; + source: "SettingsModel"; + action: STATE_SET "default" 0.0; + target: "dimmer"; + } + } + }//group + group{ name: "elm/genlist/item/bookmarks_manager_item/default"; + alias: "elm/genlist/item_odd/bookmarks_manager_item/default"; + alias: "elm/genlist/item_compress/bookmarks_manager_item/default"; + alias: "elm/genlist/item_compress_odd/bookmarks_manager_item/default"; + min: 473 80; + max: 473 80; + data.item: "texts" "optionName"; + data.item: "contents" "optionValue"; + parts{ + part{ + name: "value_helper"; + mouse_events:0; + description{ + state: "default" 0.0; + color: 0 0 0 0; + } + description{ + state: "on" 0.0; + color: 0 0 0 0; + } + description{ + state: "off" 0.0; + color: 0 0 0 0; + } + } + part{ + name: "optionBackground"; + type: RECT; + mouse_events: 1; + description{ + state: "default" 0.0; + color_class: "transparent"; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative: 1.0 1.0; + } + } + description{ + state: "mouseOver" 0.0; + inherit: "default"; + color_class: "selectedBackground"; + } + description{ + state: "mouseOut" 0.0; + inherit: "default"; + } + description{ + state: "selected" 0.0; + inherit: "mouseOver"; + } + } + part{ name:"optionName"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0 0.5; + min: 298 80; + max: 298 80; + color_class: "defaultFontColor"; + rel1{ + relative: 0.0 0.0; + offset: 25 0; + } + rel2.relative: 1.0 1.0; + text{ + size: 30; + align: 0 0.5; + } + } + description{ + state: "mouseOut" 0.0; + inherit: "default"; + } + description{ + state: "mouseOver" 0.0; + inherit: "default" 0.0; + color_class: "selectedItemFontColor"; + } + description{ + state: "disabled" 0.0; + inherit: "default" 0.0; + color_class: "disabledFontColor"; + } + } + part{ name: "optionValue"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0 0.5; + fixed: 1 1; + min: 100 40; + max: 100 40; + visible: 1; + rel1{ + relative: 1.0 0.0; + to: "optionName"; + offset: 25 0; + } + rel2{ + relative: 1.0 1.0; + } + } + } + programs{ + program{ name: "mouse_in"; + signal: "mouse,in"; + source: "option*"; + script{ + new cur_state_helper[31]; + new Float:index; + get_state(PART:"optionName", cur_state_helper, 30, index); + if(!strcmp(cur_state_helper,"default")){ + set_state(PART:"optionBackground", "mouseOver", 0.0); + } + } + } + program{ name: "mouse_out"; + signal: "mouse,out"; + source: "option*"; + script{ + new st[31]; + new Float:vl + get_state(PART:"optionBackground", st, 30, vl); + if(strcmp(st,"selected")){ + set_state(PART:"optionBackground", "mouseOut", 0.0); + } + } + } + program{ signal: "selected"; + source: "SettingsModel"; + action: STATE_SET "selected" 0.0; + target: "optionBackground"; + } + program{ signal: "unselected"; + source: "SettingsModel"; + action: STATE_SET "mouseOut" 0.0; + target: "optionBackground"; + } + program{ name: "go_disabled"; + signal: "elm,state,disabled"; source: "elm"; + action: STATE_SET "disabled" 0.0; + target: "optionName"; + } + program{ name: "go_enabled"; + signal: "elm,state,enabled"; source: "elm"; + action: STATE_SET "default" 0.0; + target: "optionName"; + } + program{ name: "go_Off"; + signal: "switch,off"; + source: "SettingsModel"; + action: STATE_SET "off" 0.0; + target: "value_helper"; + } + program{ name: "go_On"; + signal: "switch,on"; + source: "SettingsModel"; + action: STATE_SET "on" 0.0; + target: "value_helper"; + } + program{ name: "go_switch_hide"; + signal: "switch,hide"; + source: "SettingsModel"; + action: STATE_SET "default" 0.0; + target: "value_helper"; + } + }//programs + }//parts + }//group + group{ name: "elm/ctxpopup/bg/bookmarks_manager_button"; + parts { + part{ + name: "base_bg"; + type: RECT; + mouse_events: 1; + description{ + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs{ + program { + signal: "mouse,clicked,*"; + source: "base_bg"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + } + }//group: "elm/ctxpopup/bg/bookmarks_manager_button"; + group{ name: "elm/ctxpopup/base/bookmarks_manager_button"; + max: 0 0; + parts{ + part{ + name: "base"; + scale: 1; + type: RECT; + description{ + state: "default" 0.0; + min: 185 164; + max: 185 164; + //color: 0 0 0 0; + color_class: "transparent"; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + color_class: "on_offBackgroundColor"; + visible: 1; + } + } + part{ + name: "elm.swallow.content"; + scale: 1; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + to:"base"; + relative: 0 0; + } + rel2{ + to:"base"; + relative:1 1; + } + } + } + } + programs { + program { + signal: "elm,state,show"; source: "elm"; + action: STATE_SET "visible" 0.0; + transition: LINEAR 0.2; + target: "base"; + } + program { + signal: "elm,state,hide"; source: "elm"; + action: STATE_SET "default" 0.0; + transition: LINEAR 0.3; + target: "base"; + after: "hide2"; + } + program { name: "hide2"; + action: SIGNAL_EMIT "elm,action,hide,finished" ""; + } + } + }//group "elm/ctxpopup/base/bookmarks_manager_button"; + group{ name: "elm/radio/base/bookmarks_manager_radio"; + images.image: "check_foc.png" COMP; + images.image: "check_nor.png" COMP; + parts{ + part{name: "item_bg"; type: RECT; mouse_events:0; + scale: 1; + description{ + state: "default" 0.0; + color_class: "transparent"; + min: 185 82; + max: 185 82; + } + description{ + state: "mouse_over" 0.0; + inherit: "default"; + color_class: "selectedBackground"; + } + } + part{name: "left_spacer"; type: SPACER; + scale: 1; + description{ + state: "default" 0.0; + min: 20 82; + max: 20 82; + align: 0 0; + rel1{ + relative:0 0; + to: item_bg; + } + } + } + part{name: "elm.text"; type: TEXT; mouse_events: 0; + scale: 1; + description{ + state: "default" 0.0; + color_class: "defaultFontColor"; + align: 0 0.5; + rel1{ + relative: 1 0; + to: "left_spacer"; + } + rel2{ + relative: 0 1; + to_x: "indicator"; + to_y: "right_spacer"; + } + text{ + size: 30; + align: 0 0.5; + } + } + description{ + state: "mouse_over" 0.0; + inherit: "default"; + color_class: "selectedItemFontColor"; + } + } + part { name: "indicator"; mouse_events: 0; + scale: 1; + type: IMAGE; + description { state: "default" 0.0; + align: 1 0.5; + rel2{ + relative: 0 1; + to: "right_spacer"; + } + min: 38 38; + max: 38 38; + visible: 0; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + image.normal: "check_foc.png"; + } + description{ + state: "selected_mouse_over" 0.0; + inherit: "selected"; + image.normal: "check_nor.png"; + } + } + part{ name: "right_spacer"; type: SPACER; + scale: 1; + description{ + state: "default" 0.0; + min: 20 82; + max: 20 82; + align: 1 1; + rel2{ + relative:1 1; + to: item_bg; + } + } + } + part{ name: "event"; type: RECT; + description{ + state: "default" 0.0; + color: 0 0 0 0; + } + } + }//parts + script { + public mouse_in() { + new st[31]; + new Float:vl + get_state(PART:"indicator", st, 30, vl) + if(!strcmp(st,"selected")) + set_state(PART:"indicator", "selected_mouse_over", 0.0); + set_state(PART:"item_bg", "mouse_over", 0.0); + set_state(PART:"elm.text", "mouse_over", 0.0); + } + public mouse_out() { + new st[31]; + new Float:vl + get_state(PART:"indicator", st, 30, vl) + if(!strcmp(st,"selected_mouse_over")) + set_state(PART:"indicator", "selected", 0.0); + set_state(PART:"item_bg", "default", 0.0); + set_state(PART:"elm.text", "default", 0.0); + } + } + programs{ + program{ + signal: "mouse,clicked,1"; source: "event"; + action: SIGNAL_EMIT "elm,action,radio,toggle" ""; + } + program{ + signal: "mouse,in"; source: "event"; + script{ + mouse_in(); + } + } + program{ + signal: "mouse,out"; source: "event"; + script{ + mouse_out(); + } + } + program{ + signal: "elm,action,focus"; source: "elm"; + script{ + mouse_in(); + } + } + program{ + signal: "elm,action,unfocus"; source: "elm"; + script{ + mouse_out(); + } + } + program{ + signal: "elm,state,radio,on"; source: "elm"; + action: STATE_SET "selected" 0.0; + target: "indicator"; + } + program{ + signal: "elm,state,radio,off"; source: "elm"; + action: STATE_SET "default" 0.0; + target: "indicator"; + } + } + }//group "elm/radio/base/bookmarks_manager_radio"; + + group { name: "elm/label/base/bookmarks_manager_label"; + styles { + style { name: "label_style"; + base: "font="FNBD" font_size=30 text_class=tb_plain align=center color=#d3d3d3ff"; + tag: "br" "\n"; + tag: "hilight" "+ font="FNBD" color=#d3d3d3ff text_class=tb_plain"; + tag: "b" "+ font="FNBD" color=#d3d3d3ff text_class=tb_light"; + } + } + parts { + part { name: "elm.text"; type: TEXTBLOCK; + scale: 1; + description { state: "default" 0.0; + text { style: "label_style"; + min: 1 1; + } + } + } + } + } +}//collections diff --git a/services/SimpleUI/edc/LeftButtonBar.edc b/services/SimpleUI/edc/LeftButtonBar.edc index 7491c3d..5de8ab2 100644 --- a/services/SimpleUI/edc/LeftButtonBar.edc +++ b/services/SimpleUI/edc/LeftButtonBar.edc @@ -3,17 +3,13 @@ collections { -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_prev", 70, 70, "web_ico_prev.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_prev", 82, 102, "btn_bar_back_nor.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_next", 70, 70, "web_ico_next.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_next", 82, 102, "btn_bar_forward_nor.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_reload", 70, 70, "web_ico_reload.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_reload", 82, 102, "btn_bar_reload_nor.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_stop", 70, 70, "web_ico_stop.png") - -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_bookmark", 70, 70, "web_ico_favorite_on.png") - -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_unbookmark", 70, 70, "web_ico_favorite_off.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_stop", 82, 102, "btn_bar_stop_nor.png") group { name: "left_button_bar"; @@ -99,33 +95,6 @@ FOUR_STATE_IMAGE_BUTTON("browser/toolbar_unbookmark", 70, 70, "web_ico_favorite_ } } - ADD_SPACER("spacer_3", "refresh_stop_button", 10, 70) - - part { name: "bookmark_button"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 1; - align: 0.0 0.0; - fixed: 1 1; - min: 70 70; - max: 70 70; - rel1 { relative: 1.0 0.0; to: spacer_3; } - rel2 { relative: 0.0 0.0; } - } - description { - state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - } } } diff --git a/services/SimpleUI/edc/MainLayout.edc b/services/SimpleUI/edc/MainLayout.edc index 3e70303..aedfdbd 100644 --- a/services/SimpleUI/edc/MainLayout.edc +++ b/services/SimpleUI/edc/MainLayout.edc @@ -1,3 +1,6 @@ +#define URI_LENGTH 1720 +#define URI_LENGTH_SHORT 1460 +#define URI_WIDTH 82 #include "Spacer.edc" #define DEBUG_RECT_OVER(over_part, r, g, b) \ part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ @@ -8,7 +11,7 @@ scale:1; \ description { \ state: "default" 0.0; \ visible: 1; \ - color: r g b 128; \ + color: r g b 255; \ rel1 { to: over_part; relative: 0 0; } \ rel2 { to: over_part; relative: 1 1; } \ } \ @@ -27,14 +30,14 @@ collections { visible: 1; fixed: 1 1; align: 0 0; - min: 0 130; - max: 99999 130; - color: 18 22 34 230; + min: 1920 104; + max: 1920 104; + color: 255 255 255 255; rel1 { relative: 0.0 0.0; } rel2 { relative: 1.0 0.0; } } } - ADD_SPACER_OVER("left_spacer", "uri_bar_bg", 74, 130) + ADD_SPACER_OVER("left_spacer", "uri_bar_bg", 7, 104) part { name: "uri_bar_buttons_left"; type : SWALLOW; scale: 1; @@ -42,8 +45,8 @@ collections { state: "default" 0.0; visible: 1; align: 0 0.5; - min: 310 70; - max: 310 70; + min: 246 102; + max: 246 102; fixed: 1 1; rel1 { relative: 1.0 1.0; to: "left_spacer"; } rel2 { relative: 0.0 0.0; to: "left_spacer"; } @@ -59,7 +62,7 @@ collections { visible: 1; } } - ADD_SPACER("left_buttons_spacer", "uri_bar_buttons_left", 39, 70) + ADD_SPACER("left_buttons_spacer", "uri_bar_buttons_left", 0.5, 102) part { name: "uri_entry"; type : SWALLOW; scale: 1; @@ -67,9 +70,18 @@ collections { state: "default" 0.0; visible: 1; align: 0.0 0.5; - min: 994 70; - max: 994 70; + min: URI_LENGTH URI_WIDTH; + max: URI_LENGTH URI_WIDTH; fixed: 1 1; + rel1 { relative: 1.0 0.5; to: "left_spacer"; } + rel2 { relative: 1.0 0.5; to: "left_spacer"; } + } + description { + state: "moveright" 0.0; + inherit: "default" 0.0; + visible: 1; + min: URI_LENGTH_SHORT URI_WIDTH; + max: URI_LENGTH_SHORT URI_WIDTH; rel1 { relative: 1.0 0.5; to: "left_buttons_spacer"; } rel2 { relative: 1.0 0.5; to: "left_buttons_spacer"; } } @@ -84,7 +96,7 @@ collections { visible: 1; } } - ADD_SPACER("right_buttons_spacer", "uri_entry", 39, 70) + ADD_SPACER("right_buttons_spacer", "uri_entry", 26, 102) part { name: "uri_bar_buttons_right"; type : SWALLOW; scale: 1; @@ -92,8 +104,8 @@ collections { state: "default" 0.0; visible: 1; align: 0.0 0.5; - min: 390 70; - max: 390 70; + min: 164 102; + max: 164 102; fixed: 1 1; rel1 { relative: 1.0 0.5; to: "right_buttons_spacer"; } rel2 { relative: 1.0 0.5; to: "right_buttons_spacer"; } @@ -109,7 +121,7 @@ collections { visible: 1; } } - ADD_SPACER("right_spacer", "uri_bar_buttons_right", 74, 70) + ADD_SPACER("right_spacer", "uri_bar_buttons_right", 74, 102) part { name: "web_view"; type : SWALLOW; scale: 1; @@ -156,8 +168,8 @@ collections { visible: 1; align: 0.0 0.0; fixed: 0 0; - min: 1936 8; - max: 1936 8; + min: 1920 2; + max: 1920 2; rel1 { relative: 0.0 0.0; offset: -12 -10; @@ -198,14 +210,16 @@ collections { } } + part {name: "popup_bg"; type: RECT; scale: 1; + mouse_events: 1; description {state: "default" 0.0; visible: 0; min: 1920 1080; fixed: 1 1; - color: 100 100 100 0; + color: 100 100 100 128; rel1 {relative: 0.0 0.0; } rel2 {relative: 1.0 1.0; } } @@ -219,7 +233,7 @@ collections { description { state: "default" 0.0; visible: 0; min: 0 0; - max: 1920 1080; + max: 700 800; align: 0.5 0.5; rel1 { relative: 0.0 0.0; to: "web_view";} rel2 { relative: 1.0 1.0; to: "web_view";} @@ -232,7 +246,20 @@ collections { } } } +} programs { + program { name: "shiftright_uribar"; + signal: "shiftright_uri"; + source: "ui"; + action: STATE_SET "moveright" 0.0; + target: "uri_entry"; + } + program { name: "shiftback_uribar"; + signal: "shiftback_uri"; + source: "ui"; + action: STATE_SET "default" 0.0; + target: "uri_entry"; + } program { name: "hide_progress"; signal: "hide_progressbar_bg"; source: "ui"; @@ -261,3 +288,4 @@ collections { } } } +} diff --git a/services/SimpleUI/edc/RightButtonBar.edc b/services/SimpleUI/edc/RightButtonBar.edc index 0c5aed8..164289e 100644 --- a/services/SimpleUI/edc/RightButtonBar.edc +++ b/services/SimpleUI/edc/RightButtonBar.edc @@ -1,11 +1,8 @@ #include "ImageButton.edc" #include "Spacer.edc" collections { -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_tab", 70, 70, "web_ico_tab.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_history", 70, 70, "web_ico_history.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_zoom_in", 70, 70, "web_ico_zoom_in.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_rss", 70, 70, "web_ico_rss.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 70, 70, "web_ico_setting.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_tab", 82, 102, "btn_bar_manager_nor.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 82, 102, "btn_bar_more_nor.png") group { name: "right_button_bar"; parts { @@ -44,9 +41,9 @@ FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 70, 70, "web_ico_setting.png" align: 0.0 0.0; min: 70 70; max: 70 70; - color: 255 255 255 153; - rel1 { relative: 0.0 0.0; to: "tab_button"; offset: -3 4;} - rel2 { relative: 1.0 1.0; to: "tab_button";} + color: 86 86 86 255; + rel1 { relative: 0.0 0.0; to: "tab_button"; offset: 5 13; } + rel2 { relative: 1.0 1.0; to: "tab_button"; } text { text: ""; font: "Tizen:style=Bold"; @@ -56,81 +53,6 @@ FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 70, 70, "web_ico_setting.png" } } ADD_SPACER("spacer_1", "tab_button", 10, 70) - part { name: "history_button"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 1; - fixed: 1 1; - align: 0.0 0.0; - min: 70 70; - max: 70 70; - rel1 { relative: 1.0 0.0; to: "spacer_1"; } - rel2 { relative: 0.0 0.0; } - } - description { - state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - ADD_SPACER("spacer_2", "history_button", 10, 70) - part { name: "zoom_in_button"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 1; - fixed: 1 1; - align: 0.0 0.0; - min: 70 70; - max: 70 70; - rel1 { relative: 1.0 0.0; to: "spacer_2"; } - rel2 { relative: 0.0 0.0; } - } - description { - state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - ADD_SPACER("spacer_3", "zoom_in_button", 10, 70) - part { name: "rss_button"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 1; - fixed: 1 1; - align: 0.0 0.0; - min: 70 70; - max: 70 70; - rel1 { relative: 1.0 0.0; to: "spacer_3"; } - rel2 { relative: 0.0 0.0; } - } - description { - state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - ADD_SPACER("spacer_4", "rss_button", 10, 70) part { name: "setting_button"; type : SWALLOW; scale: 1; @@ -142,7 +64,7 @@ FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 70, 70, "web_ico_setting.png" min: 70 70; max: 70 70; fixed: 1 1; - rel1 { relative: 1.0 0.0; to: "spacer_4"; } + rel1 { relative: 1.0 0.0; to: "spacer_1"; } rel2 { relative: 0.0 0.0; } } description { @@ -158,4 +80,4 @@ FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 70, 70, "web_ico_setting.png" } } } -} \ No newline at end of file +} diff --git a/services/SimpleUI/edc/webview.edc b/services/SimpleUI/edc/webview.edc new file mode 100644 index 0000000..0602899 --- /dev/null +++ b/services/SimpleUI/edc/webview.edc @@ -0,0 +1,91 @@ +#include "ImageButton.edc" +#include "Spacer.edc" +collections { + +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_history", 70, 70, "web_ico_history.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_bookmark", 70, 70, "web_ico_favorite_on.png") + + group { + name: "web_view_bar"; + parts { + part { name: "most_visited_button"; + type :RECT; + scale: 1; + description { + + state: "default" 0.0; + visible: 1; + fixed :1 1; + align: 0.5 0.5; + min: 70 70; + max: 70 70; + + + + rel1 { + + relative: 1.0 1.0; + + offset: 150 150; + + } + + rel2 { + + relative: 0.9 0.8; + + offset: 150 150; + + } +} + +} + + + +part { name: "visited_bookmarks"; + type :RECT; + scale: 1; + description { + + state: "default" 0.0; + visible: 1; + + align: 0.5 0.5; + min: 70 70; + max: 70 70; + + fixed :1 1; + + + rel1 { + + relative: 1.0 1.0; + + offset: 150 150; + + } + + rel2 { + + relative: 0.9 0.8; + + offset: 150 150; + + } +} + +} + + + + + + + + + + + } + } + } diff --git a/services/SimpleUI/images/Black_dot.png b/services/SimpleUI/images/Black_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..21d05e5b6a2b305668c052336bda723fa82dfe10 GIT binary patch literal 1232 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 JwGh{+{{eEhJkS6D literal 0 HcmV?d00001 diff --git a/services/SimpleUI/images/btn_bar_forward_nor.png b/services/SimpleUI/images/btn_bar_forward_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..ef0b78d5b0239fe2c2ff1e13815c5b8c6597ad6f GIT binary patch literal 3385 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 literal 0 HcmV?d00001 diff --git a/services/SimpleUI/images/btn_bar_manager_nor.png b/services/SimpleUI/images/btn_bar_manager_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..3a96d3c89e124ecfbc178c4fd8d4bef81a0011af GIT binary patch literal 2988 zcmZuzXHXMr7X1*UH<6C;LNC&*bVw+n3j`Acr4tYlP?RPZdh=04x zkQ$0~0fCibP)e5fXJ>b2f829s?mhR+ocrr0Ubi%6qUWUt05F-r4Q$T&pYo)oK1Wnf zH{_h?{NeTw0ARTMPf>up7u*2QTY1A^*ROl|1^PYk^7Dt7z+e#n`+lC@cRc_Ip26Cp z5w;tg+NAjds96H$xtX602Q9<~nv7vj7n2gCV>L|>ESl!9Zo6b?NX6G%m_V75f_che zEzOujKSi@5_$np(bwX1A@nYC(pNVGD+R$13q|SQPKDKU{rj?d43$A3Xf?+I&3S9aY z-P756Utu&tiMerB{EoimKZFQq!*f9n zio$dNx$Kc(0K7Co)$olZLx7S8?4D+w>R?I+$eSQN;ow~ZXeF>R)B;*YAa9)zD+#E= zfOD^~a4?9;1?)z9NUfh&YgpH%&M%c)tA!U)H;ijAJB7%_4t zEmy~j(WJ)sp1l&?q4K)TQ23CP>{-jAR}Ts|W{~^-|J=r~C=EY7y}Gh8W!edKaOp>e zpP}2GT9K!Be@AGYkPg3nS`vv=ycKCob@Z)$@W8zI%J4I~7}wdgRO6Ed2J#92m{6yQ zD;_1qzHH4FkYbScbYHPpC=vQhvP*Q7?7p-heN3sdpaS0A(V+-SmnpmDM)}K3oD~(= zx zf=vJo%FoSn!Np`>t9 zk2%u&=`&3;#WMM%u-CV2`E1eU znq~17=rTWq?wbhv(?n|f4)YEx*cumO)d+O3G=L8(R2(+YImnhBNk4Tzl-<4dFk32ez_jvPixq%4n0`0OQuWqVoW-IMCWD7G%S?Hng{lZEm{laYeqC73O)ec- zJ^8MoIH-c;vdg9OOXvQ}Wu0X$wRy#Pd#6FQ)`s4O0jmzb0;kvo*b`y0J2{j*0!lHW z6lluCNc~8M3&%&Hj|D%c=xPu>e$`HI>pv~T>vQO*MpZ|xwp9yy_5Mh!79_3b5Yh?W z%(2%azE6CiaanUo?ucL%kByH-#_6W`C!lyo6tY!w-^!S( zNa<9_-qD&-YgBI3?Uwbl9~?(vQ6_iIuBgjO)u`UP`)T21dp~{&yTq^@#+4)2d&@th zh|qozTgq83%O8{T@DgWp$}>2Z$}Hsji`j($J|^L$e8;US zw~^U35iMe&7Cw=;+xny0>M4A-80_d*W5c&*C%11|q2%lr>RtZCVfl185|e7!iCozn zPo^YhgID?D{rW%W&OZN8UfGFvANCye+*q5JDR5xUs>oi;X1>QXJ@bKS;l_vU!(WC( zx$GecVpB8@hJXE8>tnM=X&+%oQy1|Dae(-PP~91wt9O|^x;L`J7uNhs`NufXp_z25 z)AxyJM`33%?m6ypY;s&j(yd9X*f`2M_PteY=^L=!Lpe%$N+ZmSo5X(|=O5KZ*rZNe z-7;qG`Rmgeb~i|dNtMa&?-$)m!u|#!D;p%b1(E=h#>}IqVO5JXV}Cv3NAt_wf#&Vy z8RgsN9Xq%>G+GVnj7)6Khn^S{|6+NetYsf!x{v7dp4o^R%Rui9KgDKZ!y{yW&pH!d z;lkG42n%;u{B|2z0~bdP$;s=Q&6)(qy^n!=wZzrS$dAapw;E2qn}M5JXBlHwJxwo~ z@@nvoKKPx`mijPH(gt6F8e#6BCFCb3d1AakU3;!&Kh%%ZMLJyIoQt?Geo7c^>}3z;*WOY@mjVQ!e6Yd~1?0k~312y_cQw+4phr>1OK|&s$=5 zd$+)+zF;MV+Xpv}x7&hdgZOt}FR)mxJcc}xAbb6Oe`x!q^f-ejBZEvunX`Z5rX)i= z|2H9Sa2pE%LPY_qtzHzBWEw<2iXEN?xyU90PrE>Oj*(P! zHs{U%jPef=b06z*?Q|1IjZT4B7Hs%m;s5pE-MI(=nM?`Rv{?q(Odpt>M+7E@ LmIgIY=cs=JYqxe$ literal 0 HcmV?d00001 diff --git a/services/SimpleUI/images/btn_bar_more_nor.png b/services/SimpleUI/images/btn_bar_more_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..f51cb548cf8c3b465d245c9552fc69b2e31065e5 GIT binary patch literal 3032 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 F{{UPBp$7l} literal 0 HcmV?d00001 diff --git a/services/SimpleUI/images/btn_bar_stop_nor.png b/services/SimpleUI/images/btn_bar_stop_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..c5cdc11ca8ea537497a1a794d79d40362f8659a9 GIT binary patch literal 3255 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 + if(m_currentWebView) + return m_currentWebView->getURI(); + else + return std::string(""); } bool WebKitEngineService::isLoadError() const @@ -134,7 +137,10 @@ bool WebKitEngineService::isLoadError() const std::string WebKitEngineService::getTitle() const { M_ASSERT(m_currentWebView); - return m_currentWebView->getTitle(); + if(m_currentWebView) + return m_currentWebView->getTitle(); + else + return std::string(""); } void WebKitEngineService::stopLoading(void) @@ -414,7 +420,11 @@ bool WebKitEngineService::isPrivateMode() const std::shared_ptr WebKitEngineService::getSnapshotData(int width, int height) { M_ASSERT(m_currentWebView); - return m_currentWebView->captureSnapshot(width, height); + if(m_currentWebView) + return m_currentWebView->captureSnapshot(width, height); + else + return std::make_shared(); + } std::shared_ptr WebKitEngineService::getSnapshotData(TabId id, int width, int height){ @@ -443,7 +453,10 @@ bool WebKitEngineService::hasFocus() const std::shared_ptr WebKitEngineService::getFavicon() { M_ASSERT(m_currentWebView); - return m_currentWebView->getFavicon(); + if(m_currentWebView) + return m_currentWebView->getFavicon(); + else + return std::make_shared(); } void WebKitEngineService::webViewClicked() @@ -470,8 +483,7 @@ void WebKitEngineService::setZoomFactor(int zoomFactor) void WebKitEngineService::clearPrivateData() { for(std::map::const_iterator it = m_tabs.begin(); it != m_tabs.end(); it++){ - auto item = *it; - item.second->clearPrivateData(); + it->second->clearPrivateData(); } } @@ -488,7 +500,7 @@ void WebKitEngineService::_IMEStateChanged(bool enable) void WebKitEngineService::backButtonClicked() const { M_ASSERT(m_currentWebView); - if (isBackEnabled()) { + if (isBackEnabled()) { m_currentWebView->back(); } else { app_efl_exit(); diff --git a/services/WebKitEngineService/WebView.cpp b/services/WebKitEngineService/WebView.cpp index 75ea343..7751826 100644 --- a/services/WebKitEngineService/WebView.cpp +++ b/services/WebKitEngineService/WebView.cpp @@ -24,7 +24,6 @@ #include "WebView.h" #if defined(USE_EWEBKIT) -//#include #include #endif @@ -46,7 +45,11 @@ #include "ServiceManager.h" #define certificate_crt_path CERTS_DIR +#if MERGE_ME #define APPLICATION_NAME_FOR_USER_AGENT "SamsungBrowser/1.0" +#else +#define APPLICATION_NAME_FOR_USER_AGENT "Mozilla/5.0 (X11; SMART-TV; Linux) AppleWebkit/538.1 (KHTML, like Gecko) Safari/538.1" +#endif using namespace tizen_browser::tools; @@ -57,7 +60,8 @@ namespace webkitengine_service { WebView::WebView(Evas_Object * obj, TabId tabId) : m_parent(obj) , m_tabId(tabId) - , m_ewkView(NULL) + , m_title(std::string()) + , m_ewkView(nullptr) , m_isLoading(false) , m_loadError(false) { @@ -78,7 +82,7 @@ void WebView::init(Evas_Object * opener) #if defined(USE_EWEBKIT) #if 0 //not using smart class - static Ewk_View_Smart_Class *clasz = NULL; + static Ewk_View_Smart_Class *clasz = nullptr; Ewk_Context *context = ewk_context_default_get(); if (!clasz) { clasz = smartClass(); @@ -87,11 +91,13 @@ void WebView::init(Evas_Object * opener) // clasz->run_javascript_alert = onJavascriptAlert; // clasz->run_javascript_confirm = onJavascriptConfirm; // clasz->run_javascript_prompt = onJavascriptPrompt; - clasz->window_create = onWindowCreate; - clasz->window_close = onWindowClose; +// clasz->window_create = onWindowCreate; +// clasz->window_close = onWindowClose; + ewk_context_cache_model_set(context, EWK_CACHE_MODEL_PRIMARY_WEBBROWSER); ewk_context_certificate_file_set(context, certificate_crt_path); + } Evas_Smart *smart = evas_smart_class_new(&clasz->sc); @@ -99,8 +105,8 @@ void WebView::init(Evas_Object * opener) /// \todo: Consider process model. Now, One UIProcess / One WebProcess. // if (opener) // m_ewkView = ewk_view_smart_add(evas_object_evas_get(m_parent), smart, context, ewk_view_page_group_get(opener)); - else - m_ewkView = ewk_view_smart_add(evas_object_evas_get(m_parent), smart, context, ewk_page_group_create(NULL)); +// else + m_ewkView = ewk_view_smart_add(evas_object_evas_get(m_parent), smart, context, ewk_page_group_create(nullptr)); #else m_ewkView = ewk_view_add(evas_object_evas_get(m_parent)); // Ewk_Context *context = ewk_view_context_get(m_ewkView); @@ -481,7 +487,7 @@ std::shared_ptr WebView::captureSnapshot(int M_ASSERT(targetHeight); Evas_Coord vw, vh; std::shared_ptr noImage = std::make_shared(); - evas_object_geometry_get(m_ewkView, NULL, NULL, &vw, &vh); + evas_object_geometry_get(m_ewkView, nullptr, nullptr, &vw, &vh); if (vw == 0 || vh == 0) return noImage; @@ -679,7 +685,7 @@ void WebView::__loadError(void* data, Evas_Object * obj, void* ewkError) { BROWSER_LOGD("Stop signal emitted"); BROWSER_LOGD("Error description: %s", ewk_error_description_get(error)); - evas_object_smart_callback_call(obj, "load,stop", NULL); + evas_object_smart_callback_call(obj, "load,stop", nullptr); } else { @@ -964,7 +970,7 @@ bool WebView::hasFocus() const double WebView::getZoomFactor() const { - if(EINA_UNLIKELY(m_ewkView == NULL)){ + if(EINA_UNLIKELY(m_ewkView == nullptr)){ return 1.0; } @@ -997,16 +1003,15 @@ std::shared_ptr WebView::getFavicon() { M_ASSERT(m_ewkView); #if defined(USE_EWEBKIT) - if (faviconImage.get() == NULL) { - -#if PLATFORM(TIZEN) -// Evas_Object * favicon = ewk_view_favicon_get(m_ewkView); - Evas_Object * favicon = ewk_context_icon_database_icon_object_add(ewk_view_context_get(m_ewkView), ewk_view_url_get(m_ewkView),evas_object_evas_get(m_ewkView)); + if (faviconImage.get() == nullptr) { +#if MERGE_ME +//#if PLATFORM(TIZEN) + Evas_Object * favicon = ewk_view_favicon_get(m_ewkView); + Evas_Object * favicon = ewk_context_icon_database_icon_object_add(ewk_view_context_get(m_ewkView), ewk_view_url_get(m_ewkView),evas_object_evas_get(m_ewkView)); #else Ewk_Favicon_Database * database = ewk_context_favicon_database_get(ewk_view_context_get(m_ewkView)); Evas_Object * favicon = ewk_favicon_database_icon_get(database, ewk_view_url_get(m_ewkView), evas_object_evas_get(m_ewkView)); #endif - #ifndef NDEBUG int w = 0, h = 0; evas_object_image_size_get(favicon, &w, &h); -- 2.7.4