2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "browser_config.h"
19 #if defined(USE_EWEBKIT)
20 #include <ewk_chromium.h>
23 #include <boost/format.hpp>
24 #include <boost/any.hpp>
27 #include <Elementary.h>
29 #include <Ecore_Wayland.h>
34 #include "BrowserLogger.h"
35 #include "ServiceManager.h"
36 #include "AbstractWebEngine.h"
38 #include "Tools/EflTools.h"
39 #include "BrowserImage.h"
40 #include "SimpleURI.h"
42 #include "BookmarkItem.h"
43 #include "Tools/EflTools.h"
44 #include "BrowserImage.h"
45 #include "HistoryItem.h"
46 #include "BookmarkItem.h"
47 #include "boost/date_time/gregorian/gregorian.hpp"
48 #include "boost/date_time/posix_time/posix_time.hpp"
49 #include "NetworkErrorHandler.h"
50 #include "SqlStorage.h"
53 namespace tizen_browser{
56 EXPORT_SERVICE(SimpleUI, "org.tizen.browser.simpleui")
58 const std::string HomePageURL = "about:home";
61 : AbstractMainWindow()
62 , m_mainLayout(nullptr)
63 , m_progressBar(nullptr)
69 , m_bookmarkManagerUI()
72 , m_initialised(false)
73 , m_isHomePageActive(false)
74 , m_currentZoom(ZOOM_TYPE_100)
76 , m_networkErrorPopup(0)
77 , m_wvIMEStatus(false)
80 ewk_context_default_get();
81 Evas_Object *main_window = elm_win_util_standard_add("browserApp", "browserApp");
82 if (main_window == nullptr)
83 BROWSER_LOGE("Failed to create main window");
85 setMainWindow(main_window);
88 SimpleUI::~SimpleUI() {
89 BROWSER_LOGD("%s", __func__);
90 m_sessionService->getStorage()->deleteSession(m_currentSession);
91 /// \todo Auto-generated destructor stub
92 evas_object_del(m_window.get());
95 void SimpleUI::destroyUI()
97 BROWSER_LOGD("%s", __func__);
98 evas_object_del(m_window.get());
101 std::string SimpleUI::edjePath(const std::string &file)
103 return std::string(EDJE_DIR) + file;
106 std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > SimpleUI::getBookmarks(int folder_id)
108 return m_favoriteService->getBookmarks(folder_id);
111 std::vector<std::shared_ptr<tizen_browser::services::HistoryItem> > SimpleUI::getHistory()
113 return m_historyService->getMostVisitedHistoryItems();
117 std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > SimpleUI::getBookmarkFolders()
119 return m_favoriteService->getBookmarkFolders();
124 int SimpleUI::exec(const std::string& _url)
126 BROWSER_LOGD("[%s] _url=%s, initialised=%d", __func__, _url.c_str(), m_initialised);
127 std::string url = _url;
128 Session::Session lastSession;
131 if (m_window.get()) {
132 config::DefaultConfig config;
134 m_tabLimit = boost::any_cast <int> (config.get("TAB_LIMIT"));
135 m_favoritesLimit = boost::any_cast <int> (config.get("FAVORITES_LIMIT"));
136 elm_win_alpha_set(m_window.get(), EINA_FALSE);
138 // creating main window
141 ecore_wl_screen_size_get(&width, &height);
142 evas_object_move(m_window.get(), 0, 0);
143 evas_object_resize(m_window.get(), width, height);
145 // create main layout
146 m_mainLayout = elm_layout_add(m_window.get());
147 evas_object_size_hint_weight_set(m_mainLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
148 elm_win_resize_object_add(m_window.get(), m_mainLayout);
150 ///\todo Integrate with pointer / tab mode switch
151 elm_win_focus_highlight_style_set(m_window.get(), "invisible");
152 //elm_config_focus_highlight_animate_set(EINA_TRUE);
154 m_errorLayout = elm_layout_add(m_window.get());
155 evas_object_size_hint_weight_set(m_errorLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
156 //elm_win_resize_object_add(m_window.get(), m_errorLayout);
158 //set global show tooltip timeout
159 elm_config_tooltip_delay_set( boost::any_cast <double> (config.get("TOOLTIP_DELAY")));
163 if(!elm_layout_file_set(m_mainLayout, edjePath("SimpleUI/MainLayout.edj").c_str(), "main_layout"))
164 throw std::runtime_error("Layout file not found: " + edjePath("SimpleUI/MainLayout.edj"));
166 //elm_object_style_set(m_errorLayout, "error_message");
167 if(!elm_layout_file_set(m_errorLayout, edjePath("SimpleUI/ErrorMessage.edj").c_str(), "error_message"))
168 throw std::runtime_error("Layout file not found: " + edjePath("SimpleUI/ErrorMessage.edj"));
170 // load && initialize components
172 BROWSER_LOGD("[%s:%d] service: simpleURI ", __PRETTY_FUNCTION__, __LINE__);
174 std::dynamic_pointer_cast
175 <tizen_browser::base_ui::SimpleURI,tizen_browser::core::AbstractService>
176 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.simpleuri"));
177 M_ASSERT(m_simpleURI);
180 BROWSER_LOGD("[%s:%d] service: webkitengineservice ", __PRETTY_FUNCTION__, __LINE__);
182 std::dynamic_pointer_cast
183 <basic_webengine::AbstractWebEngine<Evas_Object>,tizen_browser::core::AbstractService>
184 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webkitengineservice"));
185 M_ASSERT(m_webEngine);
186 m_webEngine->init(m_mainLayout);
189 BROWSER_LOGD("[%s:%d] service: bookmarksui ", __PRETTY_FUNCTION__, __LINE__);
192 BROWSER_LOGD("[%s:%d] service: favoriteservice ", __PRETTY_FUNCTION__, __LINE__);
193 std::string favoriteService(boost::any_cast < std::string > (config.get("favorite_service_name")));
194 BROWSER_LOGD("favorite config");
196 std::dynamic_pointer_cast
197 <tizen_browser::interfaces::AbstractFavoriteService,tizen_browser::core::AbstractService>
198 (tizen_browser::core::ServiceManager::getInstance().getService(favoriteService));
199 BROWSER_LOGD("favorite create");
200 M_ASSERT(m_favoriteService);
201 m_favoriteService->synchronizeBookmarks();
202 BROWSER_LOGD("favorite before getBookmarks");
203 m_favoriteService->getBookmarks();
204 BROWSER_LOGD("favorite after getBookmarks");
207 BROWSER_LOGD("[%s:%d] service: historyservice ", __PRETTY_FUNCTION__, __LINE__);
209 std::dynamic_pointer_cast
210 <tizen_browser::services::HistoryService,tizen_browser::core::AbstractService>
211 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyservice"));
212 M_ASSERT(m_historyService);
215 // Platforminputmanager
216 BROWSER_LOGD("[%s:%d] service: platforminputmanager ", __PRETTY_FUNCTION__, __LINE__);
217 m_platformInputManager =
218 std::dynamic_pointer_cast
219 <tizen_browser::services::PlatformInputManager,tizen_browser::core::AbstractService>
220 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.platforminputmanager"));
221 M_ASSERT(m_platformInputManager);
222 m_platformInputManager->init(m_window.get());
223 m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit));
224 m_platformInputManager->backPressed.connect(boost::bind(&SimpleUI::onBackPressed, this));
229 leftButtonBar = std::make_shared<ButtonBar>(m_mainLayout, "SimpleUI/LeftButtonBar.edj", "left_button_bar");
230 leftButtonBar->addAction(m_back, "prev_button");
231 leftButtonBar->addAction(m_forward, "next_button");
232 leftButtonBar->addAction(m_reload, "refresh_stop_button");
233 //register action that will be used later by buttons
234 leftButtonBar->registerEnabledChangedCallback(m_stopLoading, "refresh_stop_button");
237 rightButtonBar = std::make_shared<ButtonBar>(m_mainLayout, "SimpleUI/RightButtonBar.edj", "right_button_bar");
238 rightButtonBar->addAction(m_tab, "tab_button");
239 rightButtonBar->addAction(m_showMoreMenu, "setting_button");
241 m_progressBar = elm_progressbar_add(m_mainLayout);
242 elm_object_style_set(m_progressBar,"play_buffer");
244 webTitleBar = std::make_shared<WebTitleBar>(m_mainLayout, "SimpleUI/WebTitleBar.edj", "web_title_bar");
245 elm_object_part_content_set(m_mainLayout, "web_title_bar", webTitleBar->getContent());
247 elm_object_part_content_set(m_mainLayout, "uri_entry", m_simpleURI->getContent(m_mainLayout));
248 elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_left", leftButtonBar->getContent());
249 elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_right", rightButtonBar->getContent());
251 // connecting all together
252 m_simpleURI->uriChanged.connect(boost::bind(&SimpleUI::filterURL, this, _1));
253 m_webEngine->uriChanged.connect(boost::bind(&SimpleUI::webEngineURLChanged, this, _1));
254 m_webEngine->uriOnTabChanged.connect(boost::bind(&SimpleUI::checkTabId,this,_1));
255 m_webEngine->webViewClicked.connect(boost::bind(&SimpleURI::clearFocus, m_simpleURI.get()));
256 m_webEngine->backwardEnableChanged.connect(boost::bind(&SimpleUI::backEnable, this, _1));
257 m_webEngine->forwardEnableChanged.connect(boost::bind(&SimpleUI::forwardEnable, this, _1));
258 m_webEngine->loadStarted.connect(boost::bind(&SimpleUI::loadStarted, this));
259 m_webEngine->loadProgress.connect(boost::bind(&SimpleUI::progressChanged,this,_1));
260 m_webEngine->loadFinished.connect(boost::bind(&SimpleUI::loadFinished, this));
261 m_webEngine->loadStop.connect(boost::bind(&SimpleUI::loadFinished, this));
262 m_webEngine->loadError.connect(boost::bind(&SimpleUI::loadError, this));
263 m_webEngine->confirmationRequest.connect(boost::bind(&SimpleUI::handleConfirmationRequest, this, _1));
264 m_webEngine->tabCreated.connect(boost::bind(&SimpleUI::tabCreated, this));
265 m_webEngine->tabClosed.connect(boost::bind(&SimpleUI::tabClosed,this,_1));
266 m_webEngine->favIconChanged.connect(boost::bind(&SimpleURI::setFavIcon, m_simpleURI.get(), _1));
267 m_webEngine->favIconChanged.connect(boost::bind(&WebTitleBar::setFavIcon, webTitleBar.get(), _1));
268 m_webEngine->titleChanged.connect(boost::bind(&WebTitleBar::show, webTitleBar.get(), _1));
269 m_webEngine->IMEStateChanged.connect(boost::bind(&SimpleUI::setwvIMEStatus, this, _1));
271 m_favoriteService->bookmarkAdded.connect(boost::bind(&SimpleUI::onBookmarkAdded, this,_1));
272 m_favoriteService->bookmarkDeleted.connect(boost::bind(&SimpleUI::onBookmarkRemoved, this, _1));
274 //m_historyService->historyEmpty.connect(boost::bind(&SimpleUI::disableHistoryButton, this, _1));
275 m_historyService->historyAdded.connect(boost::bind(&SimpleUI::onHistoryAdded, this,_1));
276 m_historyService->historyDeleted.connect(boost::bind(&SimpleUI::onHistoryRemoved, this,_1));
280 elm_layout_signal_callback_add(m_simpleURI->getContent(), "slide_websearch", "elm", SimpleUI::favicon_clicked, this);
282 // show main layout and window
283 evas_object_show(m_mainLayout);
284 evas_object_show(m_window.get());
286 m_netErrorHandler = std::unique_ptr<tizen_browser::basic_ui::NetworkErrorHandler>(new tizen_browser::basic_ui::NetworkErrorHandler);
287 m_netErrorHandler->networkError.connect(boost::bind(&SimpleUI::onNetworkError, this));
288 m_netErrorHandler->networkConnected.connect(boost::bind(&SimpleUI::onNetworkConnected, this));
290 m_sessionService = std::dynamic_pointer_cast
292 tizen_browser::services::SessionStorage,
293 tizen_browser::core::AbstractService
294 >(tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.sessionStorageService"));
295 if(m_sessionService){
296 lastSession = std::move(m_sessionService->getStorage()->getLastSession());
297 m_currentSession = std::move(m_sessionService->getStorage()->createSession());
301 m_initialised = true;
303 // only when first run
305 BROWSER_LOGD("[%s]: changing to homeUrl", __func__);
306 switchViewToHomePage();
307 #if MERGE_ME // Not sure if this should be enabled
308 filterURL(HomePageURL);
310 if(lastSession.items().size() >= 1){
311 for(auto iter=lastSession.items().begin(),
312 end=lastSession.items().end();
316 openNewTab(iter->second);
318 m_sessionService->getStorage()->deleteSession(lastSession);
325 BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str());
327 saveFolder("Bookmark Bar",0,1);
329 m_simpleURI->setFocus();
334 void SimpleUI::loadThemes()
336 elm_theme_extension_add(nullptr, edjePath("SimpleUI/ZoomItem.edj").c_str());
337 elm_theme_extension_add(nullptr, edjePath("SimpleUI/TabItem.edj").c_str());
338 elm_theme_extension_add(nullptr, edjePath("SimpleUI/ErrorMessage.edj").c_str());
340 elm_theme_overlay_add(0, edjePath("SimpleUI/ScrollerDefault.edj").c_str());
341 elm_theme_overlay_add(0, edjePath("SimpleUI/Tooltip.edj").c_str());
344 void SimpleUI::createActions()
346 ///\todo Add MulitStateAction. and convert m_stopLoading and m_reload actons to it?
348 m_back = sharedAction(new Action("Back"));
349 m_back->setToolTip("Previous");
350 m_back->setIcon("browser/toolbar_prev");
352 m_forward = sharedAction(new Action("Next"));
353 m_forward->setToolTip("Next");
354 m_forward->setIcon("browser/toolbar_next");
356 m_stopLoading = sharedAction(new Action("Stop"));
357 m_stopLoading->setToolTip("Stop");
358 m_stopLoading->setIcon("browser/toolbar_stop");
360 m_reload = sharedAction(new Action("Reload"));
361 m_reload->setToolTip("Reload");
362 m_reload->setIcon("browser/toolbar_reload");
363 m_tab = sharedAction(new Action("Tabs"));
364 m_tab->setToolTip("Tab page");
365 m_tab->setIcon("browser/toolbar_tab");
366 //m_tab->setCheckable(true);
368 m_showMoreMenu = sharedAction(new Action("Settings"));
369 m_showMoreMenu->setToolTip("Settings");
370 m_showMoreMenu->setIcon("browser/toolbar_setting");
372 m_settingPointerMode = sharedAction(new Action("Pointer mode"));
373 m_settingPointerMode->setToolTip("Switch to Pointer Mode");
374 m_settingPointerMode->setCheckable(true);
375 m_settingPointerMode->setChecked(m_platformInputManager->getPointerModeEnabled());
376 m_settingPointerMode->setEnabled(true);
379 m_settingPrivateBrowsing = sharedAction(new Action("Private browsing"));
380 m_settingPrivateBrowsing->setToolTip("On exit from private mode all cookies, history, and stored data will be deleted");
381 m_settingPrivateBrowsing->setCheckable(true);
382 m_settingPrivateBrowsing->setChecked(m_webEngine->isPrivateMode());
383 m_settingPrivateBrowsing->setEnabled(true);
385 m_settingDeleteHistory = sharedAction(new Action("Delete history"));
386 m_settingDeleteHistory->setToolTip("Delete History");
388 m_settingDeleteData = sharedAction(new Action("Delete data"));
389 m_settingDeleteData->setToolTip("Delete Data");
391 m_settingDeleteFavorite = sharedAction(new Action("Delete favorite site"));
392 m_settingDeleteFavorite->setToolTip("Delete favorite site");
394 m_bookmarks_manager_Add_NewFolder = sharedAction(new Action("+ New Folder"));
395 m_bookmarks_manager_Add_NewFolder->setToolTip("Add a new Folder");
397 m_bookmarks_manager_BookmarkBar = sharedAction(new Action("Bookmark Bar"));
398 m_bookmarks_manager_BookmarkBar->setToolTip("show Bookmark bar");
400 m_bookmarks_manager_Folder3 = sharedAction(new Action("Folder 3"));
401 m_bookmarks_manager_Folder3->setToolTip("open Folder 3");
403 m_bookmarks_manager_Folder2 = sharedAction(new Action("Folder 2"));
404 m_bookmarks_manager_Folder2->setToolTip("open Folder 2");
406 m_bookmarks_manager_Folder1 = sharedAction(new Action("Folder 1"));
407 m_bookmarks_manager_Folder1->setToolTip("open Folder 1");
410 void SimpleUI::connectActions()
413 m_back->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::back, m_webEngine.get()));
414 m_back->triggered.connect(boost::bind(&SimpleUI::updateBrowserView, this));
415 m_forward->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::forward, m_webEngine.get()));
416 m_stopLoading->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::stopLoading, m_webEngine.get()));
417 m_reload->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::reload, m_webEngine.get()));
418 m_reload->triggered.connect(boost::bind(&SimpleUI::updateBrowserView, this));
421 m_tab->triggered.connect(boost::bind(&SimpleUI::showTabUI, this));
422 m_showMoreMenu->triggered.connect(boost::bind(&SimpleUI::showMoreMenu, this));
424 // m_settingPointerMode->toggled.connect(boost::bind(&tizen_browser::services::PlatformInputManager::setPointerModeEnabled, m_platformInputManager.get(), _1));
426 m_settingPrivateBrowsing->toggled.connect(boost::bind(&SimpleUI::settingsPrivateModeSwitch, this, _1));
428 //m_settingDeleteHistory->triggered.connect(boost::bind(&SimpleUI::settingsDeleteHistory, this));
429 //m_settingDeleteData->triggered.connect(boost::bind(&SimpleUI::settingsDeleteData, this));;
430 //m_settingDeleteFavorite->triggered.connect(boost::bind(&SimpleUI::settingsDeleteFavorite, this));;
432 // m_settingPrivateBrowsing->toggled.connect(boost::bind(&SimpleUI::settingsPrivateModeSwitch, this, _1));
433 m_settingDeleteHistory->triggered.connect(boost::bind(&SimpleUI::settingsDeleteHistory, this));
434 m_settingDeleteData->triggered.connect(boost::bind(&SimpleUI::settingsDeleteData, this));;
435 m_settingDeleteFavorite->triggered.connect(boost::bind(&SimpleUI::settingsDeleteFavorite, this));;
439 void SimpleUI::updateURIBarView()
441 m_simpleURI->changeUri(m_webEngine->getURI());
442 leftButtonBar->setActionForButton("refresh_stop_button", m_reload);
448 void SimpleUI::updateWebView()
450 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
451 evas_object_hide(elm_object_part_content_get(m_mainLayout, "web_view"));
452 elm_object_part_content_unset(m_mainLayout, "web_view");
453 elm_object_part_content_set(m_mainLayout, "web_view", m_webEngine->getLayout());
454 evas_object_show(m_webEngine->getLayout());
457 void SimpleUI::updateBrowserView()
459 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
460 if(isHomePageActive())
468 void SimpleUI::switchToTab(const tizen_browser::basic_webengine::TabId& tabId)
470 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
471 if(m_webEngine->currentTabId() != tabId) {
472 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
473 m_webEngine->switchToTab(tabId);
475 if(m_webEngine->isLoadError()){
476 BROWSER_LOGD("[%s:%d] LOAD ERROR!", __PRETTY_FUNCTION__, __LINE__);
480 BROWSER_LOGD("[%s:%d] swiching to web_view ", __PRETTY_FUNCTION__, __LINE__);
484 bool SimpleUI::isHomePageActive()
486 BROWSER_LOGD("[%s:%d] isHomePageActive : %d", __PRETTY_FUNCTION__, __LINE__, m_isHomePageActive);
487 return m_isHomePageActive;
490 bool SimpleUI::isErrorPageActive()
492 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
493 return elm_object_part_content_get(m_mainLayout, "web_view") == m_errorLayout;
496 void SimpleUI::switchViewToHomePage()
498 #if MERGE_ME // remove
499 if(!isHomePageActive()){
500 evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view"));
501 elm_object_part_content_unset(m_mainLayout, "web_view");
502 elm_object_part_content_set(m_mainLayout, "web_view", m_bookmarksUI->getContent());
503 evas_object_show(m_bookmarksUI->getContent());
504 //m_simpleURI->changeUri(HomePageURL);
505 filterURL(HomePageURL);
508 BROWSER_LOGD("[%s:%d] isHomePageActive : %d", __PRETTY_FUNCTION__, __LINE__, m_isHomePageActive);
509 if(isHomePageActive())
513 filterURL(HomePageURL);
515 m_webEngine->disconnectCurrentWebViewSignals();
517 leftButtonBar->setActionForButton("refresh_stop_button", m_reload);
521 forwardEnable(false);
523 evas_object_hide(leftButtonBar->getContent());
524 elm_object_signal_emit(m_mainLayout, "shiftback_uri", "ui");
525 elm_object_signal_emit(m_simpleURI->getContent(), "shiftback_uribg", "ui");
532 void SimpleUI::checkTabId(const tizen_browser::basic_webengine::TabId& id){
533 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
534 if(m_webEngine->currentTabId() != id || isErrorPageActive()){
535 BROWSER_LOGD("URL changed on non-visible tab, updating browser view");
540 void SimpleUI::openNewTab(const std::string &uri)
542 switchToTab(m_webEngine->addTab(uri));
545 void SimpleUI::closeTab(){
546 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
547 auto tabId = m_webEngine->currentTabId();
551 void SimpleUI::closeTab(const tizen_browser::basic_webengine::TabId& id)
553 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
554 m_currentSession.removeItem(id.toString());
555 m_webEngine->closeTab(id);
559 void SimpleUI::bookmarkCheck()
561 if (isHomePageActive())
564 if(m_favoriteService->bookmarkExists(m_webEngine->getURI())){
565 BROWSER_LOGD("[%s] There is bookmark for this site [%s], set indicator on!", __func__, m_webEngine->getURI().c_str());
567 //leftButtonBar->setActionForButton("bookmark_button", m_unbookmark);
570 BROWSER_LOGD("[%s] There is no bookmark for this site [%s], set indicator off", __func__, m_webEngine->getURI().c_str());
572 //leftButtonBar->setActionForButton("bookmark_button", m_bookmark);
573 //addBookmarkEnable(m_favoriteService->countBookmarksAndSubFolders() < m_favoritesLimit);
577 void SimpleUI::onBookmarkAdded(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem)
580 BROWSER_LOGI("Bookmark added with address %s",bookmarkItem->getAddress().c_str());
582 webTitleBar->removeFavIcon();
583 webTitleBar->show("Added to favorites");
587 void SimpleUI::onHistoryAdded(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem)
590 m_mainUI->addHistoryItem(historyItem);
591 BROWSER_LOGI("Bookmark added with address %s",historyItem->getUrl().c_str());
595 void SimpleUI::onHistoryClicked(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem)
597 std::string historyAddress = historyItem->getUrl();
598 openNewTab(historyAddress);
601 void SimpleUI::onMostVisitedClicked(const std::string&)
603 BROWSER_LOGD("[%s]", __func__);
604 m_mainUI->clearHistoryGenlist();
605 m_mainUI->clearBookmarkGengrid();
606 m_mainUI->addHistoryItems(getHistory());
607 m_mainUI->showHistoryGenlist();
610 void SimpleUI::onBookmarkButtonClicked(const std::string&)
612 BROWSER_LOGD("[%s]", __func__);
613 m_mainUI->clearBookmarkGengrid();
614 m_mainUI->clearHistoryGenlist();
615 m_mainUI->addBookmarkItems(getBookmarks());
616 m_mainUI->showBookmarkGengrid();
619 void SimpleUI::onBookmarkManagerButtonClicked(const std::string&)
621 BROWSER_LOGD("[%s]", __func__);
622 showBookmarkManagerMenu();
625 void SimpleUI::onBookmarkClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem)
627 std::string bookmarkAddress = bookmarkItem->getAddress();
628 openNewTab(bookmarkAddress);
631 void SimpleUI::onBookmarkDeleteClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem)
633 BROWSER_LOGD("[%s] delete %s", __func__, bookmarkItem->getAddress().c_str());
634 m_favoriteService->deleteBookmark(bookmarkItem->getAddress());
637 void SimpleUI::onBookmarkRemoved(const std::string& uri)
640 BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str());
642 webTitleBar->removeFavIcon();
643 webTitleBar->show("Removed from favorites");
647 void SimpleUI::onHistoryRemoved(const std::string& uri)
649 BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str());
650 //m_mainUI->removeHistoryItem(uri.c_str());
653 void SimpleUI::onReturnPressed(MenuButton *m)
655 BROWSER_LOGD("[%s]", __func__);
656 m_platformInputManager->returnPressed.disconnect_all_slots();
657 m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit));
658 hidePopup.disconnect_all_slots();
662 void SimpleUI::setwvIMEStatus(bool status)
664 BROWSER_LOGD("[%s]", __func__);
665 m_wvIMEStatus = status;
668 void SimpleUI::onBackPressed()
670 BROWSER_LOGD("[%s]", __func__);
671 if (!m_simpleURI->hasFocus() && !m_wvIMEStatus && !isHomePageActive() && m_back->isEnabled())
672 m_webEngine->backButtonClicked();
675 void SimpleUI::backEnable(bool enable)
677 m_back->setEnabled(enable);
680 void SimpleUI::forwardEnable(bool enable)
682 m_forward->setEnabled(enable);
685 void SimpleUI::reloadEnable(bool enable)
687 m_reload->setEnabled(enable);
690 void SimpleUI::stopEnable(bool enable)
692 m_stopLoading->setEnabled(enable);
695 void SimpleUI::addBookmarkEnable(bool enable)
698 //m_bookmark->setEnabled(enable);
701 void SimpleUI::removeBookmarkEnable(bool enable)
704 //m_unbookmark->setEnabled(enable);
706 void SimpleUI::zoomEnable(bool enable)
708 m_zoom_in->setEnabled(enable);
711 void SimpleUI::settingsButtonEnable(bool enable)
713 m_showMoreMenu->setEnabled(enable);
716 void SimpleUI::loadStarted()
718 BROWSER_LOGD("Switching \"reload\" to \"stopLoading\".");
720 elm_object_signal_emit(m_simpleURI->getContent(), "shiftright_uribg", "ui");
721 elm_object_signal_emit(m_mainLayout, "shiftright_uri", "ui");
722 evas_object_show(leftButtonBar->getContent());
723 leftButtonBar->setActionForButton("refresh_stop_button", m_stopLoading);
724 addBookmarkEnable(false);
725 if(!m_webEngine->isPrivateMode()){
726 m_currentSession.updateItem(m_webEngine->currentTabId().toString(), m_webEngine->getURI());
730 if(!m_platformInputManager->getPointerModeEnabled())
731 elm_object_focus_set(leftButtonBar->getButton("refresh_stop_button"), EINA_TRUE);
735 void SimpleUI::progressChanged(double progress)
740 elm_progressbar_value_set(m_progressBar,progress);
744 void SimpleUI::loadFinished()
746 elm_object_signal_emit(m_mainLayout, "hide_progressbar_bg", "ui");
747 BROWSER_LOGD("Switching \"stopLoading\" to \"reload\".");
749 leftButtonBar->setActionForButton("refresh_stop_button", m_reload);
751 addBookmarkEnable(m_favoriteService->countBookmarksAndSubFolders() < m_favoritesLimit);
753 if(m_simpleURI->getCurrentIconTyep() != SimpleURI::IconTypeFav){
754 m_simpleURI->setFavIcon(m_webEngine->getFavicon());
755 webTitleBar->setFavIcon(m_webEngine->getFavicon());
757 if(m_webEngine->isLoadError()){
761 if(!m_webEngine->isPrivateMode()){
762 m_historyService->addHistoryItem(std::make_shared<tizen_browser::services::HistoryItem> (m_webEngine->getURI(),
763 m_webEngine->getTitle(),
764 m_webEngine->getFavicon()));
767 if(!m_platformInputManager->getPointerModeEnabled())
768 elm_object_focus_set(leftButtonBar->getButton("refresh_stop_button"), EINA_TRUE);
772 void SimpleUI::loadError()
774 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
776 elm_object_part_content_set(m_mainLayout, "web_view",m_errorLayout);
777 //evas_object_show(m_errorLayout);
780 void SimpleUI::setErrorButtons()
782 // leftButtonBar->setActionForButton("bookmark_button", m_bookmark);
783 leftButtonBar->setActionForButton("refresh_stop_button", m_reload);
784 // addBookmarkEnable(false);
787 forwardEnable(false);
788 evas_object_hide(m_progressBar);
791 void SimpleUI::filterURL(const std::string& url)
793 BROWSER_LOGD("[%s] url=%s", __func__, url.c_str());
795 //check for special urls (like: 'about:home')
796 //if there will be more addresses may be we should
797 //create some kind of std::man<std::string url, bool *(doSomethingWithUrl)()>
798 //and then just map[url]() ? m_webEngine->setURI(url) : /*do nothing*/;;
799 if(/*url.empty() ||*/ url == HomePageURL){
800 m_simpleURI->changeUri("");
801 } else if (!url.empty()){
803 //check if url is in favorites
805 //check if url is in blocked
808 if (isHomePageActive())
811 m_webEngine->setURI(url);
813 m_simpleURI->clearFocus();
814 //addBookmarkEnable(false);
817 void SimpleUI::webEngineURLChanged(const std::string& url)
819 BROWSER_LOGD("webEngineURLChanged:%s", url.c_str());
821 m_simpleURI->changeUri(url);
822 m_simpleURI->clearFocus();
826 void SimpleUI::showZoomMenu()
829 BROWSER_LOGD("[%s:%d] - create ", __PRETTY_FUNCTION__, __LINE__);
830 m_zoomList = std::make_shared<ZoomList>(m_window,
831 rightButtonBar->getButton("zoom_in_button"));
832 m_zoomList->addItem("300%", ZOOM_TYPE_300);
833 m_zoomList->addItem("200%", ZOOM_TYPE_200);
834 m_zoomList->addItem("150%", ZOOM_TYPE_150);
835 m_zoomList->addItem("100%", ZOOM_TYPE_100);
836 m_zoomList->addItem("75%", ZOOM_TYPE_75);
837 m_zoomList->addItem("50%", ZOOM_TYPE_50);
839 m_zoomList->zoomChanged.connect(boost::bind(&SimpleUI::zoomLevelChanged, this, _1));
842 zoom_type currentZoomType;
844 currentZoomType = static_cast<zoom_type> (m_webEngine->getZoomFactor());
846 //Handling Initial case
847 if(m_webEngine->getZoomFactor() == 0){
848 m_webEngine->setZoomFactor(100);
849 m_currentZoom = static_cast<zoom_type> (100);
850 currentZoomType = ZOOM_TYPE_100;
852 //each tab may have another zoom, but there is only one instance of zoomlist
853 //so we should refresh value of zoom every time
854 m_zoomList->setZoom(currentZoomType);
855 BROWSER_LOGD("Current zoom factor from webkit %d%%", m_webEngine->getZoomFactor());
857 m_platformInputManager->returnPressed.disconnect_all_slots();
858 m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_zoomList.get()));
859 hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_zoomList.get()));
860 m_zoomList->showPopup();
863 void SimpleUI::zoomLevelChanged(int zoom_level)
865 m_webEngine->setZoomFactor(zoom_level);
866 m_currentZoom = static_cast<zoom_type> (zoom_level);
869 void SimpleUI::AddBookmarkPopup(std::string& str)
871 BROWSER_LOGD("[%s]", __func__);
872 if(!m_bookmarks_manager){
873 m_bookmarks_manager = std::make_shared<BookmarksManager>(m_window,
874 rightButtonBar->getButton("bookmark_button"));
875 m_bookmarks_manager->addAction( m_bookmarks_manager_Add_NewFolder);
876 m_bookmarks_manager->addAction( m_bookmarks_manager_BookmarkBar);
877 m_bookmarks_manager->addAction( m_bookmarks_manager_Folder1);
878 m_bookmarks_manager->addAction( m_bookmarks_manager_Folder2);
879 m_bookmarks_manager->addAction( m_bookmarks_manager_Folder3);
881 m_platformInputManager->returnPressed.disconnect_all_slots();
882 m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_bookmarks_manager.get()));
883 hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_bookmarks_manager.get()));
884 m_bookmarks_manager->showPopup();
887 void SimpleUI::AddNewFolderPopup(std::string& str)
889 BROWSER_LOGD("[%s]", __func__);
892 void SimpleUI::showTabUI()
895 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
897 std::dynamic_pointer_cast
898 <tizen_browser::base_ui::TabUI,tizen_browser::core::AbstractService>
899 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.tabui"));
901 m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::closeTabUI, this,_1));
902 m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this,_1));
903 m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1));
904 m_tabUI->newIncognitoTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this,_1));
905 m_tabUI->show(m_window.get());
906 m_tabUI->addTabItems(m_webEngine->getTabContents());
910 void SimpleUI::closeTabUI(const std::string& str)
913 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
918 void SimpleUI::newTabClicked(const std::string& str)
920 BROWSER_LOGD("%s", __func__);
921 switchViewToHomePage();
924 void SimpleUI::tabClicked(const tizen_browser::basic_webengine::TabId& tabId)
926 BROWSER_LOGD("%s", __func__);
930 void SimpleUI::handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation)
932 std::cerr<<"Web confirmation signal received"<<std::endl;
933 switch(webConfirmation->getConfirmationType()) {
934 case basic_webengine::WebConfirmation::ConfirmationType::Authentication:
936 basic_webengine::AuthenticationConfirmationPtr auth = std::dynamic_pointer_cast<basic_webengine::AuthenticationConfirmation, basic_webengine::WebConfirmation>(webConfirmation);
938 Evas_Object *popup_content = elm_layout_add(m_mainLayout);
939 std::string edjFilePath = EDJE_DIR;
940 edjFilePath.append("SimpleUI/AuthenticationPopup.edj");
941 Eina_Bool layoutSetResult = elm_layout_file_set(popup_content, edjFilePath.c_str(), "authentication_popup");
943 throw std::runtime_error("Layout file not found: " + edjFilePath);
946 elm_object_translatable_part_text_set(popup_content, "login_label", "Login");
947 elm_object_translatable_part_text_set(popup_content, "password_label", "Password");
949 elm_object_part_text_set(popup_content, "login_label", "Login");
950 elm_object_part_text_set(popup_content, "password_label", "Password");
953 Evas_Object *loginEntry = elm_entry_add(popup_content);
954 elm_object_part_content_set(popup_content, "login", loginEntry);
956 Evas_Object *passwordEntry = elm_entry_add(popup_content);
957 elm_object_part_content_set(popup_content, "password", passwordEntry);
959 SimplePopup *popup = SimplePopup::createPopup();
960 popup->setTitle("Authentication request");
961 popup->addButton(OK);
962 popup->addButton(CANCEL);
963 popup->setContent(popup_content);
964 std::shared_ptr<AuthenticationPopupData> popupData = std::make_shared<AuthenticationPopupData>();
965 popupData->loginEntry = loginEntry;
966 popupData->passwordEntry = passwordEntry;
967 popupData->auth = auth;
968 popup->setData(popupData);
969 popup->buttonClicked.connect(boost::bind(&SimpleUI::authPopupButtonClicked, this, _1, _2));
973 case basic_webengine::WebConfirmation::ConfirmationType::CertificateConfirmation:
975 webConfirmation->setResult(tizen_browser::basic_webengine::WebConfirmation::ConfirmationResult::Confirmed);
976 m_webEngine->confirmationResult(webConfirmation);
984 void SimpleUI::authPopupButtonClicked(PopupButtons button, std::shared_ptr<PopupData> popupData)
986 std::shared_ptr<AuthenticationPopupData> authPopupData = std::dynamic_pointer_cast<AuthenticationPopupData, PopupData>(popupData);
989 authPopupData->auth->setLogin(elm_entry_entry_get(authPopupData->loginEntry) ? elm_entry_entry_get(authPopupData->loginEntry) : "");
990 authPopupData->auth->setPassword(elm_entry_entry_get(authPopupData->passwordEntry) ? elm_entry_entry_get(authPopupData->passwordEntry) : "");
991 authPopupData->auth->setResult(basic_webengine::WebConfirmation::ConfirmationResult::Confirmed);
992 m_webEngine->confirmationResult(authPopupData->auth);
995 authPopupData->auth->setResult(basic_webengine::WebConfirmation::ConfirmationResult::Rejected);
996 m_webEngine->confirmationResult(authPopupData->auth);
1009 void SimpleUI::hideURIBar()
1011 evas_object_hide(m_simpleURI->getContent(m_mainLayout));
1012 evas_object_hide(rightButtonBar->getContent());
1013 evas_object_hide(leftButtonBar->getContent());
1014 elm_object_part_content_unset(m_mainLayout, "uri_entry");
1015 elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_left");
1016 elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_right");
1019 void SimpleUI::showURIBar()
1021 elm_object_part_content_unset(m_mainLayout, "uri_entry");
1022 elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_left");
1023 elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_right");
1024 elm_object_part_content_set(m_mainLayout, "uri_entry", m_simpleURI->getContent(m_mainLayout));
1025 elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_left", leftButtonBar->getContent());
1026 elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_right", rightButtonBar->getContent());
1027 evas_object_show(m_simpleURI->getContent(m_mainLayout));
1028 evas_object_show(leftButtonBar->getContent());
1029 evas_object_show(rightButtonBar->getContent());
1030 m_simpleURI->setFocus();
1034 void SimpleUI::hideWebView()
1036 evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view"));
1037 elm_object_part_content_unset(m_mainLayout, "web_view");
1040 void SimpleUI::hideMainUI()
1042 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1046 m_isHomePageActive = false;
1049 void SimpleUI::showMainUI()
1051 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1053 std::dynamic_pointer_cast
1054 <tizen_browser::base_ui::MainUI,tizen_browser::core::AbstractService>
1055 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.mainui"));
1058 m_mainUI->show(m_window.get());
1059 m_mainUI->addHistoryItems(getHistory());
1061 m_historyService->historyAllDeleted.connect(boost::bind(&tizen_browser::base_ui::MainUI::clearHistoryGenlist, m_mainUI.get()));
1062 m_mainUI->historyClicked.connect(boost::bind(&SimpleUI::onHistoryClicked, this,_1));
1063 m_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this,_1));
1064 m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this,_1));
1065 m_mainUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this,_1));
1066 m_isHomePageActive = true;
1069 void SimpleUI::showHistoryUI(const std::string& str)
1072 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1074 std::dynamic_pointer_cast
1075 <tizen_browser::base_ui::HistoryUI,tizen_browser::core::AbstractService>
1076 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyui"));
1077 M_ASSERT(m_historyUI);
1078 m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this,_1));
1079 m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onHistoryClicked, this,_1));
1080 m_historyUI->addHistoryItems(getHistory());
1081 m_historyUI->show(m_window.get());
1085 void SimpleUI::closeHistoryUI(const std::string& str)
1088 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1089 m_historyUI = nullptr;
1093 void SimpleUI::showSettingsUI(const std::string& str)
1096 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1099 std::dynamic_pointer_cast
1100 <tizen_browser::base_ui::SettingsUI,tizen_browser::core::AbstractService>
1101 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.settingsui"));
1102 M_ASSERT(m_settingsUI);
1103 m_settingsUI->closeSettingsUIClicked.disconnect_all_slots();
1104 m_settingsUI->closeSettingsUIClicked.connect(boost::bind(&SimpleUI::closeSettingsUI, this,_1));
1105 m_settingsUI->deleteSelectedDataClicked.disconnect_all_slots();
1106 m_settingsUI->deleteSelectedDataClicked.connect(boost::bind(&SimpleUI::settingsDeleteSelectedData, this,_1));
1107 m_settingsUI->resetMostVisitedClicked.disconnect_all_slots();
1108 m_settingsUI->resetMostVisitedClicked.connect(boost::bind(&SimpleUI::settingsResetMostVisited, this,_1));
1109 m_settingsUI->resetBrowserClicked.disconnect_all_slots();
1110 m_settingsUI->resetBrowserClicked.connect(boost::bind(&SimpleUI::settingsResetBrowser, this,_1));
1111 m_settingsUI->show(m_window.get());
1112 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1117 void SimpleUI::closeSettingsUI(const std::string& str)
1120 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1121 m_settingsUI.reset();
1125 void SimpleUI::showMoreMenu()
1128 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1129 bool current_tab_as_new_tab = isHomePageActive() || (m_historyService->getHistoryItemsCount() == 0);
1132 std::dynamic_pointer_cast
1133 <tizen_browser::base_ui::MoreMenuUI,tizen_browser::core::AbstractService>
1134 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui"));
1135 M_ASSERT(m_moreMenuUI);
1136 m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this,_1));
1137 m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this,_1));
1138 m_moreMenuUI->closeMoreMenuClicked.disconnect_all_slots();
1139 m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this,_1));
1140 m_moreMenuUI->AddBookmarkInput.disconnect_all_slots();
1141 m_moreMenuUI->AddBookmarkInput.connect(boost::bind(&SimpleUI::addToBookmarks, this,_1));
1142 m_moreMenuUI->BookmarkFolderCreated.disconnect_all_slots();
1143 m_moreMenuUI->BookmarkFolderCreated.connect(boost::bind(&SimpleUI::NewFolder, this,_1,_2,_3));
1144 m_moreMenuUI->show(m_window.get());
1145 m_moreMenuUI->getBookmarkFolderList(getBookmarkFolders());
1146 m_moreMenuUI->showCurrentTab(current_tab_as_new_tab ? nullptr : m_historyService->getHistoryItems().front());
1147 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1152 void SimpleUI::closeMoreMenu(const std::string& str)
1155 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1156 m_moreMenuUI.reset() ;
1160 void SimpleUI::showBookmarkManagerMenu()
1163 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1164 if(!m_bookmarkManagerUI){
1165 m_bookmarkManagerUI =
1166 std::dynamic_pointer_cast
1167 <tizen_browser::base_ui::BookmarkManagerUI,tizen_browser::core::AbstractService>
1168 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkmanagerui"));
1169 M_ASSERT(m_bookmarkManagerUI);
1170 m_bookmarkManagerUI->closeBookmarkManagerClicked.disconnect_all_slots();
1171 m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::closeBookmarkManagerMenu, this,_1));
1172 m_bookmarkManagerUI->saveFolderClicked.disconnect_all_slots();
1173 m_bookmarkManagerUI->saveFolderClicked.connect(boost::bind(&SimpleUI::saveFolder, this,_1,_2,_3));
1174 m_bookmarkManagerUI->bookmarkFolderClicked.disconnect_all_slots();
1175 m_bookmarkManagerUI->bookmarkFolderClicked.connect(boost::bind(&SimpleUI::updateBookmakMangaerGenGrid, this,_1));
1176 m_bookmarkManagerUI->show(m_window.get());
1177 m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders());
1178 m_bookmarkManagerUI->showTopContent();
1183 void SimpleUI::updateBookmakMangaerGenGrid(int folder_id)
1186 m_bookmarkManagerUI->updateGengrid();
1187 m_bookmarkManagerUI->addBookmarkItems(getBookmarks(folder_id));
1188 m_bookmarkManagerUI->showTopContent();
1192 void SimpleUI::closeBookmarkManagerMenu(std::string& str)
1195 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1196 m_bookmarkManagerUI.reset();
1200 void SimpleUI::openLinkFromPopup(const std::string &uri)
1206 void SimpleUI::hideHistory()
1211 void SimpleUI::settingsPointerModeSwitch(bool newState)
1213 BROWSER_LOGD("%s: Setting Pointer mode to:%s", __func__, (newState ? "true" : "false"));
1216 void SimpleUI::settingsPrivateModeSwitch(bool newState)
1218 BROWSER_LOGD("%s: Setting Private mode to: %s", __func__, (newState ? "true" : "false"));
1219 m_webEngine->setPrivateMode(newState);
1220 BROWSER_LOGD("[%s:%d] webEngine private mode: %s", __PRETTY_FUNCTION__, __LINE__, (m_webEngine->isPrivateMode() ? "true" : "false"));
1223 void SimpleUI::settingsDeleteSelectedData(const std::string& str)
1225 BROWSER_LOGD("[%s]: Deleting Hisory", __func__);
1226 SimplePopup *popup = SimplePopup::createPopup();
1227 popup->setTitle("Delete selected data");
1228 popup->addButton(OK);
1229 popup->addButton(CANCEL);
1230 popup->setMessage("Are you sure you want to delete all selected data?");
1231 std::shared_ptr<EntryPopupData> popupData = std::make_shared<EntryPopupData>();
1232 popupData->text = str;
1233 popup->setData(popupData);
1234 popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteSelectedDataButton, this, _1, _2));
1238 void SimpleUI::onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr< PopupData > popupData)
1241 BROWSER_LOGD("[%s]: OK", __func__);
1242 std::string dataText = std::static_pointer_cast<EntryPopupData>(popupData)->text;
1243 BROWSER_LOGD("[%s]: TYPE : %s", __func__, dataText.c_str());
1244 if (dataText.find("CACHE") != std::string::npos)
1245 m_webEngine->clearPrivateData();
1246 if (dataText.find("COOKIES") != std::string::npos)
1247 m_webEngine->clearPrivateData();
1248 if (dataText.find("HISTORY") != std::string::npos)
1249 m_historyService->clearAllHistory();
1250 //webTitleBar->removeFavIcon();
1251 //webTitleBar->show("History deleted");
1255 void SimpleUI::settingsResetMostVisited(const std::string& str)
1257 BROWSER_LOGD("[%s]: Deleting Hisory", __func__);
1258 SimplePopup *popup = SimplePopup::createPopup();
1259 popup->setTitle("Delete most visited");
1260 popup->addButton(OK);
1261 popup->addButton(CANCEL);
1262 popup->setMessage("Are you sure you want to delete most visited sites?");
1263 popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteMostVisitedButton, this, _1, _2));
1267 void SimpleUI::onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/)
1270 BROWSER_LOGD("[%s]: OK", __func__);
1271 BROWSER_LOGD("[%s]: Deleting most visited", __func__);
1272 /*m_historyService->clearAllHistory();
1273 webTitleBar->removeFavIcon();
1274 webTitleBar->show("History deleted");*/
1278 void SimpleUI::settingsResetBrowser(const std::string& str)
1280 BROWSER_LOGD("[%s]: Deleting Hisory", __func__);
1281 SimplePopup *popup = SimplePopup::createPopup();
1282 popup->setTitle("Reset browser");
1283 popup->addButton(OK);
1284 popup->addButton(CANCEL);
1285 popup->setMessage("Are you sure you want to reset browser?");
1286 popup->buttonClicked.connect(boost::bind(&SimpleUI::onResetBrowserButton, this, _1, _2));
1290 void SimpleUI::onResetBrowserButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/)
1293 BROWSER_LOGD("[%s]: OK", __func__);
1294 BROWSER_LOGD("[%s]: Resetting browser", __func__);
1295 /*webTitleBar->removeFavIcon();
1296 webTitleBar->show("History deleted");*/
1300 void SimpleUI::tabLimitPopupButtonClicked(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/)
1302 if(button == CLOSE_TAB){
1303 BROWSER_LOGD("[%s]: CLOSE TAB", __func__);
1308 void SimpleUI::tabCreated()
1310 int tabs = m_webEngine->tabsCount();
1312 if(tabs > m_tabLimit)
1314 SimplePopup *popup = SimplePopup::createPopup();
1315 popup->setTitle("Too many tabs open");
1316 popup->addButton(CONTINUE);
1317 popup->addButton(CLOSE_TAB);
1318 popup->setMessage("Browser might slow down. Are you sure you want to continue?");
1319 popup->buttonClicked.connect(boost::bind(&SimpleUI::tabLimitPopupButtonClicked, this, _1, _2));
1322 elm_object_part_text_set(rightButtonBar->getContent(), "tabs_number", (boost::format("%1%") % tabs).str().c_str());
1325 void SimpleUI::updateView() {
1326 int tabs = m_webEngine->tabsCount();
1327 BROWSER_LOGD("[%s] Opened tabs: %d", __func__, tabs);
1329 switchViewToHomePage();
1330 elm_object_part_text_set(rightButtonBar->getContent(), "tabs_number", "");
1332 if (!isHomePageActive()) {
1333 updateBrowserView();
1335 elm_object_part_text_set(rightButtonBar->getContent(), "tabs_number", (boost::format("%1%") % tabs).str().c_str());
1339 void SimpleUI::tabClosed(const tizen_browser::basic_webengine::TabId& id) {
1343 void SimpleUI::onNetworkError()
1345 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1346 if(!m_networkErrorPopup){
1347 m_networkErrorPopup = SimplePopup::createPopup();
1348 m_networkErrorPopup->setTitle("Network Error");
1349 m_networkErrorPopup->addButton(CONNECT);
1350 m_networkErrorPopup->addButton(CANCEL);
1351 m_networkErrorPopup->setMessage("Network is disconnected. Please check the connection.");
1352 m_networkErrorPopup->buttonClicked.connect(boost::bind(&SimpleUI::onNetErrorButtonPressed, this, _1, _2));
1353 m_networkErrorPopup->show();
1357 void SimpleUI::onNetErrorButtonPressed(PopupButtons, std::shared_ptr< PopupData >)
1359 m_networkErrorPopup = 0;
1362 void SimpleUI::onNetworkConnected()
1364 if(m_networkErrorPopup){
1365 delete m_networkErrorPopup;
1366 m_networkErrorPopup = 0;
1371 void SimpleUI::showProgressBar()
1373 elm_object_signal_emit(m_mainLayout, "show_progressbar_bg", "ui");
1374 elm_object_part_content_set(m_mainLayout,"progress_bar",m_progressBar);
1377 void SimpleUI::hideProgressBar()
1379 elm_object_signal_emit(m_mainLayout, "hide_progressbar_bg", "ui");
1380 elm_progressbar_value_set(m_progressBar,0.0);
1381 elm_object_part_content_unset(m_mainLayout,"progress_bar");
1382 evas_object_hide(m_progressBar);
1385 void SimpleUI::searchWebPage(std::string &text, int flags)
1387 m_webEngine->searchOnWebsite(text, flags);
1390 void SimpleUI::favicon_clicked(void *data, Evas_Object */*obj*/, const char */*emission*/, const char */*source*/)
1392 BROWSER_LOGD("[%s],", __func__);
1393 SimpleUI *self = reinterpret_cast<SimpleUI*>(data);
1394 if (!self->isHomePageActive() && !self->isErrorPageActive())
1396 self->m_simpleURI->clearFocus();
1400 void SimpleUI::addToBookmarks(int folder_id)
1401 { BROWSER_LOGD("[%s,%d],", __func__, __LINE__);
1402 if (m_favoriteService)
1403 { if( m_webEngine && !m_webEngine->getURI().empty())
1404 { m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(),
1405 m_webEngine->getSnapshotData(373, 240),
1406 m_webEngine->getFavicon(),(unsigned int)folder_id);
1411 void SimpleUI::saveFolder(const char* title,int folder_id, int by_operator)
1412 { BROWSER_LOGD("[%s,%d],", __func__, __LINE__);
1414 if (m_favoriteService)
1415 m_favoriteService->save_folder(title, &id, folder_id, by_operator);
1417 { BROWSER_LOGD("[%s], Added New Folder", __func__);
1420 if(m_bookmarkManagerUI)
1421 { m_bookmarkManagerUI->updateGengrid();
1422 m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders());
1429 void SimpleUI::NewFolder(const char* title,int folder_id, int by_operator)
1430 { BROWSER_LOGD("[%s,%d],", __func__, __LINE__);
1432 if (m_favoriteService)
1433 m_favoriteService->save_folder(title, &id, folder_id, by_operator);
1435 { BROWSER_LOGD("[%s], Added New Folder", __func__);
1437 if (m_favoriteService)
1438 { if( m_webEngine && !m_webEngine->getURI().empty())
1439 { m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(),
1440 m_webEngine->getSnapshotData(373, 240),
1441 m_webEngine->getFavicon(),(unsigned int)id);
1446 void SimpleUI::deleteBookmark(void)
1448 if (m_favoriteService)
1449 m_favoriteService->deleteBookmark(m_webEngine->getURI());