m_webPageUI->getURIEntry().uriEntryEditingChanged.connect(boost::bind(&SimpleUI::onURLEntryEdited, this));
m_webPageUI->backPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
m_webPageUI->backPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::back, m_webEngine.get()));
+ m_webPageUI->backPage.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
m_webPageUI->reloadPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
m_webPageUI->showTabUI.connect(boost::bind(&SimpleUI::showTabUI, this));
m_webPageUI->showMoreMenu.connect(boost::bind(&SimpleUI::showMoreMenu, this));
m_webPageUI->forwardPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::forward, m_webEngine.get()));
+ m_webPageUI->forwardPage.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
m_webPageUI->stopLoadingPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::stopLoading, m_webEngine.get()));
+ m_webPageUI->stopLoadingPage.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
m_webPageUI->reloadPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::reload, m_webEngine.get()));
+ m_webPageUI->reloadPage.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
m_webPageUI->showQuickAccess.connect(boost::bind(&SimpleUI::showQuickAccess, this));
m_webPageUI->hideQuickAccess.connect(boost::bind(&QuickAccess::hideUI, m_quickAccess));
m_webPageUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this));
-
+ m_webPageUI->showZoomNavigation.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
M_ASSERT(m_quickAccess.get());
m_quickAccess->getDetailPopup().openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2));
M_ASSERT(m_tabUI.get());
m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::closeTabUI, this));
+ m_tabUI->closeTabUIClicked.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this));
m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::settingsPrivateModeSwitch, this, false));
m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1));
M_ASSERT(m_historyUI.get());
m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryClicked, this));
m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this));
+ m_historyUI->closeHistoryUIClicked.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
// desktop mode as default
m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, true));
m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this));
m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this));
m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this));
+ m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
m_moreMenuUI->switchToMobileMode.connect(boost::bind(&SimpleUI::switchToMobileMode, this));
m_moreMenuUI->switchToDesktopMode.connect(boost::bind(&SimpleUI::switchToDesktopMode, this));
m_moreMenuUI->addToBookmarkClicked.connect(boost::bind(&SimpleUI::addToBookmarks, this, _1));
M_ASSERT(m_bookmarkManagerUI.get());
m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::closeBookmarkManagerUI, this));
+ m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
m_bookmarkManagerUI->bookmarkItemClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1));
M_ASSERT(m_zoomUI.get());
m_zoomUI->setZoom.connect(boost::bind(&SimpleUI::setZoomFactor, this, _1));
+ m_zoomUI->getZoom.connect(boost::bind(&SimpleUI::getZoomFactor, this));
m_zoomUI->scrollView.connect(boost::bind(&SimpleUI::scrollView, this, _1, _2));
}
m_webEngine->uriChanged.connect(boost::bind(&URIEntry::changeUri, &m_webPageUI->getURIEntry(), _1));
m_webEngine->uriChanged.connect(boost::bind(&MoreMenuUI::setURL, m_moreMenuUI.get(), _1));
m_webEngine->uriOnTabChanged.connect(boost::bind(&SimpleUI::checkTabId,this,_1));
- m_webEngine->uriOnTabChanged.connect(boost::bind(&SimpleUI::closeZoomUI, this));
m_webEngine->webViewClicked.connect(boost::bind(&URIEntry::clearFocus, &m_webPageUI->getURIEntry()));
m_webEngine->backwardEnableChanged.connect(boost::bind(&WebPageUI::setBackButtonEnabled, m_webPageUI.get(), _1));
m_webEngine->forwardEnableChanged.connect(boost::bind(&WebPageUI::setForwardButtonEnabled, m_webPageUI.get(), _1));
}
BROWSER_LOGD("[%s:%d] swiching to web_view ", __PRETTY_FUNCTION__, __LINE__);
switchViewToWebPage();
+ m_zoomUI->showNavigation();
}
bool SimpleUI::isErrorPageActive()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
M_ASSERT(m_zoomUI);
- m_webPageUI->showTabUI.disconnect(boost::bind(&SimpleUI::closeZoomUI, this));
- m_webPageUI->showMoreMenu.disconnect(boost::bind(&SimpleUI::closeZoomUI, this));
m_zoomUI->hideUI();
}
void SimpleUI::setZoomFactor(int level)
{
+ BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
m_webEngine->setZoomFactor(level);
}
+int SimpleUI::getZoomFactor()
+{
+ BROWSER_LOGD("[%s:%d] %d", __PRETTY_FUNCTION__, __LINE__, m_webEngine->getZoomFactor());
+ return m_webEngine->getZoomFactor();
+}
+
void SimpleUI::scrollView(const int& dx, const int& dy)
{
m_webEngine->scrollView(dx, dy);
void ZoomUI::showUI()
{
evas_object_show(m_layout);
- evas_object_show(m_nav_layout);
+ evas_object_show(m_zoom_menu);
evas_object_show(m_zoom_slider);
+ m_keyDownHandler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_down_cb, this);
+ m_keyUpHandler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_up_cb, this);
+ int zoomFactor = *(getZoom());
+ elm_slider_value_set(m_zoom_slider, calculateSliderValue(zoomFactor));
}
void ZoomUI::hideUI()
{
evas_object_hide(m_zoom_slider);
evas_object_hide(m_nav_layout);
+ evas_object_hide(m_zoom_menu);
evas_object_hide(m_layout);
+ ecore_event_handler_del(m_keyDownHandler);
+ ecore_event_handler_del(m_keyUpHandler);
}
void ZoomUI::show(Evas_Object* parent)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
init(parent);
- createLayout(parent);
+ if (!m_layout)
+ createLayout(parent);
showUI();
+ elm_object_focus_set(m_zoom_slider, EINA_TRUE);
+}
+
+void ZoomUI::showNavigation()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ M_ASSERT(m_nav_layout);
+ int zoomFactor = *(getZoom());
+ if (zoomFactor > ZOOM_DEFAULT)
+ evas_object_show(m_nav_layout);
}
void ZoomUI::createLayout(Evas_Object *parent)
elm_layout_file_set(m_layout, m_edjFilePath.c_str(), "zoom-layout");
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);
-
createZoomSlider();
createNavigationButtons();
}
void ZoomUI::createZoomSlider()
{
- m_zoom_slider = elm_slider_add(m_layout);
+ m_zoom_menu = elm_layout_add(m_layout);
+ elm_layout_file_set(m_zoom_menu, m_edjFilePath.c_str(), "zoom-menu");
+ evas_object_size_hint_weight_set(m_zoom_menu, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(m_zoom_menu, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ m_zoom_slider = elm_slider_add(m_zoom_menu);
evas_object_size_hint_weight_set(m_zoom_slider, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(m_zoom_slider, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_smart_callback_add(m_zoom_slider, "changed", _zoom_slider_changed, this);
elm_object_style_set(m_zoom_slider, "default");
elm_slider_horizontal_set(m_zoom_slider, EINA_TRUE);
elm_slider_min_max_set(m_zoom_slider, 1, 6);
- elm_slider_step_set(m_zoom_slider, 1);
- elm_slider_value_set(m_zoom_slider, 3);
- elm_slider_indicator_format_set(m_zoom_slider, "%1.0f");
+ elm_slider_step_set(m_zoom_slider, 0.2);
+ int zoomFactor = *(getZoom());
+ elm_slider_value_set(m_zoom_slider, calculateSliderValue(zoomFactor));
+ elm_slider_indicator_show_set(m_zoom_slider, EINA_FALSE);
- elm_object_part_content_set(m_layout, "slider_swallow", m_zoom_slider);
+ elm_object_part_content_set(m_zoom_menu, "slider_swallow", m_zoom_slider);
+ evas_object_event_callback_add(m_zoom_slider, EVAS_CALLBACK_KEY_DOWN, _zoom_value_confirmed, this);
}
void ZoomUI::createNavigationButtons()
elm_layout_file_set(m_nav_layout, m_edjFilePath.c_str(), "nav-layout");
evas_object_size_hint_weight_set(m_nav_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(m_nav_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_object_part_content_set(m_layout, "nav_buttons", m_nav_layout);
-
- Evas_Object* icon = elm_icon_add(m_nav_layout);
- setImageFile(icon, LEFT, false);
- evas_object_smart_callback_add(icon, "clicked", _left_button_clicked, this);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_left_button, this);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_left_button, this);
- elm_object_part_content_set(m_nav_layout, "left_button", icon);
-
- icon = elm_icon_add(m_nav_layout);
- setImageFile(icon, RIGHT, false);
- evas_object_smart_callback_add(icon, "clicked", _right_button_clicked, this);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_right_button, this);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_right_button, this);
- elm_object_part_content_set(m_nav_layout, "right_button", icon);
-
- icon = elm_icon_add(m_nav_layout);
- setImageFile(icon, DOWN, false);
- evas_object_smart_callback_add(icon, "clicked", _down_button_clicked, this);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_down_button, this);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_down_button, this);
- elm_object_part_content_set(m_nav_layout, "down_button", icon);
-
- icon = elm_icon_add(m_nav_layout);
- setImageFile(icon, UP, false);
- evas_object_smart_callback_add(icon, "clicked", _up_button_clicked, this);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_up_button, this);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_up_button, this);
- elm_object_part_content_set(m_nav_layout, "up_button", icon);
+
+ m_leftArrow = elm_icon_add(m_nav_layout);
+ setImageFile(m_leftArrow, LEFT, false);
+ evas_object_smart_callback_add(m_leftArrow, "clicked", _left_button_clicked, this);
+ evas_object_event_callback_add(m_leftArrow, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_left_button, this);
+ evas_object_event_callback_add(m_leftArrow, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_left_button, this);
+ elm_object_part_content_set(m_nav_layout, "left_button", m_leftArrow);
+
+ m_rightArrow = elm_icon_add(m_nav_layout);
+ setImageFile(m_rightArrow, RIGHT, false);
+ evas_object_smart_callback_add(m_rightArrow, "clicked", _right_button_clicked, this);
+ evas_object_event_callback_add(m_rightArrow, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_right_button, this);
+ evas_object_event_callback_add(m_rightArrow, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_right_button, this);
+ elm_object_part_content_set(m_nav_layout, "right_button", m_rightArrow);
+
+ m_downArrow = elm_icon_add(m_nav_layout);
+ setImageFile(m_downArrow, DOWN, false);
+ evas_object_smart_callback_add(m_downArrow, "clicked", _down_button_clicked, this);
+ evas_object_event_callback_add(m_downArrow, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_down_button, this);
+ evas_object_event_callback_add(m_downArrow, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_down_button, this);
+ elm_object_part_content_set(m_nav_layout, "down_button", m_downArrow);
+
+ m_upArrow = elm_icon_add(m_nav_layout);
+ setImageFile(m_upArrow, UP, false);
+ evas_object_smart_callback_add(m_upArrow, "clicked", _up_button_clicked, this);
+ evas_object_event_callback_add(m_upArrow, EVAS_CALLBACK_MOUSE_IN, _cb_focus_in_up_button, this);
+ evas_object_event_callback_add(m_upArrow, EVAS_CALLBACK_MOUSE_OUT, _cb_focus_out_up_button, this);
+ elm_object_part_content_set(m_nav_layout, "up_button", m_upArrow);
}
void ZoomUI::clearItems()
void ZoomUI::setImageFile(Evas_Object* obj, int direction, bool focused)
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
switch (direction) {
case LEFT: elm_image_file_set(obj, m_edjFilePath.c_str(), focused ? "ic_zoom_indicator_left_foc.png" : "ic_zoom_indicator_left_nor.png");
break;
}
}
+void ZoomUI::_zoom_value_confirmed(void* data, Evas*, Evas_Object* obj, void* event_info)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ Evas_Event_Key_Down* ev = static_cast<Evas_Event_Key_Down*>(event_info);
+
+ if (!data || !ev || !ev->keyname)
+ return;
+
+ ZoomUI* self = static_cast<ZoomUI*>(data);
+ if (std::string(ev->keyname) == "Return") {
+ int val = (int)elm_slider_value_get(self->m_zoom_slider);
+ BROWSER_LOGD("[%s:%d] val: %d", __PRETTY_FUNCTION__, __LINE__, val);
+ if (val > 3) {
+ BROWSER_LOGD("[%s:%d] value is greater than 3", __PRETTY_FUNCTION__, __LINE__);
+ evas_object_show(self->m_nav_layout);
+ } else {
+ BROWSER_LOGD("[%s:%d] value is smaller or equal to 3", __PRETTY_FUNCTION__, __LINE__);
+ evas_object_hide(self->m_nav_layout);
+ }
+ evas_object_hide(self->m_zoom_menu);
+ }
+}
+
+Eina_Bool ZoomUI::_key_down_cb(void* data, int type, void* event_info)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ Ecore_Event_Key* ev = static_cast<Ecore_Event_Key*>(event_info);
+
+ if (!data || !ev || !ev->keyname)
+ return EINA_FALSE;
+
+ ZoomUI* self = static_cast<ZoomUI*>(data);
+ if (std::string(ev->keyname) == "Left") {
+ _left_button_clicked(data, self->m_leftArrow, event_info);
+ _cb_focus_in_left_button(data, nullptr, self->m_leftArrow, event_info);
+ } else if (std::string(ev->keyname) == "Right") {
+ _right_button_clicked(data, self->m_rightArrow, event_info);
+ _cb_focus_in_right_button(data, nullptr, self->m_rightArrow, event_info);
+ } else if (std::string(ev->keyname) == "Up") {
+ _up_button_clicked(data, self->m_upArrow, event_info);
+ _cb_focus_in_up_button(data, nullptr, self->m_upArrow, event_info);
+ } else if (std::string(ev->keyname) == "Down") {
+ _down_button_clicked(data, self->m_downArrow, event_info);
+ _cb_focus_in_down_button(data, nullptr, self->m_downArrow, event_info);
+ } else
+ return EINA_FALSE;
+
+ return EINA_TRUE;
+}
+
+Eina_Bool ZoomUI::_key_up_cb(void* data, int type, void* event_info)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ Ecore_Event_Key* ev = static_cast<Ecore_Event_Key*>(event_info);
+
+ if (!data || !ev || !ev->keyname)
+ return EINA_FALSE;
+
+ ZoomUI* self = static_cast<ZoomUI*>(data);
+ if (std::string(ev->keyname) == "Left") {
+ _cb_focus_out_left_button(data, nullptr, self->m_leftArrow, event_info);
+ } else if (std::string(ev->keyname) == "Right") {
+ _cb_focus_out_right_button(data, nullptr, self->m_rightArrow, event_info);
+ } else if (std::string(ev->keyname) == "Up") {
+ _cb_focus_out_up_button(data, nullptr, self->m_upArrow, event_info);
+ } else if (std::string(ev->keyname) == "Down") {
+ _cb_focus_out_down_button(data, nullptr, self->m_downArrow, event_info);
+ } else
+ return EINA_FALSE;
+
+ return EINA_TRUE;
+}
+
void ZoomUI::_left_button_clicked(void * data, Evas_Object * obj, void * event_info)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
}
}
+int ZoomUI::calculateSliderValue(int zoom)
+{
+ BROWSER_LOGD("[%s:%d] zoom factor: %d", __PRETTY_FUNCTION__, __LINE__, zoom);
+ if (zoom >= ZOOM_300)
+ return 6;
+ else if (zoom >= ZOOM_200)
+ return 5;
+ else if (zoom >= ZOOM_150)
+ return 4;
+ else if (zoom >= ZOOM_100)
+ return 3;
+ else if (zoom >= ZOOM_75)
+ return 2;
+ else if (zoom < ZOOM_75)
+ return 1;
+}
+
}
}