From: Maciej Skrzypkowski Date: Tue, 29 Sep 2015 08:21:22 +0000 (+0200) Subject: Introduced new window management. X-Git-Tag: accepted/tizen/tv/20150930.042038~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e3896da65dab5e1d4002fea6da43d30c9c8c94de;p=profile%2Ftv%2Fapps%2Fweb%2Fbrowser.git Introduced new window management. Continuation of patch proposed by Marcin Łapiński. [Issue] https://bugs.tizen.org/jira/browse/TT-157 [Problem] There was no proper views management [Cause] N/A [Solution] New class ViewManager for controling switching between views. [Verify] Launch browser > switch between different views (page view, more menu, settings, etc.), check if switching is correct check if there are no relevant warnings in logs. Change-Id: I8827964b6539ecb7a4c02edd3d296b72a149a9e7 Signed-off-by: Maciej Skrzypkowski --- diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.cpp b/services/BookmarkManagerUI/BookmarkManagerUI.cpp index ae5e9fa..213cca2 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.cpp +++ b/services/BookmarkManagerUI/BookmarkManagerUI.cpp @@ -76,13 +76,6 @@ void BookmarkManagerUI::createGengridItemClasses() m_bookmark_item_class->func.del = nullptr; } -void BookmarkManagerUI::show(Evas_Object* parent) -{ - init(parent); - b_mm_layout=createBookmarksLayout(m_parent); - showUI(); -} - void BookmarkManagerUI::init(Evas_Object* parent) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -93,18 +86,13 @@ void BookmarkManagerUI::init(Evas_Object* parent) void BookmarkManagerUI::showUI() { evas_object_show(b_mm_layout); - //regenerate gengrid and genlist - createGenGrid(); - showTopContent(); } void BookmarkManagerUI::hideUI() { - evas_object_hide(b_mm_layout); - evas_object_del(m_gengrid); - m_gengrid=nullptr; - evas_object_del(m_genList); - m_genList=nullptr; + evas_object_hide(b_mm_layout); + elm_gengrid_clear(m_gengrid); + m_map_bookmark.clear(); } Evas_Object* BookmarkManagerUI::getContent() @@ -126,6 +114,7 @@ Evas_Object* BookmarkManagerUI::createBookmarksLayout(Evas_Object* parent) evas_object_show(b_mm_layout); createGenGrid(); + showTopContent(); return b_mm_layout; } @@ -133,10 +122,6 @@ Evas_Object* BookmarkManagerUI::createBookmarksLayout(Evas_Object* parent) // (After fixing window managment) void BookmarkManagerUI::createGenGrid() { - //TODO: After fixing window managment remove this. - if(m_gengrid != nullptr) - evas_object_del(m_gengrid); - m_gengrid = elm_gengrid_add(b_mm_layout); elm_object_part_content_set(b_mm_layout, "elm.swallow.grid", m_gengrid); elm_object_style_set(m_gengrid, "back_ground"); @@ -152,9 +137,6 @@ void BookmarkManagerUI::createGenGrid() elm_gengrid_item_size_set(m_gengrid, 404 * efl_scale, 320 * efl_scale); } -//TODO: Remove externall calls and make it private method. -// Make parend the argument and return created object -// to make code more modular.(After fixing window managment) void BookmarkManagerUI::showTopContent() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -210,19 +192,13 @@ Evas_Object* BookmarkManagerUI::listItemContentGet(void* data, Evas_Object* obj, return nullptr; } -void BookmarkManagerUI::item_clicked_cb(void*, Evas_Object*, void*) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -} - void BookmarkManagerUI::close_clicked_cb(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data != nullptr) { ItemData * id = static_cast(data); - id->m_bookmarkManager->closeBookmarkManagerClicked(std::string()); - id->m_bookmarkManager->clearItems(); + id->m_bookmarkManager->closeBookmarkManagerClicked(); } } @@ -232,13 +208,6 @@ char* BookmarkManagerUI::listItemTextGet(void* data, Evas_Object*, const char* p return strdup("Bookmark"); } -void BookmarkManagerUI::hide() -{ - evas_object_hide(elm_layout_content_get(b_mm_layout, "elm.swallow.grid")); - evas_object_hide(elm_layout_content_get(b_mm_layout, "elm.swallow.genlist")); - evas_object_hide(b_mm_layout); -} - Evas_Object * BookmarkManagerUI::getGenList() { return m_genList; @@ -362,25 +331,5 @@ void BookmarkManagerUI::_bookmarkItemClicked(void * data, Evas_Object *, void * } } -void BookmarkManagerUI::clearItems() -{ - hide(); - BROWSER_LOGD("Deleting all items from gengrid"); - elm_gengrid_clear(m_gengrid); - elm_genlist_clear(m_genList); - m_map_bookmark.clear(); - elm_theme_extension_del(nullptr, edjFilePath.c_str()); - elm_theme_full_flush(); - elm_cache_all_flush(); -} - -void BookmarkManagerUI::updateGengrid() -{ - elm_genlist_clear(m_genList); - //elm_gengrid_clear(m_gengrid); - //remove 'createGenGrid' if the elm_gengrid_clear() will be valid again - createGenGrid(); - m_map_bookmark.clear(); -} } } diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.h b/services/BookmarkManagerUI/BookmarkManagerUI.h index 22c1095..af9296b 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.h +++ b/services/BookmarkManagerUI/BookmarkManagerUI.h @@ -43,26 +43,21 @@ public: void hideUI(); Evas_Object *getContent(); - // TODO: remove this (After fixing window managment) - void show(Evas_Object *main_layout); - - //TODO: make it private; - void showTopContent(); virtual std::string getName(); void addBookmarkItem(std::shared_ptr); void addBookmarkItems(std::vector >); void hide(); void clearItems(); - void updateGengrid(); Evas_Object* createNoHistoryLabel(); void setEmptyGengrid(bool setEmpty); - boost::signals2::signal closeBookmarkManagerClicked; + boost::signals2::signal closeBookmarkManagerClicked; boost::signals2::signal)> bookmarkItemClicked; private: Evas_Object* createBookmarksLayout(Evas_Object* parent); void createGenGrid(); + void showTopContent(); void createGengridItemClasses(); Evas_Object *getGenList(); Evas_Object *getGenGrid(); @@ -76,7 +71,6 @@ private: static Evas_Object* listItemContentGet(void *data, Evas_Object *obj, const char *part); static char* listItemTextGet(void *data, Evas_Object *, const char *part); - static void item_clicked_cb(void *, Evas_Object *, void *); static void close_clicked_cb(void *data, Evas_Object *, void *); private: diff --git a/services/BookmarkManagerUI/edc/BookmarkManagerUI.edc b/services/BookmarkManagerUI/edc/BookmarkManagerUI.edc index 96f6c64..761990d 100644 --- a/services/BookmarkManagerUI/edc/BookmarkManagerUI.edc +++ b/services/BookmarkManagerUI/edc/BookmarkManagerUI.edc @@ -444,7 +444,7 @@ group { min: 1920 795; max: 1920 795; align: 0.0 0.0; - fixed: 0 0; + fixed: 1 1; rel1 { relative: 0.0 0.0; to: "gengrid_bg"; offset: 63 0;} rel2 { relative: 1.0 1.0; to: "gengrid_bg";} } diff --git a/services/HistoryUI/HistoryUI.cpp b/services/HistoryUI/HistoryUI.cpp index f8eaa13..094f04c 100644 --- a/services/HistoryUI/HistoryUI.cpp +++ b/services/HistoryUI/HistoryUI.cpp @@ -71,10 +71,9 @@ void HistoryUI::showUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); M_ASSERT(m_history_layout); - m_gengrid = createGengrid(m_history_layout); - addItems(); evas_object_show(m_actionBar); evas_object_show(m_history_layout); + elm_object_focus_custom_chain_append(m_history_layout, m_genListToday, nullptr); elm_object_focus_set(elm_object_part_content_get(m_actionBar, "close_click"), EINA_TRUE); } @@ -82,23 +81,12 @@ void HistoryUI::hideUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); M_ASSERT(m_history_layout); - evas_object_del(m_genListToday); - m_genListToday = nullptr; - evas_object_del(m_gengrid); - m_gengrid = nullptr; evas_object_hide(m_actionBar); evas_object_hide(m_history_layout); elm_object_focus_custom_chain_unset(m_history_layout); + clearItems(); } -// TODO: Remove this function when proper view handling will be introduced -void HistoryUI::show(Evas_Object* parent) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - init(parent); - m_history_layout = createHistoryUILayout(m_parent); - showUI(); -} void HistoryUI::init(Evas_Object* parent) { @@ -112,7 +100,7 @@ Evas_Object* HistoryUI::getContent() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); M_ASSERT(m_parent); if (!m_history_layout) - m_history_layout = createHistoryUILayout(m_parent); + createHistoryUILayout(m_parent); return m_history_layout; } @@ -120,15 +108,14 @@ Evas_Object* HistoryUI::createHistoryUILayout(Evas_Object* parent) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); - Evas_Object* history_layout = elm_layout_add(parent); - elm_layout_file_set(history_layout, m_edjFilePath.c_str(), "history-layout"); - evas_object_size_hint_weight_set(history_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(history_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - - m_actionBar = createActionBar(history_layout); - m_gengrid = createGengrid(history_layout); + m_history_layout = elm_layout_add(parent); + elm_layout_file_set(m_history_layout, m_edjFilePath.c_str(), "history-layout"); + evas_object_size_hint_weight_set(m_history_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_history_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - return history_layout; + m_actionBar = createActionBar(m_history_layout); + m_gengrid = createGengrid(m_history_layout); + clearItems(); } Evas_Object* HistoryUI::createGengrid(Evas_Object* history_layout) @@ -151,6 +138,27 @@ Evas_Object* HistoryUI::createGengrid(Evas_Object* history_layout) double efl_scale = elm_config_scale_get() / elm_app_base_scale_get(); elm_gengrid_item_size_set(gengrid, 580 * efl_scale, 580 * efl_scale); + + HistoryItemData *itemData = new HistoryItemData(); + itemData->historyUI = std::shared_ptr(this); + Elm_Object_Item* historyView = elm_gengrid_item_append(gengrid, m_item_class, itemData, nullptr, this); + elm_gengrid_item_selected_set(historyView, EINA_FALSE); + + // create genlist for today entries + m_genListToday = elm_genlist_add(m_history_layout); + elm_genlist_homogeneous_set(m_genListToday, EINA_FALSE); + elm_genlist_multi_select_set(m_genListToday, EINA_FALSE); + elm_genlist_select_mode_set(m_genListToday, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListToday, ELM_LIST_LIMIT); + elm_genlist_decorate_mode_set(m_genListToday, EINA_TRUE); + evas_object_size_hint_weight_set(m_genListToday, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + m_itemClassToday = elm_genlist_item_class_new(); + m_itemClassToday->item_style = "history_url_items"; + m_itemClassToday->func.text_get = &_listTodayTextGet; + m_itemClassToday->func.content_get = nullptr; + m_itemClassToday->func.state_get = nullptr; + m_itemClassToday->func.del = nullptr; + return gengrid; } @@ -198,7 +206,6 @@ void HistoryUI::_close_clicked_cb(void * data, Evas_Object*, void*) if (data) { HistoryUI *historyUI = static_cast(data); historyUI->closeHistoryUIClicked(); - historyUI->clearItems(); } } @@ -225,22 +232,10 @@ void HistoryUI::_clearHistory_clicked(void* data, Evas_Object*, void*) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); HistoryUI *historyUI = static_cast(data); - historyUI->clearHistoryClicked(std::string()); + historyUI->clearHistoryClicked(); historyUI->clearItems(); } -void HistoryUI::addItems() -{ - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - for (size_t i = 0; i < 1; i++) { - HistoryItemData *itemData = new HistoryItemData(); - itemData->historyUI = std::shared_ptr(this); - Elm_Object_Item* historyView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, nullptr, this); - elm_gengrid_item_selected_set(historyView, EINA_FALSE); - } - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); -} - void HistoryUI::addHistoryItem(std::shared_ptr hi) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); @@ -248,6 +243,8 @@ void HistoryUI::addHistoryItem(std::shared_ptr hi) itemData->item = hi; itemData->historyUI = std::shared_ptr(this); _history_item_data.push_back(itemData); + Elm_Object_Item* historyView = elm_genlist_item_append(itemData->historyUI->m_genListToday, itemData->historyUI->m_itemClassToday, itemData, nullptr, ELM_GENLIST_ITEM_NONE, _history_item_clicked_cb, itemData); + itemData->historyUI->m_map_history_views.insert(std::pair(hi->getUrl(), historyView)); } void HistoryUI::addHistoryItems(std::shared_ptr items) @@ -279,28 +276,6 @@ Evas_Object * HistoryUI::_history_grid_content_get(void *data, Evas_Object*, con static const int part_name_len = strlen(part_name); if(!strncmp(part_name, part, part_name_len)) { - id->historyUI->m_genListToday = elm_genlist_add(id->historyUI->m_history_layout); - - elm_genlist_homogeneous_set(id->historyUI->m_genListToday, EINA_FALSE); - elm_genlist_multi_select_set(id->historyUI->m_genListToday, EINA_FALSE); - elm_genlist_select_mode_set(id->historyUI->m_genListToday, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(id->historyUI->m_genListToday, ELM_LIST_LIMIT); - elm_genlist_decorate_mode_set(id->historyUI->m_genListToday, EINA_TRUE); - evas_object_size_hint_weight_set(id->historyUI->m_genListToday, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - id->historyUI->m_itemClassToday = elm_genlist_item_class_new(); - id->historyUI->m_itemClassToday->item_style = "history_url_items"; - id->historyUI->m_itemClassToday->func.text_get = &_listTodayTextGet; - id->historyUI->m_itemClassToday->func.content_get = nullptr; - id->historyUI->m_itemClassToday->func.state_get = nullptr; - id->historyUI->m_itemClassToday->func.del = nullptr; - - for(auto it = _history_item_data.begin(); it != _history_item_data.end(); it++) { - Elm_Object_Item* historyView = elm_genlist_item_append(id->historyUI->m_genListToday, id->historyUI->m_itemClassToday, *it, nullptr, ELM_GENLIST_ITEM_NONE, _history_item_clicked_cb, (*it)); - id->historyUI->m_map_history_views.insert(std::pair((*it)->item->getUrl(), historyView)); - } - elm_object_focus_custom_chain_append(id->historyUI->m_history_layout, id->historyUI->m_genListToday, nullptr); - return id->historyUI->m_genListToday; } } @@ -318,19 +293,10 @@ void HistoryUI::removeHistoryItem(const std::string& uri) m_map_history_views.erase(uri); } -void HistoryUI::hide() -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - evas_object_hide(elm_layout_content_get(m_history_layout, "action_bar_history")); - evas_object_hide(m_history_layout); -} - void HistoryUI::clearItems() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - hide(); elm_genlist_clear(m_genListToday); - elm_gengrid_clear(m_gengrid); m_map_history_views.clear(); _history_item_data.clear(); } diff --git a/services/HistoryUI/HistoryUI.h b/services/HistoryUI/HistoryUI.h index 0635653..859eddc 100644 --- a/services/HistoryUI/HistoryUI.h +++ b/services/HistoryUI/HistoryUI.h @@ -45,16 +45,14 @@ public: void addHistoryItem(std::shared_ptr); void addHistoryItems(std::shared_ptr); void removeHistoryItem(const std::string& uri); - void clearItems(); - void hide(); Evas_Object* createActionBar(Evas_Object* history_layout); - void show(Evas_Object *main_layout); void addItems(); boost::signals2::signal closeHistoryUIClicked; - boost::signals2::signal clearHistoryClicked; + boost::signals2::signal clearHistoryClicked; boost::signals2::signal)> historyItemClicked; boost::signals2::signal)> historyDeleteClicked; private: + void clearItems(); Evas_Object* createHistoryUILayout(Evas_Object* parent); Elm_Gengrid_Item_Class* crateItemClass(); static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp index d2248fd..6e64eae 100644 --- a/services/MainUI/MainUI.cpp +++ b/services/MainUI/MainUI.cpp @@ -138,9 +138,6 @@ Evas_Object* MainUI::createQuickAccessLayout(Evas_Object* parent) m_mostVisitedView = createMostVisitedView(layout); m_bookmarksView = createBookmarksView (layout); - evas_object_show(m_mostVisitedView); - //TODO: uncoment this after cleaning up the mess in whole app window. - //evas_object_show(m_bookmarksView); showHistory(); return layout; @@ -170,7 +167,21 @@ Evas_Object* MainUI::createBookmarksView (Evas_Object * parent) evas_object_size_hint_weight_set(bookmarkViewLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(bookmarkViewLayout, EVAS_HINT_FILL, EVAS_HINT_FILL); - Evas_Object *bookmarkGengrid = elm_gengrid_add(bookmarkViewLayout); + m_bookmarkGengrid = createBookmarkGengrid(bookmarkViewLayout); + elm_object_part_content_set(bookmarkViewLayout, "elm.swallow.grid", m_bookmarkGengrid); + + Evas_Object* topButtons = createTopButtons(bookmarkViewLayout); + elm_object_part_content_set(bookmarkViewLayout, "elm.swallow.layoutTop", topButtons); + + Evas_Object* bottomButton = createBottomButton(bookmarkViewLayout); + elm_object_part_content_set(bookmarkViewLayout, "elm.swallow.layoutBottom", bottomButton); + + return bookmarkViewLayout; +} + +Evas_Object* MainUI::createBookmarkGengrid(Evas_Object *parent) +{ + Evas_Object *bookmarkGengrid = elm_gengrid_add(parent); elm_gengrid_align_set(bookmarkGengrid, 0, 0); elm_gengrid_select_mode_set(bookmarkGengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); @@ -182,18 +193,8 @@ Evas_Object* MainUI::createBookmarksView (Evas_Object * parent) evas_object_size_hint_weight_set(bookmarkGengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(bookmarkGengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_gengrid_item_size_set(bookmarkGengrid, 364 * efl_scale, 320 * efl_scale); - evas_object_show(bookmarkGengrid); - - elm_object_part_content_set(bookmarkViewLayout, "elm.swallow.grid", bookmarkGengrid); - m_bookmarkGengrid = bookmarkGengrid; - - Evas_Object* topButtons = createTopButtons(bookmarkViewLayout); - elm_object_part_content_set(bookmarkViewLayout, "elm.swallow.layoutTop", topButtons); - Evas_Object* bottomButton = createBottomButton(bookmarkViewLayout); - elm_object_part_content_set(bookmarkViewLayout, "elm.swallow.layoutBottom", bottomButton); - - return bookmarkViewLayout; + return bookmarkGengrid; } Evas_Object* MainUI::createTopButtons (Evas_Object *parent) @@ -248,21 +249,21 @@ void MainUI::_mostVisited_clicked(void * data, Evas_Object *, void *) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); MainUI* mainUI = reinterpret_cast(data); - mainUI->mostVisitedClicked(std::string()); + mainUI->mostVisitedClicked(); } void MainUI::_bookmark_clicked(void * data, Evas_Object *, void *) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); MainUI* mainUI = reinterpret_cast(data); - mainUI->bookmarkClicked(std::string()); + mainUI->bookmarkClicked(); } void MainUI::_bookmark_manager_clicked(void * data, Evas_Object *, void *) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); MainUI* mainUI = static_cast(data); - mainUI->bookmarkManagerClicked(std::string()); + mainUI->bookmarkManagerClicked(); } void MainUI::addHistoryItem(std::shared_ptr hi) @@ -327,10 +328,9 @@ void MainUI::addBookmarkItem(std::shared_ptr > items) { clearBookmarkGengrid(); - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - for (auto it = items.begin(); it != items.end(); ++it) { - addBookmarkItem(*it); - } + for (auto it = items.begin(); it != items.end(); ++it) { + addBookmarkItem(*it); + } } @@ -403,7 +403,6 @@ void MainUI::showHistory() if (elm_layout_content_get(m_layout, "elm.swallow.content") == m_mostVisitedView) return; - //TODO: remove these "evas_object_hide" and "evas_object_show" after cleaning up the mess in whole app window. elm_layout_content_unset(m_layout, "elm.swallow.content"); evas_object_hide(m_bookmarksView); elm_layout_content_set(m_layout, "elm.swallow.content", m_mostVisitedView); @@ -422,7 +421,6 @@ void MainUI::showHistory() void MainUI::clearBookmarkGengrid() { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - elm_gengrid_clear(m_bookmarkGengrid); m_map_bookmark_views.clear(); } @@ -431,10 +429,9 @@ void MainUI::showBookmarks() { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - if (elm_layout_content_get(m_layout, "elm.swallow.content") == m_bookmarksView) + if (elm_layout_content_get(m_layout, "elm.swallow.content") == m_bookmarksView && m_bookmarksView != nullptr) return; - //TODO: remove these "evas_object_hide" and "evas_object_show" after cleaning up the mess in whole app window. elm_layout_content_unset(m_layout, "elm.swallow.content"); evas_object_hide(m_mostVisitedView); elm_layout_content_set(m_layout, "elm.swallow.content", m_bookmarksView); @@ -444,18 +441,23 @@ void MainUI::showBookmarks() evas_object_show(m_layout); } -void MainUI::hide() +void MainUI::showUI() { - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - evas_object_hide(m_layout); - evas_object_hide(m_mostVisitedView); - evas_object_hide(m_bookmarksView); - clearItems(); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + evas_object_show(m_layout); + if (elm_layout_content_get(m_layout, "elm.swallow.content") == m_bookmarksView) { + evas_object_show(m_bookmarksView); + } else { + evas_object_show(m_mostVisitedView); + } } -void MainUI::clearItems() +void MainUI::hideUI() { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + evas_object_hide(m_layout); + evas_object_hide(m_mostVisitedView); + evas_object_hide(m_bookmarksView); clearHistoryGenlist(); clearBookmarkGengrid(); } diff --git a/services/MainUI/MainUI.h b/services/MainUI/MainUI.h index 30e9aa6..1b9e43f 100644 --- a/services/MainUI/MainUI.h +++ b/services/MainUI/MainUI.h @@ -43,7 +43,8 @@ public: Evas_Object* getContent(); void showMostVisited(std::shared_ptr vec); void showBookmarks(std::vector > vec); - void hide(); + void hideUI(); + void showUI(); virtual std::string getName(); void openDetailPopup(std::shared_ptr currItem, std::shared_ptr prevItems); bool isDesktopMode() const; @@ -52,9 +53,9 @@ public: boost::signals2::signal, int)> mostVisitedTileClicked; boost::signals2::signal, bool)> openURLInNewTab; - boost::signals2::signal mostVisitedClicked; - boost::signals2::signal bookmarkClicked; - boost::signals2::signal bookmarkManagerClicked; + boost::signals2::signal mostVisitedClicked; + boost::signals2::signal bookmarkClicked; + boost::signals2::signal bookmarkManagerClicked; static const int MAX_THUMBNAIL_WIDTH; static const int MAX_THUMBNAIL_HEIGHT; @@ -67,9 +68,9 @@ private: void addBookmarkItems(std::vector >); void clearHistoryGenlist(); void clearBookmarkGengrid(); + Evas_Object* createBookmarkGengrid(Evas_Object *parent); void showHistory(); void showBookmarks(); - void clearItems(); Evas_Object* createQuickAccessLayout(Evas_Object *parent); Evas_Object* createMostVisitedView(Evas_Object *parent); diff --git a/services/MoreMenuUI/MoreMenuUI.cpp b/services/MoreMenuUI/MoreMenuUI.cpp index af30684..633f1bf 100644 --- a/services/MoreMenuUI/MoreMenuUI.cpp +++ b/services/MoreMenuUI/MoreMenuUI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2015 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. @@ -45,10 +45,14 @@ typedef struct _MoreItemData } MoreMenuItemData; MoreMenuUI::MoreMenuUI() - : m_gengrid(nullptr) + : m_current_tab_bar(nullptr) + , m_mm_layout(nullptr) + , m_gengrid(nullptr) , m_parent(nullptr) + , m_toastPopup(nullptr) + , m_icon(nullptr) + , m_bookmarkIcon(nullptr) , m_item_class(nullptr) - , m_mm_layout(nullptr) , m_desktopMode(true) , m_isBookmark(false) { @@ -63,6 +67,7 @@ MoreMenuUI::~MoreMenuUI() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (m_item_class) elm_gengrid_item_class_free(m_item_class); + evas_object_del(m_gengrid); } Elm_Gengrid_Item_Class* MoreMenuUI::createItemClass() @@ -84,25 +89,16 @@ void MoreMenuUI::init(Evas_Object* parent) m_parent = parent; } -void MoreMenuUI::show(Evas_Object* parent, bool desktopMode) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - init(parent); - //TODO: move this function call to SimpleUI::initUIServices after introducing new window managment. - setDesktopMode(desktopMode); - m_mm_layout=createMoreMenuLayout(parent); - showUI(); -} void MoreMenuUI::showUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - M_ASSERT(m_parent); - evas_object_show(getContent()); - //regenerate gengrid - m_gengrid=createGengrid(getContent()); + M_ASSERT(m_mm_layout); + createGengrid(); // recreate gengrid because icons could have changed addItems(); - elm_object_part_content_set(getContent(), "elm.swallow.grid", m_gengrid); + evas_object_show(m_mm_layout); + evas_object_show(elm_object_part_content_get(m_mm_layout,"current_tab_bar")); + evas_object_show(m_gengrid); setFocus(EINA_TRUE); } @@ -110,8 +106,10 @@ void MoreMenuUI::hideUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); M_ASSERT(m_mm_layout); - evas_object_hide(getContent()); - //destroy gengrid + setFocus(EINA_FALSE); + evas_object_hide(m_mm_layout); + evas_object_hide(elm_object_part_content_get(m_mm_layout,"current_tab_bar")); + clearItems(); evas_object_del(m_gengrid); } @@ -119,41 +117,37 @@ void MoreMenuUI::hideUI() Evas_Object* MoreMenuUI::getContent() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - M_ASSERT(m_parent); if(!m_mm_layout) - m_mm_layout = createMoreMenuLayout(m_parent); + createMoreMenuLayout(); return m_mm_layout; } -Evas_Object* MoreMenuUI::createMoreMenuLayout(Evas_Object* parent) +void MoreMenuUI::createMoreMenuLayout() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(m_parent); elm_theme_extension_add(NULL, m_edjFilePath.c_str()); - Evas_Object* mm_layout = elm_layout_add(parent); - elm_layout_file_set(mm_layout, m_edjFilePath.c_str(), "moremenu-layout"); - evas_object_size_hint_weight_set(mm_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(mm_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - - evas_object_show(mm_layout); - return mm_layout; + m_mm_layout = elm_layout_add(m_parent); + elm_layout_file_set(m_mm_layout, m_edjFilePath.c_str(), "moremenu-layout"); + evas_object_size_hint_weight_set(m_mm_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_mm_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); } -Evas_Object* MoreMenuUI::createGengrid(Evas_Object* parent) +void MoreMenuUI::createGengrid() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Evas_Object* gengrid = elm_gengrid_add(parent); - elm_object_part_content_set(parent, "elm.swallow.grid", gengrid); + m_gengrid = elm_gengrid_add(m_mm_layout); + elm_object_part_content_set(m_mm_layout, "elm.swallow.grid", m_gengrid); - elm_gengrid_align_set(gengrid, 0, 0); - elm_gengrid_select_mode_set(gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_gengrid_multi_select_set(gengrid, EINA_FALSE); - elm_gengrid_horizontal_set(gengrid, EINA_FALSE); - elm_scroller_policy_set(gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); - elm_scroller_page_size_set(gengrid, 0, 327); - evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_gengrid_item_size_set(gengrid, 364 * efl_scale, 320 * efl_scale); - return gengrid; + 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_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); } void MoreMenuUI::showCurrentTab() @@ -222,7 +216,6 @@ void MoreMenuUI::setWebTitle(const std::string& title) void MoreMenuUI::setURL(const std::string& url) { BROWSER_LOGD("[%s:%d] %s", __PRETTY_FUNCTION__, __LINE__, url.c_str()); - char* part_name = "add_to_bookmark_text"; if(!url.empty()) { elm_object_part_text_set(m_current_tab_bar, "webpage_url", url.c_str()); @@ -285,7 +278,7 @@ void MoreMenuUI::createToastPopup(const char* text) elm_popup_timeout_set(m_toastPopup, 3.0); } -void MoreMenuUI::_timeout(void *data, Evas_Object *obj, void *event_info) +void MoreMenuUI::_timeout(void *data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); MoreMenuUI *moreMenuUI = static_cast(data); @@ -314,17 +307,10 @@ void MoreMenuUI::_close_clicked(void* data, Evas_Object*, void*) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { MoreMenuUI *moreMenuUI = static_cast(data); - moreMenuUI->closeMoreMenuClicked(std::string()); - moreMenuUI->clearItems(); + moreMenuUI->closeMoreMenuClicked(); } } -void MoreMenuUI::hide() -{ - evas_object_hide(elm_layout_content_get(m_mm_layout, "elm.swallow.grid")); - evas_object_hide(elm_layout_content_get(m_mm_layout, "current_tab_bar")); - evas_object_hide(m_mm_layout); -} void MoreMenuUI::addItems() { @@ -344,7 +330,20 @@ void MoreMenuUI::addItems() m_map_menu_views.insert(std::pair(itemData->item, bookmarkView)); elm_gengrid_item_selected_set(bookmarkView, EINA_FALSE); } - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); +} + +void MoreMenuUI::clearItems() +{ + BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); + for (auto it = m_map_menu_views.begin(); it != m_map_menu_views.end(); ++it) { + Elm_Object_Item* bookmarkView = it->second; + Evas_Object *button = elm_object_item_part_content_get(it->second, "thumbbutton_item"); + evas_object_event_callback_del(button, EVAS_CALLBACK_MOUSE_IN, __cb_mouse_in); + evas_object_event_callback_del(button, EVAS_CALLBACK_MOUSE_OUT, __cb_mouse_out); + } + + elm_gengrid_clear(m_gengrid); + m_map_menu_views.clear(); } char* MoreMenuUI::_grid_text_get(void* data, Evas_Object*, const char* part) @@ -515,16 +514,13 @@ void MoreMenuUI::_thumbSelected(void* data, Evas_Object*, void*) BROWSER_LOGD("type: %d", itemData->item); switch (itemData->item) { case HISTORY: - itemData->moreMenuUI->setFocus(EINA_FALSE); - itemData->moreMenuUI->historyUIClicked(std::string()); + itemData->moreMenuUI->historyUIClicked(); break; case SETTINGS: - itemData->moreMenuUI->setFocus(EINA_FALSE); - itemData->moreMenuUI->settingsClicked(std::string()); + itemData->moreMenuUI->settingsClicked(); break; case BOOKMARK_MANAGER: - itemData->moreMenuUI->setFocus(EINA_FALSE); - itemData->moreMenuUI->bookmarkManagerClicked(std::string()); + itemData->moreMenuUI->bookmarkManagerClicked(); break; #ifdef READER_MODE_ENABLED case READER_MODE: @@ -543,14 +539,12 @@ void MoreMenuUI::_thumbSelected(void* data, Evas_Object*, void*) case VIEW_MOBILE_WEB: itemData->moreMenuUI->switchToMobileMode(); itemData->moreMenuUI->m_desktopMode = false; - itemData->moreMenuUI->closeMoreMenuClicked(std::string()); - itemData->moreMenuUI->clearItems(); + itemData->moreMenuUI->closeMoreMenuClicked(); break; case VIEW_DESKTOP_WEB: itemData->moreMenuUI->switchToDesktopMode(); itemData->moreMenuUI->m_desktopMode = true; - itemData->moreMenuUI->closeMoreMenuClicked(std::string()); - itemData->moreMenuUI->clearItems(); + itemData->moreMenuUI->closeMoreMenuClicked(); break; case SHARE: break; @@ -564,19 +558,6 @@ void MoreMenuUI::_thumbSelected(void* data, Evas_Object*, void*) } } -void MoreMenuUI::clearItems() -{ - hide(); - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_gengrid_clear(m_gengrid); - elm_object_tree_focus_allow_set(getContent(), EINA_FALSE); - m_map_menu_views.clear(); - evas_object_del(m_current_tab_bar); - elm_theme_extension_del(NULL, m_edjFilePath.c_str()); - elm_theme_full_flush(); - elm_cache_all_flush(); -} - void MoreMenuUI::_exitClicked() { BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); diff --git a/services/MoreMenuUI/MoreMenuUI.h b/services/MoreMenuUI/MoreMenuUI.h index c793b18..c8ed824 100644 --- a/services/MoreMenuUI/MoreMenuUI.h +++ b/services/MoreMenuUI/MoreMenuUI.h @@ -68,14 +68,8 @@ public: void setDesktopMode(bool desktopMode) {m_desktopMode = desktopMode;} - void show(Evas_Object *main_layout, bool desktopMode); - //TODO: remove this function after new view managment introduction. void showCurrentTab(); virtual std::string getName(); - void addItems(); - //TODO: remove this function after new view managment introduction. - void hide(); - void clearItems(); void setFavIcon(std::shared_ptr favicon); void setWebTitle(const std::string& title); void setURL(const std::string& url); @@ -87,20 +81,20 @@ public: void setFocus(Eina_Bool focusable); boost::signals2::signal addToBookmarkClicked; - //TODO: remove redundant argument from this signal. - boost::signals2::signal bookmarkManagerClicked; - boost::signals2::signal historyUIClicked; - boost::signals2::signal settingsClicked; - //TODO: remove redundant argument from this signal. - boost::signals2::signal closeMoreMenuClicked; + boost::signals2::signal bookmarkManagerClicked; + boost::signals2::signal historyUIClicked; + boost::signals2::signal settingsClicked; + boost::signals2::signal closeMoreMenuClicked; boost::signals2::signal switchToMobileMode; boost::signals2::signal switchToDesktopMode; boost::signals2::signal isBookmark; boost::signals2::signal deleteBookmark; private: Elm_Gengrid_Item_Class* createItemClass(); - Evas_Object* createMoreMenuLayout(Evas_Object* parent); - Evas_Object* createGengrid(Evas_Object* parent); + void createMoreMenuLayout(); + void createGengrid(); + void addItems(); + void clearItems(); 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 void _thumbSelected(void * data, Evas_Object * obj, void * event_info); diff --git a/services/SettingsUI/SettingsUI.cpp b/services/SettingsUI/SettingsUI.cpp index 7d88733..6457f75 100644 --- a/services/SettingsUI/SettingsUI.cpp +++ b/services/SettingsUI/SettingsUI.cpp @@ -104,14 +104,6 @@ Evas_Object* SettingsUI::createSettingsUILayout(Evas_Object* parent) return settings_layout; } -void SettingsUI::show(Evas_Object* parent) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - init(parent); - m_settings_layout = createSettingsUILayout(m_parent); - showUI(); -} - Evas_Object* SettingsUI::createActionBar(Evas_Object* settings_layout) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -268,18 +260,10 @@ void SettingsUI::close_clicked_cb(void* data, Evas_Object*, void*) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { SettingsUI * s_ui = static_cast(data); - s_ui->closeSettingsUIClicked(std::string()); - s_ui->clearItems(); + s_ui->closeSettingsUIClicked(); } } -void SettingsUI::hide() -{ - evas_object_hide(elm_layout_content_get(m_settings_layout, "action_bar_swallow")); - evas_object_hide(elm_layout_content_get(m_settings_layout, "settings_scroller_swallow")); - evas_object_hide(m_settings_layout); -} - void SettingsUI::_del_selected_data_clicked_cb(void *data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -301,7 +285,7 @@ void SettingsUI::_reset_mv_clicked_cb(void *data, Evas_Object*, void*) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { ItemData* itemData = static_cast(data); - itemData->settingsUI->resetMostVisitedClicked(std::string()); + itemData->settingsUI->resetMostVisitedClicked(); } } @@ -310,15 +294,9 @@ void SettingsUI::_reset_browser_clicked_cb(void *data, Evas_Object*, void*) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { ItemData* itemData = static_cast(data); - itemData->settingsUI->resetBrowserClicked(std::string()); + itemData->settingsUI->resetBrowserClicked(); } } -void SettingsUI::clearItems() -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - hide(); -} - } } diff --git a/services/SettingsUI/SettingsUI.h b/services/SettingsUI/SettingsUI.h index d07c9d4..2561000 100644 --- a/services/SettingsUI/SettingsUI.h +++ b/services/SettingsUI/SettingsUI.h @@ -43,13 +43,11 @@ public: virtual std::string getName(); Evas_Object* createActionBar(Evas_Object* settings_layout); Evas_Object* createSettingsPage(Evas_Object* settings_layout); - void clearItems(); - void hide(); - boost::signals2::signal resetBrowserClicked; - boost::signals2::signal resetMostVisitedClicked; - boost::signals2::signal deleteSelectedDataClicked; - boost::signals2::signal closeSettingsUIClicked; + boost::signals2::signal resetBrowserClicked; + boost::signals2::signal resetMostVisitedClicked; + boost::signals2::signal deleteSelectedDataClicked; + boost::signals2::signal closeSettingsUIClicked; private: Evas_Object* createSettingsUILayout(Evas_Object* parent); diff --git a/services/SimpleUI/CMakeLists.txt b/services/SimpleUI/CMakeLists.txt index 9771495..fe55ea3 100644 --- a/services/SimpleUI/CMakeLists.txt +++ b/services/SimpleUI/CMakeLists.txt @@ -82,6 +82,7 @@ set(edcFiles AuthenticationPopup.edc BookmarksManager.edc Tooltip.edc + ViewManager.edc ) foreach(edec ${edcFiles}) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 310cf54..c5b7ad3 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -76,12 +76,17 @@ SimpleUI::SimpleUI() BROWSER_LOGE("Failed to create main window"); setMainWindow(main_window); + m_viewManager = new ViewManager(main_window); + evas_object_size_hint_weight_set(main_window, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set (main_window, EVAS_HINT_FILL, EVAS_HINT_FILL); + + elm_win_resize_object_add(main_window, m_viewManager->getContent()); + evas_object_show(main_window); } SimpleUI::~SimpleUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_sessionService->getStorage()->deleteSession(m_currentSession); - /// \todo Auto-generated destructor stub evas_object_del(m_window.get()); ewk_context_delete(m_ewkContext); } @@ -124,18 +129,6 @@ int SimpleUI::exec(const std::string& _url) m_tabLimit = boost::any_cast (config.get("TAB_LIMIT")); m_favoritesLimit = boost::any_cast (config.get("FAVORITES_LIMIT")); - // Set up main window - //TODO: These functions seems redundant. Check if these functions are neccessary. - int width = 0; - int height = 0; - ecore_wl_screen_size_get(&width, &height); - evas_object_move(m_window.get(), 0, 0); - evas_object_resize(m_window.get(), width, height); - - elm_win_focus_highlight_style_set(m_window.get(), "invisible"); - - //set global show tooltip timeout - elm_config_tooltip_delay_set( boost::any_cast (config.get("TOOLTIP_DELAY"))); loadUIServices(); loadModelServices(); @@ -145,16 +138,13 @@ int SimpleUI::exec(const std::string& _url) initUIServices(); initModelServices(); - // create view layouts - elm_win_resize_object_add(m_window.get(), m_webPageUI->getContent()); connectModelSignals(); connectUISignals(); connectActions(); - // show main layout and window - evas_object_show(m_webPageUI->getContent()); - evas_object_show(m_window.get()); + //Push first view to stack. + m_viewManager->pushViewToStack(m_webPageUI.get()); } m_initialised = true; } @@ -169,7 +159,6 @@ int SimpleUI::exec(const std::string& _url) } else { openNewTab(url); } - m_webPageUI->getURIEntry().setFocus(); BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str()); return 0; @@ -205,6 +194,31 @@ void SimpleUI::loadUIServices() std::dynamic_pointer_cast (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.mainui")); + + m_tabUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.tabui")); + + m_historyUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyui")); + + m_settingsUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.settingsui")); + + m_moreMenuUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui")); + + m_bookmarkManagerUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkmanagerui")); } void SimpleUI::connectUISignals() @@ -213,14 +227,61 @@ void SimpleUI::connectUISignals() M_ASSERT(m_webPageUI.get()); m_webPageUI->getURIEntry().uriChanged.connect(boost::bind(&SimpleUI::filterURL, this, _1)); + m_webPageUI->backPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this)); + m_webPageUI->backPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::back, m_webEngine.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::forward, m_webEngine.get())); + m_webPageUI->stopLoadingPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::stopLoading, m_webEngine.get())); + m_webPageUI->reloadPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::reload, m_webEngine.get())); + m_webPageUI->showMainUI.connect(boost::bind(&SimpleUI::showMainUI, this)); + m_webPageUI->hideMainUI.connect(boost::bind(&MainUI::hideUI, m_mainUI)); + M_ASSERT(m_mainUI.get()); m_mainUI->getDetailPopup().openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2)); m_mainUI->openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2)); m_mainUI->mostVisitedTileClicked.connect(boost::bind(&SimpleUI::onMostVisitedTileClicked, this, _1, _2)); - 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_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this)); + m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this)); + m_mainUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this)); + + M_ASSERT(m_tabUI.get()); + m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::closeTabUI, this)); + m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this)); + m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1)); + m_tabUI->closeTabsClicked.connect(boost::bind(&SimpleUI::closeTabsClicked, this,_1)); + m_tabUI->newIncognitoTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this)); + m_tabUI->tabsCount.connect(boost::bind(&SimpleUI::tabsCount, this)); + + M_ASSERT(m_historyUI.get()); + m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryClicked, this)); + m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this)); + // desktop mode as default + m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, true)); + + M_ASSERT(m_settingsUI.get()); + m_settingsUI->closeSettingsUIClicked.connect(boost::bind(&SimpleUI::closeSettingsUI, this)); + m_settingsUI->deleteSelectedDataClicked.connect(boost::bind(&SimpleUI::settingsDeleteSelectedData, this,_1)); + m_settingsUI->resetMostVisitedClicked.connect(boost::bind(&SimpleUI::settingsResetMostVisited, this)); + m_settingsUI->resetBrowserClicked.connect(boost::bind(&SimpleUI::settingsResetBrowser, this)); + + M_ASSERT(m_moreMenuUI.get()); + m_moreMenuUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this)); + 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->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_moreMenuUI->isBookmark.connect(boost::bind(&SimpleUI::checkBookmark, this)); + m_moreMenuUI->deleteBookmark.connect(boost::bind(&SimpleUI::deleteBookmark, this)); + + M_ASSERT(m_bookmarkManagerUI.get()); + m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::closeBookmarkManagerUI, this)); + m_bookmarkManagerUI->bookmarkItemClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1)); + } void SimpleUI::loadModelServices() @@ -247,15 +308,37 @@ void SimpleUI::loadModelServices() (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.platforminputmanager")); - m_sessionService = std::dynamic_pointer_cast + m_sessionService = + std::dynamic_pointer_cast (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.sessionStorageService")); } void SimpleUI::initUIServices() { - m_webPageUI->init(m_window.get()); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT (m_viewManager); + + M_ASSERT(m_webPageUI.get()); + m_webPageUI->init(m_viewManager->getContent()); + + M_ASSERT(m_mainUI.get()); m_mainUI->init(m_webPageUI->getContent()); + + M_ASSERT(m_tabUI.get()); + m_tabUI->init(m_viewManager->getContent()); + + M_ASSERT(m_historyUI.get()); + m_historyUI->init(m_viewManager->getContent()); + + M_ASSERT(m_moreMenuUI.get()); + m_moreMenuUI->init(m_viewManager->getContent()); + + M_ASSERT(m_settingsUI.get()); + m_settingsUI->init(m_viewManager->getContent()); + + M_ASSERT(m_bookmarkManagerUI.get()); + m_bookmarkManagerUI->init(m_viewManager->getContent()); } void SimpleUI::initModelServices() @@ -282,8 +365,8 @@ void SimpleUI::connectModelSignals() m_webEngine->uriChanged.connect(boost::bind(&URIEntry::changeUri, &m_webPageUI->getURIEntry(), _1)); m_webEngine->uriOnTabChanged.connect(boost::bind(&SimpleUI::checkTabId,this,_1)); m_webEngine->webViewClicked.connect(boost::bind(&URIEntry::clearFocus, &m_webPageUI->getURIEntry())); - m_webEngine->backwardEnableChanged.connect(boost::bind(&SimpleUI::backEnable, this, _1)); - m_webEngine->forwardEnableChanged.connect(boost::bind(&SimpleUI::forwardEnable, this, _1)); + m_webEngine->backwardEnableChanged.connect(boost::bind(&WebPageUI::setBackButtonEnabled, m_webPageUI.get(), _1)); + m_webEngine->forwardEnableChanged.connect(boost::bind(&WebPageUI::setForwardButtonEnabled, m_webPageUI.get(), _1)); m_webEngine->loadStarted.connect(boost::bind(&SimpleUI::loadStarted, this)); m_webEngine->loadProgress.connect(boost::bind(&SimpleUI::progressChanged,this,_1)); m_webEngine->loadFinished.connect(boost::bind(&SimpleUI::loadFinished, this)); @@ -293,6 +376,9 @@ void SimpleUI::connectModelSignals() m_webEngine->tabCreated.connect(boost::bind(&SimpleUI::tabCreated, this)); m_webEngine->tabClosed.connect(boost::bind(&SimpleUI::tabClosed,this,_1)); m_webEngine->IMEStateChanged.connect(boost::bind(&SimpleUI::setwvIMEStatus, this, _1)); + m_webEngine->favIconChanged.connect(boost::bind(&MoreMenuUI::setFavIcon, m_moreMenuUI.get(), _1)); + m_webEngine->titleChanged.connect(boost::bind(&MoreMenuUI::setWebTitle, m_moreMenuUI.get(), _1)); + m_webEngine->uriChanged.connect(boost::bind(&MoreMenuUI::setURL, m_moreMenuUI.get(), _1)); m_favoriteService->bookmarkAdded.connect(boost::bind(&SimpleUI::onBookmarkAdded, this,_1)); m_favoriteService->bookmarkDeleted.connect(boost::bind(&SimpleUI::onBookmarkRemoved, this, _1)); @@ -333,27 +419,17 @@ void SimpleUI::connectActions() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_settingPrivateBrowsing->toggled.connect(boost::bind(&SimpleUI::settingsPrivateModeSwitch, this, _1)); - - //left bar - m_webPageUI->backPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::back, m_webEngine.get())); - m_webPageUI->backPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this)); - m_webPageUI->forwardPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::forward, m_webEngine.get())); - m_webPageUI->stopLoadingPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::stopLoading, m_webEngine.get())); - m_webPageUI->reloadPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::reload, m_webEngine.get())); - m_webPageUI->reloadPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this)); - - //right bar - m_webPageUI->showTabUI.connect(boost::bind(&SimpleUI::showTabUI, this)); - m_webPageUI->showMoreMenu.connect(boost::bind(&SimpleUI::showMoreMenu, this)); } void SimpleUI::switchViewToWebPage() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - M_ASSERT(m_webPageUI); - M_ASSERT(m_mainUI); + M_ASSERT(m_mainUI.get()); + M_ASSERT(m_viewManager); + if(m_webPageUI->isHomePageActive()) - m_mainUI->hide(); + m_mainUI->hideUI(); + m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), m_webEngine->getURI()); } @@ -378,19 +454,25 @@ bool SimpleUI::isErrorPageActive() return m_webPageUI->isErrorPageActive(); } +void SimpleUI::showMainUI() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_mainUI->showMostVisited(getMostVisitedItems()); + m_mainUI->showUI(); +} + void SimpleUI::switchViewToQuickAccess() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if(m_webPageUI->isHomePageActive()) - return; + M_ASSERT(m_viewManager); + m_viewManager->popStackTo(m_webPageUI.get()); m_webPageUI->switchViewToQuickAccess(m_mainUI->getContent()); m_webEngine->disconnectCurrentWebViewSignals(); - m_mainUI->showMostVisited(getMostVisitedItems()); } void SimpleUI::checkTabId(const tizen_browser::basic_webengine::TabId& id){ - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if(m_webEngine->currentTabId() != id || isErrorPageActive()){ BROWSER_LOGD("URL changed on non-visible tab, updating browser view"); switchToTab(id); @@ -399,18 +481,20 @@ void SimpleUI::checkTabId(const tizen_browser::basic_webengine::TabId& id){ void SimpleUI::openNewTab(const std::string &uri, bool desktopMode) { + BROWSER_LOGD("[%s:%d] uri =%s", __PRETTY_FUNCTION__, __LINE__, uri.c_str()); switchToTab(m_webEngine->addTab(uri, nullptr, desktopMode)); } -void SimpleUI::closeTab(){ - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); +void SimpleUI::closeTab() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); 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__); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_currentSession.removeItem(id.toString()); m_webEngine->closeTab(id); updateView(); @@ -418,6 +502,7 @@ void SimpleUI::closeTab(const tizen_browser::basic_webengine::TabId& id) bool SimpleUI::checkBookmark() { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (m_webPageUI->isHomePageActive()) return false; @@ -455,16 +540,8 @@ void SimpleUI::onHistoryAdded(std::shared_ptr historyItem, bool desktopMode) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + m_viewManager->popStackTo(m_webPageUI.get()); std::string historyAddress = historyItem->getUrl(); - if(m_historyUI) { // TODO: remove this section when naviframes will be available - m_historyUI->clearItems(); - closeHistoryUI(); - } - - if(m_moreMenuUI) { // TODO: remove this section when naviframes will be available - m_moreMenuUI->clearItems(); - closeMoreMenu(std::string()); - } openNewTab(historyAddress, desktopMode); } @@ -474,53 +551,33 @@ void SimpleUI::onMostVisitedTileClicked(std::shared_ptr< services::HistoryItem > m_mainUI->openDetailPopup(historyItem, m_historyService->getHistoryItemsByURL(historyItem->getUrl(), itemsNumber)); } -void SimpleUI::onClearHistoryClicked(const std::string&) +void SimpleUI::onClearHistoryClicked() { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); m_historyService->clearAllHistory(); - m_historyUI.reset(); } -void SimpleUI::onMostVisitedClicked(const std::string&) +void SimpleUI::onMostVisitedClicked() { - BROWSER_LOGD("[%s]", __func__); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); m_mainUI->showMostVisited(getMostVisitedItems()); } -void SimpleUI::onBookmarkButtonClicked(const std::string&) +void SimpleUI::onBookmarkButtonClicked() { - BROWSER_LOGD("[%s]", __func__); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); m_mainUI->showBookmarks(getBookmarks()); } -void SimpleUI::onBookmarkManagerButtonClicked(const std::string&) -{ - BROWSER_LOGD("[%s]", __func__); - m_mainUI->hide(); - - if(m_moreMenuUI) { // TODO: remove this section when naviframes will be available - m_moreMenuUI->clearItems(); - } - - showBookmarkManagerMenu(); -} - void SimpleUI::onBookmarkClicked(std::shared_ptr bookmarkItem) { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(m_viewManager); + m_viewManager->popStackTo(m_webPageUI.get()); std::string bookmarkAddress = bookmarkItem->getAddress(); - if(m_bookmarkManagerUI) { // TODO: remove this section when naviframes will be available - m_bookmarkManagerUI->clearItems(); - closeBookmarkManagerMenu(std::string()); - } - - if(m_moreMenuUI) { // TODO: remove this section when naviframes will be available - m_moreMenuUI->clearItems(); - closeMoreMenu(std::string()); - } openNewTab(bookmarkAddress); } -// Consider removing these functions void SimpleUI::onHistoryRemoved(const std::string& uri) { @@ -532,7 +589,6 @@ void SimpleUI::onReturnPressed(MenuButton *m) BROWSER_LOGD("[%s]", __func__); m_platformInputManager->returnPressed.disconnect_all_slots(); m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit)); - hidePopup.disconnect_all_slots(); m->hidePopup(); } @@ -549,16 +605,6 @@ void SimpleUI::onBackPressed() m_webEngine->backButtonClicked(); } -void SimpleUI::backEnable(bool enable) -{ - m_webPageUI->setBackButtonEnabled(enable); -} - -void SimpleUI::forwardEnable(bool enable) -{ - m_webPageUI->setForwardButtonEnabled(enable); -} - void SimpleUI::reloadEnable(bool enable) { m_webPageUI->setReloadButtonEnabled(enable); @@ -655,40 +701,35 @@ void SimpleUI::webEngineURLChanged(const std::string url) void SimpleUI::showTabUI() { 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->closeTabsClicked.connect(boost::bind(&SimpleUI::closeTabsClicked, this,_1)); - m_tabUI->newIncognitoTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this,_1)); - m_tabUI->tabsCount.connect(boost::bind(&SimpleUI::tabsCount, this)); - m_tabUI->show(m_window.get()); + M_ASSERT(m_viewManager); + m_viewManager->pushViewToStack(m_tabUI.get()); m_tabUI->addTabItems(m_webEngine->getTabContents()); } -void SimpleUI::closeTabUI(const std::string& str) +void SimpleUI::closeTabUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_tabUI = nullptr; + M_ASSERT(m_viewManager); + if (m_viewManager->topOfStack() == m_tabUI.get()) + m_viewManager->popTheStack(); } -void SimpleUI::newTabClicked(const std::string& str) +void SimpleUI::newTabClicked() { - BROWSER_LOGD("%s", __func__); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); switchViewToQuickAccess(); } void SimpleUI::tabClicked(const tizen_browser::basic_webengine::TabId& tabId) { - BROWSER_LOGD("%s", __func__); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_viewManager->popStackTo(m_webPageUI.get()); switchToTab(tabId); } void SimpleUI::closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId) { - BROWSER_LOGD("%s", __func__); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_webEngine->closeTab(tabId); } @@ -710,7 +751,7 @@ void SimpleUI::handleConfirmationRequest(basic_webengine::WebConfirmationPtr web std::string edjFilePath = EDJE_DIR; edjFilePath.append("SimpleUI/AuthenticationPopup.edj"); Eina_Bool layoutSetResult = elm_layout_file_set(popup_content, edjFilePath.c_str(), "authentication_popup"); - if(!layoutSetResult) + if (!layoutSetResult) throw std::runtime_error("Layout file not found: " + edjFilePath); #if PLATFORM(TIZEN) @@ -782,127 +823,65 @@ void SimpleUI::authPopupButtonClicked(PopupButtons button, std::shared_ptr - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyui")); - M_ASSERT(m_historyUI); - m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryClicked, this,_1)); - m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this)); - m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, true)); // desktop mode as default - m_historyUI->addHistoryItems(getHistory()); - m_historyUI->show(m_window.get()); - } + M_ASSERT(m_viewManager); + m_viewManager->pushViewToStack(m_historyUI.get()); + m_historyUI->addHistoryItems(getHistory()); } void SimpleUI::closeHistoryUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_historyUI->clearHistoryClicked.disconnect(boost::bind(&SimpleUI::onClearHistoryClicked, this,_1)); - m_historyUI->closeHistoryUIClicked.disconnect(boost::bind(&SimpleUI::closeHistoryUI, this)); - m_historyUI->historyItemClicked.disconnect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, true)); // desktop mode as default - m_historyUI.reset(); - m_moreMenuUI->setFocus(EINA_TRUE); + M_ASSERT(m_viewManager); + if (m_viewManager->topOfStack() == m_historyUI.get()) + m_viewManager->popTheStack(); } -void SimpleUI::showSettingsUI(const std::string& str) +void SimpleUI::showSettingsUI() { 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_ASSERT(m_viewManager); + m_viewManager->pushViewToStack(m_settingsUI.get()); } -void SimpleUI::closeSettingsUI(const std::string& str) +void SimpleUI::closeSettingsUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_settingsUI.reset(); - m_moreMenuUI->setFocus(EINA_TRUE); + M_ASSERT(m_viewManager); + if (m_viewManager->topOfStack() == m_settingsUI.get()) + m_viewManager->popTheStack(); } void SimpleUI::showMoreMenu() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - bool desktopMode = m_webPageUI->isHomePageActive() ? m_mainUI->isDesktopMode() : m_webEngine->isDesktopMode(); - if(!m_moreMenuUI){ - m_moreMenuUI = - std::dynamic_pointer_cast - - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui")); - M_ASSERT(m_moreMenuUI); - m_webEngine->favIconChanged.connect(boost::bind(&MoreMenuUI::setFavIcon, m_moreMenuUI.get(), _1)); - m_webEngine->titleChanged.connect(boost::bind(&MoreMenuUI::setWebTitle, m_moreMenuUI.get(), _1)); - m_webEngine->uriChanged.connect(boost::bind(&MoreMenuUI::setURL, m_moreMenuUI.get(), _1)); - m_moreMenuUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this, _1)); - m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this,_1)); - m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this,_1)); - m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this,_1)); - 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_moreMenuUI->isBookmark.connect(boost::bind(&SimpleUI::checkBookmark, this)); - m_moreMenuUI->deleteBookmark.connect(boost::bind(&SimpleUI::deleteBookmark, this)); - - m_moreMenuUI->show(m_window.get(), desktopMode); - m_moreMenuUI->showCurrentTab(); - - if(!m_webPageUI->isHomePageActive()) { - m_moreMenuUI->setFavIcon(m_webEngine->getFavicon()); - m_moreMenuUI->setWebTitle(m_webEngine->getTitle()); - m_moreMenuUI->setURL(m_webEngine->getURI()); - } - else { - m_moreMenuUI->setHomePageInfo(); - } + M_ASSERT(m_viewManager); - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + bool desktopMode = m_webPageUI->isHomePageActive() ? m_mainUI->isDesktopMode() : m_webEngine->isDesktopMode(); + m_moreMenuUI->setDesktopMode(desktopMode); + m_viewManager->pushViewToStack(m_moreMenuUI.get()); + m_moreMenuUI->showCurrentTab(); + + if(!m_webPageUI->isHomePageActive()) { + m_moreMenuUI->setFavIcon(m_webEngine->getFavicon()); + m_moreMenuUI->setWebTitle(m_webEngine->getTitle()); + m_moreMenuUI->setURL(m_webEngine->getURI()); + } + else { + m_moreMenuUI->setHomePageInfo(); } } -void SimpleUI::closeMoreMenu(const std::string& str) +void SimpleUI::closeMoreMenu() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_webEngine->favIconChanged.disconnect(boost::bind(&MoreMenuUI::setFavIcon, m_moreMenuUI.get(), _1)); - m_webEngine->titleChanged.disconnect(boost::bind(&MoreMenuUI::setWebTitle, m_moreMenuUI.get(), _1)); - m_webEngine->uriChanged.disconnect(boost::bind(&MoreMenuUI::setURL, m_moreMenuUI.get(), _1)); - m_moreMenuUI->bookmarkManagerClicked.disconnect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this, _1)); - m_moreMenuUI->historyUIClicked.disconnect(boost::bind(&SimpleUI::showHistoryUI, this,_1)); - m_moreMenuUI->settingsClicked.disconnect(boost::bind(&SimpleUI::showSettingsUI, this,_1)); - m_moreMenuUI->closeMoreMenuClicked.disconnect(boost::bind(&SimpleUI::closeMoreMenu, this,_1)); - m_moreMenuUI->switchToMobileMode.disconnect(boost::bind(&SimpleUI::switchToMobileMode, this)); - m_moreMenuUI->switchToDesktopMode.disconnect(boost::bind(&SimpleUI::switchToDesktopMode, this)); - m_moreMenuUI->addToBookmarkClicked.disconnect(boost::bind(&SimpleUI::addToBookmarks, this, _1)); - m_moreMenuUI->isBookmark.disconnect(boost::bind(&SimpleUI::checkBookmark, this)); - m_moreMenuUI->deleteBookmark.disconnect(boost::bind(&SimpleUI::deleteBookmark, this)); - m_moreMenuUI.reset(); - - // TODO: temporary showing proper view untin VieManger will be available - if (m_webPageUI->isHomePageActive()) { - m_webPageUI->switchViewToQuickAccess(m_mainUI->getContent()); - m_webEngine->disconnectCurrentWebViewSignals(); - m_mainUI->showMostVisited(getMostVisitedItems()); - } - else { - switchViewToWebPage(); - } + M_ASSERT(m_viewManager); + if (m_viewManager->topOfStack() == m_moreMenuUI.get()) + m_viewManager->popTheStack(); + else + BROWSER_LOGD("[%s:%d] WARNING!!! closeMoreMenu is not topOfStack", __PRETTY_FUNCTION__, __LINE__); } void SimpleUI::switchToMobileMode() @@ -910,6 +889,7 @@ void SimpleUI::switchToMobileMode() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (!m_webPageUI->isHomePageActive()) { m_webEngine->switchToMobileMode(); + m_viewManager->popStackTo(m_webPageUI.get()); m_webEngine->reload(); } else { m_mainUI->setDesktopMode(false); @@ -927,45 +907,20 @@ void SimpleUI::switchToDesktopMode() } } -void SimpleUI::showBookmarkManagerMenu() -{ - 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.connect(boost::bind(&SimpleUI::closeBookmarkManagerMenu, this,_1)); - m_bookmarkManagerUI->bookmarkItemClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1)); - m_bookmarkManagerUI->show(m_window.get()); - m_bookmarkManagerUI->addBookmarkItems(getBookmarks(ROOT_FOLDER)); - m_bookmarkManagerUI->showTopContent(); - } -} - -void SimpleUI::closeBookmarkManagerMenu(const std::string& str) +void SimpleUI::showBookmarkManagerUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_bookmarkManagerUI->closeBookmarkManagerClicked.disconnect(boost::bind(&SimpleUI::closeBookmarkManagerMenu, this,_1)); - m_bookmarkManagerUI->bookmarkItemClicked.disconnect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1)); - m_bookmarkManagerUI.reset(); - - if(m_moreMenuUI) { - closeMoreMenu(std::string()); - showMoreMenu(); - } - - if(m_mainUI) { - m_mainUI->showBookmarks(getBookmarks()); - } - m_moreMenuUI->setFocus(EINA_TRUE); + M_ASSERT(m_viewManager); + m_viewManager->pushViewToStack(m_bookmarkManagerUI.get()); + m_bookmarkManagerUI->addBookmarkItems(getBookmarks(ROOT_FOLDER)); } -void SimpleUI::hideHistory() +void SimpleUI::closeBookmarkManagerUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - hidePopup(); + M_ASSERT(m_viewManager); + if (m_viewManager->topOfStack() == m_bookmarkManagerUI.get()) + m_viewManager->popTheStack(); } void SimpleUI::settingsPointerModeSwitch(bool newState) @@ -997,7 +952,7 @@ void SimpleUI::settingsDeleteSelectedData(const std::string& str) void SimpleUI::onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr< PopupData > popupData) { - if(button == OK){ + 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()); @@ -1010,7 +965,7 @@ void SimpleUI::onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr< } } -void SimpleUI::settingsResetMostVisited(const std::string& str) +void SimpleUI::settingsResetMostVisited() { BROWSER_LOGD("[%s]: Deleting Hisory", __func__); SimplePopup *popup = SimplePopup::createPopup(); @@ -1024,13 +979,13 @@ void SimpleUI::settingsResetMostVisited(const std::string& str) void SimpleUI::onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) { - if(button == OK){ + if (button == OK) { BROWSER_LOGD("[%s]: OK", __func__); BROWSER_LOGD("[%s]: Deleting most visited", __func__); } } -void SimpleUI::settingsResetBrowser(const std::string& str) +void SimpleUI::settingsResetBrowser() { BROWSER_LOGD("[%s]: Deleting Hisory", __func__); SimplePopup *popup = SimplePopup::createPopup(); @@ -1044,7 +999,7 @@ void SimpleUI::settingsResetBrowser(const std::string& str) void SimpleUI::onResetBrowserButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) { - if(button == OK){ + if (button == OK) { BROWSER_LOGD("[%s]: OK", __func__); BROWSER_LOGD("[%s]: Resetting browser", __func__); } @@ -1052,7 +1007,7 @@ void SimpleUI::onResetBrowserButton(PopupButtons button, std::shared_ptr< PopupD void SimpleUI::tabLimitPopupButtonClicked(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) { - if(button == CLOSE_TAB){ + if (button == CLOSE_TAB) { BROWSER_LOGD("[%s]: CLOSE TAB", __func__); closeTab(); } @@ -1062,7 +1017,7 @@ void SimpleUI::tabCreated() { int tabs = m_webEngine->tabsCount(); - if(tabs > m_tabLimit) + if (tabs > m_tabLimit) { SimplePopup *popup = SimplePopup::createPopup(); popup->setTitle("Too many tabs open"); @@ -1093,7 +1048,7 @@ void SimpleUI::tabClosed(const tizen_browser::basic_webengine::TabId& id) { void SimpleUI::onNetworkError() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if(!m_networkErrorPopup){ + if (!m_networkErrorPopup) { m_networkErrorPopup = SimplePopup::createPopup(); m_networkErrorPopup->setTitle("Network Error"); m_networkErrorPopup->addButton(CONNECT); @@ -1109,14 +1064,6 @@ void SimpleUI::onNetErrorButtonPressed(PopupButtons, std::shared_ptr< PopupData m_networkErrorPopup = 0; } -void SimpleUI::onNetworkConnected() -{ - if(m_networkErrorPopup){ - delete m_networkErrorPopup; - m_networkErrorPopup = 0; - } -} - void SimpleUI::searchWebPage(std::string &text, int flags) { m_webEngine->searchOnWebsite(text, flags); @@ -1127,7 +1074,7 @@ void SimpleUI::addToBookmarks(int folder_id) BROWSER_LOGD("[%s,%d],", __func__, __LINE__); if (m_favoriteService) { - if( m_webEngine && !m_webEngine->getURI().empty()) + if (m_webEngine && !m_webEngine->getURI().empty()) { m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(), m_webEngine->getSnapshotData(373, 240), diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index a889e3f..251ed47 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -52,6 +52,7 @@ #include "WebConfirmation.h" #include "BookmarksManager.h" #include "Config.h" +#include "ViewManager.h" namespace tizen_browser{ namespace base_ui{ @@ -86,7 +87,6 @@ private: Evas_Object* createErrorLayout(Evas_Object* parent); - void backEnable(bool enable); void forwardEnable(bool enable); void stopEnable(bool enable); void reloadEnable(bool enable); @@ -107,13 +107,14 @@ private: void bookmarkAdded(); void bookmarkDeleted(); + void showMainUI(); void switchViewToQuickAccess(); void switchViewToWebPage(); void updateView(); void openNewTab(const std::string &uri, bool desktopMode = true); void switchToTab(const tizen_browser::basic_webengine::TabId& tabId); - void newTabClicked(const std::string &); + void newTabClicked(); void tabClicked(const tizen_browser::basic_webengine::TabId& tabId); void closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId); void tabCreated(); @@ -133,11 +134,10 @@ private: void onHistoryRemoved(const std::string& uri); void onOpenURLInNewTab(std::shared_ptr historyItem, bool desktopMode); void onMostVisitedTileClicked(std::shared_ptr historyItem, int itemsNumber); - void onClearHistoryClicked(const std::string&); + void onClearHistoryClicked(); - void onMostVisitedClicked(const std::string&); - void onBookmarkButtonClicked(const std::string&); - void onBookmarkManagerButtonClicked(const std::string&); + void onMostVisitedClicked(); + void onBookmarkButtonClicked(); void handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation); void authPopupButtonClicked(PopupButtons button, std::shared_ptr popupData); @@ -199,25 +199,21 @@ private: */ void deleteBookmark(void); - void showHistory(); - void hideHistory(); - void showTabUI(); - void closeTabUI(const std::string& str); + void closeTabUI(); void showMoreMenu(); - void closeMoreMenu(const std::string& str); + void closeMoreMenu(); void switchToMobileMode(); void switchToDesktopMode(); - void showHistoryUI(const std::string& str); + void showHistoryUI(); void closeHistoryUI(); void showURIBar(); void hideURIBar(); void hideSettingsMenu(); - void showSettingsUI(const std::string&); - void closeSettingsUI(const std::string&); - - void closeBookmarkManagerMenu(const std::string& str); - void showBookmarkManagerMenu(); + void showSettingsUI(); + void closeSettingsUI(); + void closeBookmarkManagerUI(); + void showBookmarkManagerUI(); void showPopup(Evas_Object *content, char* btn1_text, char* btn2_text); @@ -229,8 +225,8 @@ private: void settingsDeleteData(); void settingsDeleteFavorite(); void settingsDeleteSelectedData(const std::string& str); - void settingsResetMostVisited(const std::string& str); - void settingsResetBrowser(const std::string& str); + void settingsResetMostVisited(); + void settingsResetBrowser(); void onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr popupData); void onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr popupData); void onResetBrowserButton(PopupButtons button, std::shared_ptr popupData); @@ -241,14 +237,11 @@ private: int tabsCount(); void onNetworkError(); - void onNetworkConnected(); void onNetErrorButtonPressed(PopupButtons, std::shared_ptr); void onReturnPressed(MenuButton *m); void onBackPressed(); - boost::signals2::signal hidePopup; - std::string edjePath(const std::string &); Evas_Object *m_popup; @@ -274,6 +267,10 @@ private: int m_tabLimit; int m_favoritesLimit; bool m_wvIMEStatus; + + //helper object used to view management + ViewManager* m_viewManager; + // This context object is used to implicitly init internal ewk data used by opengl to create the first and // consecutive webviews in the application, otherwise we would encounter a crash after creating // the first web view diff --git a/services/SimpleUI/ViewManager.cpp b/services/SimpleUI/ViewManager.cpp index ca45d1a..2ccb448 100644 --- a/services/SimpleUI/ViewManager.cpp +++ b/services/SimpleUI/ViewManager.cpp @@ -22,6 +22,9 @@ */ #include +#include +#include +#include #include "ViewManager.h" #include "core/BrowserLogger.h" @@ -31,16 +34,22 @@ namespace tizen_browser{ namespace base_ui{ ViewManager::ViewManager(Evas_Object* parentWindow) - :m_mainLayout(nullptr) - ,m_previousTop(nullptr) + : m_mainLayout(nullptr) + , m_parentWindow(parentWindow) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); M_ASSERT(parentWindow); m_mainLayout = elm_layout_add(parentWindow); evas_object_size_hint_weight_set(m_mainLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set (m_mainLayout, EVAS_HINT_FILL, EVAS_HINT_FILL); - if(!elm_object_style_set (m_mainLayout,"content-back")) - BROWSER_LOGD("[%s:%d] elm_object_style_set falied.",__PRETTY_FUNCTION__, __LINE__); + + Eina_Bool ret = elm_layout_file_set(m_mainLayout, + (std::string(EDJE_DIR) + + std::string("SimpleUI/ViewManager.edj")).c_str(), + "main_layout"); + if (!ret) + BROWSER_LOGD("[%s:%d] elm_layout_file_set falied !!!",__PRETTY_FUNCTION__, __LINE__); + elm_win_resize_object_add(parentWindow, m_mainLayout); evas_object_show(m_mainLayout); } @@ -49,17 +58,14 @@ void ViewManager::popStackTo(interfaces::AbstractUIComponent* view) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); M_ASSERT(view); + interfaces::AbstractUIComponent* previousView = m_viewStack.top(); - if(!m_viewStack.empty()) - m_previousTop = m_viewStack.top(); - - while(!m_viewStack.empty()) + while(!m_viewStack.empty() && m_viewStack.top() != view) { - if (m_viewStack.top() == view) - break; m_viewStack.pop(); } - updateLayout(); + updateLayout(previousView); + BROWSER_LOGD("[%s:%d] new top: %p", __PRETTY_FUNCTION__, __LINE__, topOfStack()); } void ViewManager::popTheStack() @@ -67,26 +73,35 @@ void ViewManager::popTheStack() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if(!m_viewStack.empty()) { - m_previousTop = m_viewStack.top(); + interfaces::AbstractUIComponent* previousView = m_viewStack.top(); m_viewStack.pop(); - updateLayout(); + updateLayout(previousView); } + BROWSER_LOGD("[%s:%d] new top: %p", __PRETTY_FUNCTION__, __LINE__, topOfStack()); } void ViewManager::pushViewToStack(interfaces::AbstractUIComponent* view) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(view); + if (topOfStack() == view) + { + BROWSER_LOGD("[%s:%d] View %p is already on stack !!!", + __PRETTY_FUNCTION__, __LINE__, view); + return; + } + interfaces::AbstractUIComponent* previousView = topOfStack(); m_viewStack.push(view); - updateLayout(); + updateLayout(previousView); + BROWSER_LOGD("[%s:%d] new top: %p", __PRETTY_FUNCTION__, __LINE__, topOfStack()); } -void ViewManager::updateLayout() +void ViewManager::updateLayout(interfaces::AbstractUIComponent* previousView) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Evas_Object* swallowed = elm_layout_content_get(m_mainLayout, "elm.swallow.content"); - + Evas_Object* swallowed = elm_layout_content_get(m_mainLayout, "content"); if (!m_viewStack.empty()) { if (m_viewStack.top()->getContent() == swallowed) @@ -95,20 +110,21 @@ void ViewManager::updateLayout() __PRETTY_FUNCTION__, __LINE__); return; } - if(m_previousTop) - m_previousTop->hideUI(); - elm_layout_content_unset(m_mainLayout, "elm.swallow.content"); - elm_layout_content_set(m_mainLayout, "elm.swallow.content", m_viewStack.top()->getContent()); + if(previousView) + previousView->hideUI(); + elm_layout_content_unset(m_mainLayout, "content"); + elm_layout_content_set(m_mainLayout, "content", m_viewStack.top()->getContent()); + m_viewStack.top()->showUI(); } else { BROWSER_LOGD("[%s:%d] Stack is empty!!!",__PRETTY_FUNCTION__, __LINE__); - if(m_previousTop) - m_previousTop->hideUI(); + if(previousView) + previousView->hideUI(); - elm_layout_content_unset(m_mainLayout, "elm.swallow.content"); - elm_layout_content_set(m_mainLayout, "elm.swallow.content", nullptr); + elm_layout_content_unset(m_mainLayout, "content"); + elm_layout_content_set(m_mainLayout, "content", nullptr); } } @@ -118,5 +134,14 @@ Evas_Object* ViewManager::getContent() return m_mainLayout; } + +interfaces::AbstractUIComponent* ViewManager::topOfStack() +{ + if(!m_viewStack.empty()) + return m_viewStack.top(); + else + return nullptr; +} + }//namespace base_ui }//names1pace tizen_browser diff --git a/services/SimpleUI/ViewManager.h b/services/SimpleUI/ViewManager.h index 06d385d..e97fa24 100644 --- a/services/SimpleUI/ViewManager.h +++ b/services/SimpleUI/ViewManager.h @@ -79,12 +79,20 @@ public: */ Evas_Object* getContent(); +/** + * @brief Returns actual top of stack which is dispalyed. It stack is empty + * returns null. + * + * @return actual dispalyed view + */ + interfaces::AbstractUIComponent* topOfStack(); + private: - void updateLayout(); + void updateLayout(interfaces::AbstractUIComponent* previousView); private: Evas_Object* m_mainLayout; + Evas_Object* m_parentWindow; std::stack m_viewStack; - interfaces::AbstractUIComponent* m_previousTop; }; }//namespace base_ui diff --git a/services/SimpleUI/edc/ViewManager.edc b/services/SimpleUI/edc/ViewManager.edc new file mode 100644 index 0000000..9365225 --- /dev/null +++ b/services/SimpleUI/edc/ViewManager.edc @@ -0,0 +1,44 @@ + +######################################################################### +# Copyright (c) 2015 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. +########################################################################## + +# +# ViewManager.cpp +# +# Created on: Sep 22, 2015 +# Author: m.lapinski@samsung.com +# + +collections { + group { + name: "main_layout"; + parts { + part { + name: "content"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0.0 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + } + } + } + } +} diff --git a/services/TabUI/TabUI.cpp b/services/TabUI/TabUI.cpp index a3e0916..1024bc7 100644 --- a/services/TabUI/TabUI.cpp +++ b/services/TabUI/TabUI.cpp @@ -58,6 +58,7 @@ TabUI::~TabUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); elm_gengrid_item_class_free(m_item_class); + evas_object_del(m_gengrid); } void TabUI::createTabItemClass() @@ -73,24 +74,11 @@ void TabUI::createTabItemClass() } } -void TabUI::show(Evas_Object* parent) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - init(parent); - m_tab_layout = createTabUILayout(m_parent); - showUI(); -} - void TabUI::showUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); M_ASSERT(m_tab_layout); evas_object_show(m_tab_layout); - //regenerate gengrid - m_gengrid = createGengrid(m_tab_layout); - elm_object_part_content_set(m_tab_layout, "tab_gengrid", m_gengrid); - evas_object_show(m_gengrid); - evas_object_show(elm_layout_content_get(m_tab_layout, "action_bar")); evas_object_show(elm_layout_content_get(m_tab_layout, "top_bar")); } @@ -99,12 +87,10 @@ void TabUI::hideUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); M_ASSERT(m_tab_layout); - evas_object_hide(m_tab_layout); - - //delete gengrid - evas_object_del(m_gengrid); - m_gengrid = nullptr; + elm_gengrid_clear(m_gengrid); + m_map_tab_views.clear(); + evas_object_hide(m_tab_layout); evas_object_hide(elm_layout_content_get(m_tab_layout, "action_bar")); evas_object_hide(elm_layout_content_get(m_tab_layout, "top_bar")); } @@ -121,26 +107,29 @@ Evas_Object* TabUI::getContent() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); M_ASSERT(m_parent); if(!m_tab_layout) - m_tab_layout = createTabUILayout(m_parent); + createTabUILayout(); return m_tab_layout; } -Evas_Object* TabUI::createTabUILayout(Evas_Object* parent) +void TabUI::createTabUILayout() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(m_parent); - Evas_Object* tab_layout = elm_layout_add(parent); - elm_layout_file_set(tab_layout, m_edjFilePath.c_str(), "tab-layout"); - evas_object_size_hint_weight_set(tab_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(tab_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + m_tab_layout = elm_layout_add(m_parent); + elm_layout_file_set(m_tab_layout, m_edjFilePath.c_str(), "tab-layout"); + evas_object_size_hint_weight_set(m_tab_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_tab_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); //Create button bars and put them to layout's swallows - Evas_Object* buttonBar = createTopButtons(tab_layout); - elm_object_part_content_set(tab_layout, "top_bar", buttonBar); + Evas_Object* buttonBar = createTopButtons(m_tab_layout); + elm_object_part_content_set(m_tab_layout, "top_bar", buttonBar); - buttonBar = createActionBar(tab_layout); - elm_object_part_content_set(tab_layout, "action_bar", buttonBar); - return tab_layout; + buttonBar = createActionBar(m_tab_layout); + elm_object_part_content_set(m_tab_layout, "action_bar", buttonBar); + + m_gengrid = createGengrid(m_tab_layout); + elm_object_part_content_set(m_tab_layout, "tab_gengrid", m_gengrid); } Evas_Object* TabUI::createGengrid(Evas_Object* parent) @@ -206,22 +195,12 @@ void TabUI::_close_clicked(void* data, Evas_Object*, void*) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { TabUI * tabUI = static_cast(data); - tabUI->closeTabUIClicked(std::string()); - tabUI->clearItems(); + tabUI->closeTabUIClicked(); tabUI->editMode = false; tabUI->onOtherDevicesSwitch = false; } } -void TabUI::hide() -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - evas_object_hide(elm_layout_content_get(m_tab_layout, "action_bar")); - evas_object_hide(elm_layout_content_get(m_tab_layout, "top_bar")); - evas_object_hide(elm_layout_content_get(m_tab_layout, "tab_gengrid")); - evas_object_hide(m_tab_layout); -} - Evas_Object* TabUI::createTopButtons(Evas_Object* parent) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -252,8 +231,7 @@ void TabUI::_newtab_clicked(void * data, Evas_Object*, void*) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { TabUI* tabUI = static_cast(data); - tabUI->clearItems(); - tabUI->newTabClicked(std::string()); + tabUI->newTabClicked(); tabUI->editMode = false; tabUI->onOtherDevicesSwitch = false; } @@ -292,14 +270,13 @@ void TabUI::_newincognitotab_clicked(void* data, Evas_Object*, void*) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { TabUI* tabUI = static_cast(data); - tabUI->clearItems(); - tabUI->newIncognitoTabClicked(std::string()); + tabUI->newIncognitoTabClicked(); tabUI->editMode = false; tabUI->onOtherDevicesSwitch = false; } } -void TabUI::_closetabs_clicked(void* data, Evas_Object* obj, void*) +void TabUI::_closetabs_clicked(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { @@ -366,8 +343,6 @@ Evas_Object * TabUI::_tab_grid_content_get(void *data, Evas_Object *obj, const c TabItemData *itemData = static_cast(data); const char *part_name1 = "tab_thumbnail"; static const int part_name1_len = strlen(part_name1); - const char *part_name2 = "tab_thumbButton"; - static const int part_name2_len = strlen(part_name2); if (!strncmp(part_name1, part, part_name1_len)) { if (itemData->item->getThumbnail()) { @@ -389,7 +364,6 @@ void TabUI::_thumbSelected(void *data, Evas_Object*, void*) if (data) { TabItemData *itemData = static_cast(data); if (!itemData->tabUI->editMode) { - itemData->tabUI->clearItems(); itemData->tabUI->tabClicked(itemData->item->getId()); } else { itemData->tabUI->closeTabsClicked(itemData->item->getId()); @@ -398,20 +372,10 @@ void TabUI::_thumbSelected(void *data, Evas_Object*, void*) elm_gengrid_realized_items_update(itemData->tabUI->m_gengrid); int tabsNumber = *(itemData->tabUI->tabsCount()); BROWSER_LOGD("%s:%d %s, items: %d", __FILE__, __LINE__, __func__, tabsNumber); - if (!tabsNumber) - itemData->tabUI->hide(); } } } -void TabUI::clearItems() -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - hide(); - elm_gengrid_clear(m_gengrid); - m_map_tab_views.clear(); -} - Evas_Object* TabUI::createNoHistoryLabel() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -431,9 +395,10 @@ void TabUI::closeAllTabs() item->tabUI->closeTabsClicked(item->item->getId()); it = elm_gengrid_item_next_get(it); } - hide(); + closeTabUIClicked(); } + void TabUI::setEmptyGengrid(bool setEmpty) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -444,7 +409,7 @@ void TabUI::setEmptyGengrid(bool setEmpty) } } -void TabUI::_focus_in(void * data, Evas*, Evas_Object * obj, void * event_info) +void TabUI::_focus_in(void* data, Evas*, Evas_Object*, void* event_info) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); Evas_Event_Mouse_In* ee = (Evas_Event_Mouse_In*)event_info; diff --git a/services/TabUI/TabUI.h b/services/TabUI/TabUI.h index d650052..7ee21a6 100644 --- a/services/TabUI/TabUI.h +++ b/services/TabUI/TabUI.h @@ -42,21 +42,17 @@ public: void init(Evas_Object *parent); Evas_Object* getContent(); - void show(Evas_Object *parent); virtual std::string getName(); - void clearItems(); - void hide(); - void addTabItem(std::shared_ptr); void addTabItems(std::vector > items); boost::signals2::signal tabClicked; - boost::signals2::signal newTabClicked; - boost::signals2::signal newIncognitoTabClicked; + boost::signals2::signal newTabClicked; + boost::signals2::signal newIncognitoTabClicked; boost::signals2::signal closeTabsClicked; boost::signals2::signal openedTabsClicked; boost::signals2::signal onOtherDevicesClicked; - boost::signals2::signal closeTabUIClicked; + boost::signals2::signal closeTabUIClicked; boost::signals2::signal tabsCount; private: @@ -77,13 +73,14 @@ private: static void _onotherdevices_clicked(void * data, Evas_Object * obj, void * event_info); static void _focus_in(void * data, Evas*, Evas_Object * obj, void * event_info); - Evas_Object* createTabUILayout(Evas_Object* parent); + void createTabUILayout(); Evas_Object* createActionBar(Evas_Object* parent); Evas_Object* createGengrid(Evas_Object* parent); Evas_Object* createTopButtons(Evas_Object* parent); Evas_Object* createNoHistoryLabel(); void createTabItemClass(); void closeAllTabs(); + void addTabItem(std::shared_ptr); Evas_Object *m_tab_layout; Evas_Object *m_gengrid; diff --git a/services/WebPageUI/URIEntry.h b/services/WebPageUI/URIEntry.h index 691701e..b0e8b93 100644 --- a/services/WebPageUI/URIEntry.h +++ b/services/WebPageUI/URIEntry.h @@ -78,6 +78,7 @@ public: bool hasFocus() const; void setDisabled(bool disabled); + void editingCanceled(); private: static void activated(void* data, Evas_Object* obj, void* event_info); @@ -90,8 +91,6 @@ private: static void _uriEntryBtnClicked(void* data, Evas_Object* obj, void* event_info); void editingCompleted(); - void editingCanceled(); - void selectWholeText(); /** diff --git a/services/WebPageUI/WebPageUI.cpp b/services/WebPageUI/WebPageUI.cpp index f80a2e6..38f2bb3 100644 --- a/services/WebPageUI/WebPageUI.cpp +++ b/services/WebPageUI/WebPageUI.cpp @@ -63,12 +63,45 @@ Evas_Object* WebPageUI::getContent() void WebPageUI::showUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(m_mainLayout); + evas_object_show(m_mainLayout); + + evas_object_show(elm_object_part_content_get(m_mainLayout, "web_view")); + evas_object_show(m_URIEntry->getContent()); + evas_object_show(elm_object_part_content_get(m_mainLayout, "uri_bar_buttons_left")); + evas_object_show(elm_object_part_content_get(m_mainLayout, "uri_bar_buttons_right")); + + // set custom focus chain + elm_object_focus_custom_chain_unset(m_mainLayout); + elm_object_focus_custom_chain_append(m_mainLayout, m_rightButtonBar->getContent(), NULL); + if (!isHomePageActive()) + elm_object_focus_custom_chain_append(m_mainLayout, m_leftButtonBar->getContent(), NULL); + elm_object_focus_custom_chain_append(m_mainLayout, m_URIEntry->getContent(), NULL); + + if (m_homePageActive) { + m_URIEntry->setFocus(); + showMainUI(); + } else { + elm_object_focus_set(elm_object_part_content_get(m_mainLayout, "web_view"), EINA_TRUE); + } } + void WebPageUI::hideUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(m_mainLayout); elm_object_focus_custom_chain_unset(m_mainLayout); + evas_object_hide(m_mainLayout); + + if (m_homePageActive) + hideMainUI(); + + evas_object_hide(elm_object_part_content_get(m_mainLayout, "web_view")); + m_URIEntry->editingCanceled(); + evas_object_hide(m_URIEntry->getContent()); + evas_object_hide(elm_object_part_content_get(m_mainLayout, "uri_bar_buttons_left")); + evas_object_hide(elm_object_part_content_get(m_mainLayout, "uri_bar_buttons_right")); } void WebPageUI::loadStarted() @@ -109,13 +142,6 @@ void WebPageUI::setMainContent(Evas_Object* content) hideWebView(); elm_object_part_content_set(m_mainLayout, "web_view", content); evas_object_show(content); - - // set custom focus chain - elm_object_focus_custom_chain_unset(m_mainLayout); - elm_object_focus_custom_chain_append(m_mainLayout, m_rightButtonBar->getContent(), NULL); - if (!isHomePageActive()) - elm_object_focus_custom_chain_append(m_mainLayout, m_leftButtonBar->getContent(), NULL); - elm_object_focus_custom_chain_append(m_mainLayout, m_URIEntry->getContent(), NULL); } void WebPageUI::switchViewToErrorPage() @@ -130,7 +156,11 @@ void WebPageUI::switchViewToErrorPage() void WebPageUI::switchViewToWebPage(Evas_Object* content, const std::string uri) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_homePageActive = false; + if (m_homePageActive) + { + hideMainUI(); + m_homePageActive = false; + } setMainContent(content); evas_object_show(m_leftButtonBar->getContent()); updateURIBar(uri); @@ -140,8 +170,13 @@ void WebPageUI::switchViewToWebPage(Evas_Object* content, const std::string uri) void WebPageUI::switchViewToQuickAccess(Evas_Object* content) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + if (m_homePageActive) + return; + m_homePageActive = true; setMainContent(content); + showMainUI(); m_URIEntry->changeUri(""); m_leftButtonBar->setActionForButton("refresh_stop_button", m_reload); @@ -149,6 +184,7 @@ void WebPageUI::switchViewToQuickAccess(Evas_Object* content) elm_object_signal_emit(m_mainLayout, "shiftback_uri", "ui"); elm_object_signal_emit(m_URIEntry->getContent(), "shiftback_uribg", "ui"); hideProgressBar(); + m_URIEntry->setFocus(); } void WebPageUI::faviconClicked(void* data, Evas_Object*, const char*, const char*) @@ -280,6 +316,7 @@ void WebPageUI::hideProgressBar() void WebPageUI::hideWebView() { 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"); } @@ -322,4 +359,4 @@ void WebPageUI::showMoreMenuConnect() } } // namespace tizen_browser -} // namespace base_ui \ No newline at end of file +} // namespace base_ui diff --git a/services/WebPageUI/WebPageUI.h b/services/WebPageUI/WebPageUI.h index 2a71239..d9fd563 100644 --- a/services/WebPageUI/WebPageUI.h +++ b/services/WebPageUI/WebPageUI.h @@ -60,8 +60,11 @@ public: boost::signals2::signal reloadPage; boost::signals2::signal showTabUI; boost::signals2::signal showMoreMenu; + boost::signals2::signal hideMainUI; + boost::signals2::signal showMainUI; static void faviconClicked(void* data, Evas_Object* obj, const char* emission, const char* source); + private: void createLayout(); void createErrorLayout();