--- /dev/null
+/*
+ * Copyright (c) 2016 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.
+ */
+
+/*
+ * AbstractContextMenu.h
+ *
+ * Created on: May 20, 2016
+ * Author: m.kawonczyk@samsung.com
+ */
+
+#ifndef __ABSTRACT_CONTEXT_MENU_H__
+#define __ABSTRACT_CONTEXT_MENU_H__
+
+#include <efl_extension.h>
+
+namespace tizen_browser
+{
+namespace interfaces
+{
+
+/**
+ * @brief This interface defines rotatable object,
+ * which reacts on mobile device oriantation change.
+ */
+class AbstractContextMenu
+{
+public:
+ /**
+ * @brief Abstract method for showing context menu.
+ */
+ virtual void showContextMenu() = 0;
+
+ /**
+ * @brief Boost signal, returns main window pointer.
+ * Class which implements AbstractContextMenu has to connect this signal in SimpleUI class.
+ */
+ boost::signals2::signal<Evas_Object* ()> getWindow;
+
+protected:
+ static void _cm_dismissed(void *, Evas_Object * obj, void *)
+ {
+ evas_object_del(obj);
+ obj = nullptr;
+ }
+
+ /**
+ * @brief Method for creating ctxpopup before appending items.
+ */
+ void createContextMenu(Evas_Object* parent)
+ {
+ if (m_ctxpopup)
+ _cm_dismissed(nullptr, m_ctxpopup, nullptr);
+
+ m_ctxpopup = elm_ctxpopup_add(parent);
+ elm_object_style_set(m_ctxpopup, "more/default");
+
+ eext_object_event_callback_add(m_ctxpopup, EEXT_CALLBACK_BACK, eext_ctxpopup_back_cb, nullptr);
+ eext_object_event_callback_add(m_ctxpopup, EEXT_CALLBACK_MORE, eext_ctxpopup_back_cb, nullptr);
+ evas_object_smart_callback_add(m_ctxpopup, "dismissed", _cm_dismissed, nullptr);
+ }
+
+ /**
+ * @brief Method for aligning ctxpopup after appending items.
+ */
+ void alignContextMenu(Evas_Object* parent)
+ {
+ Evas_Coord w, h;
+ evas_object_geometry_get(parent, NULL, NULL, &w, &h);
+
+ elm_ctxpopup_direction_priority_set(m_ctxpopup, ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_UP,
+ ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_UP);
+ evas_object_move(m_ctxpopup, w/2, h);
+ evas_object_show(m_ctxpopup);
+ }
+
+ Evas_Object *m_ctxpopup;
+};
+
+}//namespace interfaces
+}//namespace tizen_browser
+
+#endif /* __ABSTRACT_CONTEXT_MENU_H__ */
}
#endif
+void BookmarkManagerUI::showContextMenu()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ boost::optional<Evas_Object*> window = getWindow();
+ if (window) {
+ createContextMenu(*window);
+
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_SK_DELETE"), nullptr, _cm_delete_clicked, this);
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_SHARE"), nullptr, _cm_share_clicked, this);
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_REORDER_ABB"), nullptr, _cm_reorder_clicked, this);
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_BUTTON_EDIT"), nullptr, _cm_edit_clicked, this);
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_SK3_CREATE_FOLDER"), nullptr, _cm_create_folder_clicked, this);
+
+ alignContextMenu(*window);
+ } else
+ BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
+}
+
+void BookmarkManagerUI::_cm_delete_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ BookmarkManagerUI* bookmarkManagerUI = static_cast<BookmarkManagerUI*>(data);
+ _cm_dismissed(nullptr, bookmarkManagerUI->m_ctxpopup, nullptr);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void BookmarkManagerUI::_cm_share_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ BookmarkManagerUI* bookmarkManagerUI = static_cast<BookmarkManagerUI*>(data);
+ _cm_dismissed(nullptr, bookmarkManagerUI->m_ctxpopup, nullptr);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void BookmarkManagerUI::_cm_reorder_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ BookmarkManagerUI* bookmarkManagerUI = static_cast<BookmarkManagerUI*>(data);
+ _cm_dismissed(nullptr, bookmarkManagerUI->m_ctxpopup, nullptr);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void BookmarkManagerUI::_cm_edit_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ BookmarkManagerUI* bookmarkManagerUI = static_cast<BookmarkManagerUI*>(data);
+ _cm_dismissed(nullptr, bookmarkManagerUI->m_ctxpopup, nullptr);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void BookmarkManagerUI::_cm_create_folder_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ BookmarkManagerUI* bookmarkManagerUI = static_cast<BookmarkManagerUI*>(data);
+ _cm_dismissed(nullptr, bookmarkManagerUI->m_ctxpopup, nullptr);
+ bookmarkManagerUI->newFolderItemClicked();
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
void BookmarkManagerUI::addCustomFolders(services::SharedBookmarkFolderList folders)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
#include <Evas.h>
#include <boost/signals2/signal.hpp>
+#include "AbstractContextMenu.h"
#include "AbstractUIComponent.h"
#if PROFILE_MOBILE
#include "AbstractRotatable.h"
namespace base_ui{
class BROWSER_EXPORT BookmarkManagerUI
- : public tizen_browser::interfaces::AbstractUIComponent
+ : public interfaces::AbstractContextMenu
+ , public tizen_browser::interfaces::AbstractUIComponent
, public tizen_browser::core::AbstractService
#if PROFILE_MOBILE
, public tizen_browser::interfaces::AbstractRotatable
void addNewFolder();
virtual void orientationChanged() override;
#endif
+ //AbstractContextMenu interface implementation
+ virtual void showContextMenu() override;
+
void addCustomFolders(services::SharedBookmarkFolderList folders);
void addCustomFolders(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> >);
static void _grid_content_delete(void *data, Evas_Object *obj);
static char* _grid_all_folder_title_text_get(void *data, Evas_Object *obj, const char *part);
static char* _grid_folder_title_text_get(void *data, Evas_Object *obj, const char *part);
+ static void _cm_delete_clicked(void*, Evas_Object*, void*);
+ static void _cm_share_clicked(void*, Evas_Object*, void*);
+ static void _cm_reorder_clicked(void*, Evas_Object*, void*);
+ static void _cm_edit_clicked(void*, Evas_Object*, void*);
+ static void _cm_create_folder_clicked(void*, Evas_Object*, void*);
std::map<std::string,Elm_Object_Item*> m_map_bookmark;
std::string m_edjFilePath;
#include <string.h>
#include <AbstractMainWindow.h>
+#include "app_i18n.h"
#include "HistoryUI.h"
#include "ServiceManager.h"
#include "BrowserLogger.h"
m_historyDaysListManager->clear();
}
+void HistoryUI::showContextMenu()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ boost::optional<Evas_Object*> window = getWindow();
+ if (window) {
+ createContextMenu(*window);
+
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_SK_DELETE"), nullptr, _cm_delete_clicked, this);
+
+ alignContextMenu(*window);
+ } else
+ BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
+}
+
+void HistoryUI::_cm_delete_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ HistoryUI* historyUI = static_cast<HistoryUI*>(data);
+ _cm_dismissed(nullptr, historyUI->m_ctxpopup, nullptr);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
}
}
#include "HistoryPeriod.h"
#include <services/HistoryService/HistoryItemTypedef.h>
+#include "AbstractContextMenu.h"
#include "AbstractUIComponent.h"
#include "AbstractService.h"
#include "ServiceFactory.h"
typedef std::shared_ptr<HistoryDeleteManager> HistoryDeleteManagerPtr;
class BROWSER_EXPORT HistoryUI
- : public tizen_browser::interfaces::AbstractUIComponent
+ : public interfaces::AbstractContextMenu
+ , public tizen_browser::interfaces::AbstractUIComponent
, public tizen_browser::core::AbstractService
{
public:
void removeHistoryItem(const std::string& uri);
Evas_Object* createActionBar(Evas_Object* history_layout);
void addItems();
+
+ //AbstractContextMenu interface implementation
+ virtual void showContextMenu() override;
+
boost::signals2::signal<void ()> closeHistoryUIClicked;
boost::signals2::signal<void ()> clearHistoryClicked;
boost::signals2::signal<void (std::shared_ptr<const std::vector<int>> itemIds)> signalDeleteHistoryItems;
static Evas_Object* _listActionBarContentGet(void *data, Evas_Object *obj, const char *part);
static void _clearHistory_clicked(void *data, Evas_Object *obj, void *event_info);
static void _close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+ static void _cm_delete_clicked(void*, Evas_Object*, void*);
std::string m_edjFilePath;
Evas_Object *m_parent;
m_webPageUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this));
m_webPageUI->focusWebView.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::setFocus, m_webEngine.get()));
m_webPageUI->unfocusWebView.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::clearFocus, m_webEngine.get()));
+ m_webPageUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
+ m_webPageUI->isBookmark.connect(boost::bind(&SimpleUI::checkBookmark, this));
+ m_webPageUI->showBookmarkFlowUI.connect(boost::bind(&SimpleUI::showBookmarkFlowUI, this, _1));
+ m_webPageUI->showFindOnPageUI.connect(boost::bind(&SimpleUI::showFindOnPageUI, this, std::string()));
+ m_webPageUI->showSettingsUI.connect(boost::bind(&SimpleUI::showSettingsUI, this));
#if PROFILE_MOBILE
m_webPageUI->hideMoreMenu.connect(boost::bind(&SimpleUI::closeMoreMenu, this));
m_webPageUI->getURIEntry().mobileEntryFocused.connect(boost::bind(&WebPageUI::mobileEntryFocused, m_webPageUI));
m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1));
m_tabUI->closeTabsClicked.connect(boost::bind(&SimpleUI::closeTabsClicked, this,_1));
m_tabUI->isIncognito.connect(boost::bind(&SimpleUI::isIncognito, this, _1));
+ m_tabUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
#if PROFILE_MOBILE
m_tabUI->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
bool desktop_ua = false;
m_historyUI->signalDeleteHistoryItems.connect(boost::bind(&SimpleUI::onDeleteHistoryItems, this, _1));
m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this));
m_historyUI->signalHistoryItemClicked.connect(boost::bind(&SimpleUI::onOpenURL, this, _1, _2, desktop_ua));
+ m_historyUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
M_ASSERT(m_settingsUI.get());
m_settingsUI->closeSettingsUIClicked.connect(boost::bind(&SimpleUI::closeSettingsUI, this));
m_bookmarkManagerUI->customFolderClicked.connect(boost::bind(&SimpleUI::onBookmarkCustomFolderClicked, this, _1));
m_bookmarkManagerUI->allFolderClicked.connect(boost::bind(&SimpleUI::onBookmarkAllFolderClicked, this));
m_bookmarkManagerUI->specialFolderClicked.connect(boost::bind(&SimpleUI::onBookmarkSpecialFolderClicked, this));
+ m_bookmarkManagerUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
#if PROFILE_MOBILE
m_bookmarkManagerUI->newFolderItemClicked.connect(boost::bind(&SimpleUI::onNewFolderClicked, this));
m_bookmarkManagerUI->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
#else
void SimpleUI::onMenuButtonPressed()
{
- BROWSER_LOGD("[%s]", __func__);
- showMoreMenu();
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ interfaces::AbstractContextMenu *view = dynamic_cast<interfaces::AbstractContextMenu*>(m_viewManager.topOfStack());
+ if (view)
+ view->showContextMenu();
}
void SimpleUI::onRotation()
}
#endif
+Evas_Object* SimpleUI::getMainWindow()
+{
+ return main_window;
+}
+
void SimpleUI::reloadEnable(bool enable)
{
m_webPageUI->setReloadButtonEnabled(enable);
#include <Evas.h>
+#include "AbstractContextMenu.h"
#include "AbstractMainWindow.h"
#include "AbstractService.h"
#include "AbstractFavoriteService.h"
void closeSettingsUI();
void showBookmarkFlowUI(bool state);
+ void showFindOnPageUI(const std::string& str);
#if PROFILE_MOBILE
void showCertificatePopup();
void showCertificatePopup(const std::string& host, const std::string& pem, services::CertificateContents::HOST_TYPE type);
void showUnsecureConnectionPopup();
void closeBookmarkFlowUI();
- void showFindOnPageUI(const std::string& str);
void findWord(const struct FindData& fdata);
void closeFindOnPageUI();
int getRotation();
static void __orientation_changed(void* data, Evas_Object*, void*);
#endif
+ Evas_Object* getMainWindow();
void closeBookmarkDetailsUI();
void closeBookmarkManagerUI();
void showBookmarkManagerUI();
}
#endif
+void TabUI::showContextMenu()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ boost::optional<Evas_Object*> window = getWindow();
+ if (window) {
+ createContextMenu(*window);
+
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_BODY_SYNC_OPEN_PAGES"), nullptr, _cm_sync_clicked, this);
+ elm_ctxpopup_item_append(m_ctxpopup, "Secret mode security", nullptr, _cm_secret_clicked, this);
+ if (elm_gengrid_items_count(m_gengrid) != 0)
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_CLOSE_ALL"), nullptr, _cm_close_clicked, this);
+ alignContextMenu(*window);
+ } else
+ BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
+}
+
+void TabUI::_cm_sync_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ TabUI* tabUI = static_cast<TabUI*>(data);
+ _cm_dismissed(nullptr, tabUI->m_ctxpopup, nullptr);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void TabUI::_cm_secret_clicked(void* data, Evas_Object*, void*)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ TabUI* tabUI = static_cast<TabUI*>(data);
+ _cm_dismissed(nullptr, tabUI->m_ctxpopup, nullptr);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void TabUI::_cm_close_clicked(void* data, Evas_Object*, void*)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ TabUI* tabUI = static_cast<TabUI*>(data);
+ _cm_dismissed(nullptr, tabUI->m_ctxpopup, nullptr);
+ Elm_Object_Item* it = elm_gengrid_first_item_get(tabUI->m_gengrid);
+ while (it) {
+ TabItemData *item = (TabItemData *)elm_object_item_data_get(it);
+ tabUI->closeTabsClicked(item->item->getId());
+ it = elm_gengrid_item_next_get(it);
+ }
+ //Todo: set empty state
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
Evas_Object* TabUI::createTopButtons(Evas_Object* parent)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
#include <Evas.h>
#include <boost/signals2/signal.hpp>
+#include "AbstractContextMenu.h"
#include "AbstractUIComponent.h"
#include "AbstractService.h"
#include "ServiceFactory.h"
namespace base_ui{
class BROWSER_EXPORT TabUI
- : public tizen_browser::interfaces::AbstractUIComponent
+ : public tizen_browser::interfaces::AbstractContextMenu
+ , public tizen_browser::interfaces::AbstractUIComponent
, public tizen_browser::core::AbstractService
#if PROFILE_MOBILE
, public tizen_browser::interfaces::AbstractRotatable
virtual void orientationChanged() override;
#endif
+ //AbstractContextMenu interface implementation
+ virtual void showContextMenu() override;
+
boost::signals2::signal<void (const tizen_browser::basic_webengine::TabId&)> tabClicked;
boost::signals2::signal<void ()> newTabClicked;
boost::signals2::signal<void ()> newIncognitoTabClicked;
#endif
static void _focus_in(void * data, Evas*, Evas_Object * obj, void * event_info);
static Eina_Bool _ready(void *data);
+ static void _cm_sync_clicked(void*, Evas_Object*, void*);
+ static void _cm_secret_clicked(void*, Evas_Object*, void*);
+ static void _cm_close_clicked(void*, Evas_Object*, void*);
void createTabUILayout();
Evas_Object* createActionBar(Evas_Object* parent);
}
#endif
+void WebPageUI::showContextMenu()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+ boost::optional<Evas_Object*> window = getWindow();
+ if (window) {
+ createContextMenu(*window);
+
+ if (m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
+ //TODO: Add translation
+ elm_ctxpopup_item_append(m_ctxpopup, "Edit Quick access", nullptr, _cm_edit_qa_clicked, this);
+ } else if (m_statesMgr->equals(WPUState::MAIN_WEB_PAGE)) {
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_SHARE"), nullptr, _cm_share_clicked, this);
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_FIND_ON_PAGE"), nullptr, _cm_find_on_page_clicked, this);
+
+ boost::optional<bool> bookmark = isBookmark();
+ if (bookmark) {
+ //TODO: Add translation
+ elm_ctxpopup_item_append(m_ctxpopup, *bookmark ? "Remove from bookmarks" : "Add to Bookmarks",
+ nullptr, _cm_bookmark_flow_clicked, this);
+ } else
+ BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
+
+ //TODO: "dont add this item if it is already in a quick access
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_ADD_TO_QUICK_ACCESS"), nullptr, _cm_add_to_qa_clicked, this);
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_BODY_DESKTOP_VIEW"), nullptr, _cm_desktop_view_page_clicked, this);
+ } else {
+ BROWSER_LOGW("[%s] State not handled, context menu not shown", __PRETTY_FUNCTION__);
+ return;
+ }
+
+ elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_BODY_SETTINGS"), nullptr, _cm_settings_clicked, this);
+ alignContextMenu(*window);
+ } else
+ BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
+}
+
+void WebPageUI::_cm_edit_qa_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
+ _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void WebPageUI::_cm_share_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
+ _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void WebPageUI::_cm_find_on_page_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
+ _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->showFindOnPageUI();
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void WebPageUI::_cm_bookmark_flow_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
+ _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+
+ boost::optional<bool> bookmark = webPageUI->isBookmark();
+ if (bookmark)
+ webPageUI->showBookmarkFlowUI(*bookmark);
+ else
+ BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void WebPageUI::_cm_add_to_qa_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
+ _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void WebPageUI::_cm_desktop_view_page_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
+ _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void WebPageUI::_cm_settings_clicked(void* data, Evas_Object*, void* )
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ if (data != nullptr) {
+ WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
+ _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+ webPageUI->showSettingsUI();
+ } else
+ BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
void WebPageUI::createLayout()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
#include <Evas.h>
#include <boost/signals2/signal.hpp>
+#include "AbstractContextMenu.h"
#include "AbstractService.h"
#include "AbstractUIComponent.h"
#include "AbstractRotatable.h"
typedef std::shared_ptr<UrlHistoryList> UrlHistoryPtr;
class BROWSER_EXPORT WebPageUI
- : public tizen_browser::core::AbstractService
+ : public interfaces::AbstractContextMenu
+ , public tizen_browser::core::AbstractService
, public tizen_browser::interfaces::AbstractUIComponent
#if PROFILE_MOBILE
, public tizen_browser::interfaces::AbstractRotatable
#if PROFILE_MOBILE
virtual void orientationChanged() override;
#endif
+ //AbstractContextMenu interface implementation
+ virtual void showContextMenu() override;
+
void loadStarted();
void progressChanged(double progress);
void loadFinished();
boost::signals2::signal<void ()> focusWebView;
boost::signals2::signal<void ()> unfocusWebView;
+ //AbstractContextMenu signals
+ boost::signals2::signal<bool ()> isBookmark;
+ boost::signals2::signal<void (bool)> showBookmarkFlowUI;
+ boost::signals2::signal<void ()> showFindOnPageUI;
+ boost::signals2::signal<void ()> showSettingsUI;
+
private:
static void faviconClicked(void* data, Evas_Object* obj, const char* emission, const char* source);
static Eina_Bool _cb_down_pressed_on_urlbar(void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info);
#if PROFILE_MOBILE && GESTURE
static Evas_Event_Flags _gesture_move(void *data, void *event_info);
#endif
+ static void _cm_edit_qa_clicked(void*, Evas_Object*, void*);
+ static void _cm_share_clicked(void*, Evas_Object*, void*);
+ static void _cm_find_on_page_clicked(void*, Evas_Object*, void*);
+ static void _cm_bookmark_flow_clicked(void*, Evas_Object*, void*);
+ static void _cm_add_to_qa_clicked(void*, Evas_Object*, void*);
+ static void _cm_desktop_view_page_clicked(void*, Evas_Object*, void*);
+ static void _cm_settings_clicked(void*, Evas_Object*, void*);
void createLayout();
void createErrorLayout();