From e9cddc2ca1637e6dc37c323cb9131da879aa0418 Mon Sep 17 00:00:00 2001 From: "k.lis2" Date: Tue, 4 Aug 2015 10:27:40 +0200 Subject: [PATCH 01/16] Task TT-78 Implement Tab Manager view [Issue#] https://bugs.tizen.org/jira/browse/TT-78 [Problem] Task TT-78 Implement Tab Manager view [Cause] - [Solution] Add TabUI. Enable code referring to TabUI in SimpleUI. [Verify] Perform basic sanity check. Change-Id: I3745297ce0e82320ccd32d0897ac3d3716574fbc --- services/BookmarkService/BookmarkService.cpp | 5 +- services/CMakeLists.txt | 2 +- services/SimpleUI/CMakeLists.txt | 7 +- services/SimpleUI/SimpleUI.cpp | 30 +- services/SimpleUI/SimpleUI.h | 4 +- services/TabUI/CMakeLists.txt | 29 + services/TabUI/TabUI.cpp | 500 ++++++++ services/TabUI/TabUI.h | 99 ++ services/TabUI/edc/TabUI.edc | 1421 +++++++++++++++++++++++ services/TabUI/edc/error.edc | 144 +++ services/TabUI/images/btn_bar_incognito_dis.png | Bin 0 -> 3046 bytes services/TabUI/images/btn_bar_incognito_foc.png | Bin 0 -> 3029 bytes services/TabUI/images/btn_bar_incognito_nor.png | Bin 0 -> 3043 bytes services/TabUI/images/btn_bar_new_dis.png | Bin 0 -> 2980 bytes services/TabUI/images/btn_bar_new_foc.png | Bin 0 -> 2963 bytes services/TabUI/images/btn_bar_new_nor.png | Bin 0 -> 2977 bytes services/TabUI/images/btn_bar_stop_nor.png | Bin 0 -> 3255 bytes services/TabUI/images/ico_delete.png | Bin 0 -> 18365 bytes services/TabUI/images/web_frame_selected.png | Bin 0 -> 17687 bytes services/TabUI/images/web_shadow.png | Bin 0 -> 17700 bytes 20 files changed, 2215 insertions(+), 26 deletions(-) create mode 100644 services/TabUI/CMakeLists.txt create mode 100644 services/TabUI/TabUI.cpp create mode 100644 services/TabUI/TabUI.h create mode 100644 services/TabUI/edc/TabUI.edc create mode 100644 services/TabUI/edc/error.edc create mode 100644 services/TabUI/images/btn_bar_incognito_dis.png create mode 100644 services/TabUI/images/btn_bar_incognito_foc.png create mode 100644 services/TabUI/images/btn_bar_incognito_nor.png create mode 100644 services/TabUI/images/btn_bar_new_dis.png create mode 100644 services/TabUI/images/btn_bar_new_foc.png create mode 100644 services/TabUI/images/btn_bar_new_nor.png create mode 100644 services/TabUI/images/btn_bar_stop_nor.png create mode 100644 services/TabUI/images/ico_delete.png create mode 100644 services/TabUI/images/web_frame_selected.png create mode 100644 services/TabUI/images/web_shadow.png diff --git a/services/BookmarkService/BookmarkService.cpp b/services/BookmarkService/BookmarkService.cpp index a1ffdae..7e30362 100644 --- a/services/BookmarkService/BookmarkService.cpp +++ b/services/BookmarkService/BookmarkService.cpp @@ -207,8 +207,9 @@ std::vector > BookmarkService::getBookmarks(int fo { bp_bookmark_info_fmt bookmark_info; bp_bookmark_adaptor_get_easy_all(ids[i], &bookmark_info); - - std::shared_ptr bookmark = std::make_shared(std::string(bookmark_info.url),std::string(bookmark_info.title), std::string(""),(int) bookmark_info.parent, ids[i]); + std::string url = (bookmark_info.url != nullptr) ? bookmark_info.url : ""; + std::string title = (bookmark_info.title != nullptr) ? bookmark_info.title : ""; + std::shared_ptr bookmark = std::make_shared(url, title, std::string(""),(int) bookmark_info.parent, ids[i]); std::shared_ptr bi = std::make_shared(); bi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; diff --git a/services/CMakeLists.txt b/services/CMakeLists.txt index 1d32393..547901f 100644 --- a/services/CMakeLists.txt +++ b/services/CMakeLists.txt @@ -6,7 +6,7 @@ add_subdirectory(WebKitEngineService) add_subdirectory(MainUI) # MERGE_ME #add_subdirectory(HistoryUI) -#add_subdirectory(TabUI) +add_subdirectory(TabUI) add_subdirectory(SimpleUI) #MERGE_ME #add_subdirectory(SettingsUI) diff --git a/services/SimpleUI/CMakeLists.txt b/services/SimpleUI/CMakeLists.txt index bc3292c..62578b1 100644 --- a/services/SimpleUI/CMakeLists.txt +++ b/services/SimpleUI/CMakeLists.txt @@ -54,7 +54,7 @@ include_directories(${CMAKE_SOURCE_DIR}/services/MoreMenuUI) include_directories(${CMAKE_SOURCE_DIR}/services/MainUI) #MERGE_ME #include_directories(${CMAKE_SOURCE_DIR}/services/SettingsUI) -#include_directories(${CMAKE_SOURCE_DIR}/services/TabUI) +include_directories(${CMAKE_SOURCE_DIR}/services/TabUI) include_directories(${CMAKE_SOURCE_DIR}/services/PlatformInputManager) include_directories(${CMAKE_SOURCE_DIR}/services/SessionStorage) @@ -74,7 +74,7 @@ add_dependencies(${PROJECT_NAME} MainUI) #MERGE_ME #add_dependencies(${PROJECT_NAME} HistoryUI) #add_dependencies(${PROJECT_NAME} SettingsUI) -#add_dependencies(${PROJECT_NAME} TabUI) +add_dependencies(${PROJECT_NAME} TabUI) add_dependencies(${PROJECT_NAME} PlatformInputManager) add_dependencies(${PROJECT_NAME} SessionStorage) target_link_libraries(${PROJECT_NAME} SimpleURI) @@ -86,7 +86,8 @@ target_link_libraries(${PROJECT_NAME} MainUI) #MERGE_ME #target_link_libraries(${PROJECT_NAME} HistoryUI) #target_link_libraries(${PROJECT_NAME} SettingsUI) -#target_link_libraries(${PROJECT_NAME} TabUI) +target_link_libraries(${PROJECT_NAME} TabUI) +#MERGE_ME #target_link_libraries(${PROJECT_NAME} BookmarkManagerUI) target_link_libraries(${PROJECT_NAME} PlatformInputManager) target_link_libraries(${PROJECT_NAME} SessionStorage) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 381088f..edf05bd 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -65,7 +65,9 @@ SimpleUI::SimpleUI() #if MERGE_ME , m_settings() , m_moreMenuUI() +#endif , m_tabUI() +#if MERGE_ME , m_bookmarkManagerUI() #endif , m_mainUI() @@ -891,28 +893,22 @@ void SimpleUI::AddNewFolderPopup(std::string& str) void SimpleUI::showTabUI() { -#if MERGE_ME BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_tabUI = - std::dynamic_pointer_cast - - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.tabui")); - M_ASSERT(m_tabUI); - m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::closeTabUI, this,_1)); - m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this,_1)); - m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1)); - m_tabUI->newIncognitoTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this,_1)); - m_tabUI->show(m_window.get()); - m_tabUI->addTabItems(m_webEngine->getTabContents()); -#endif + m_tabUI = std::dynamic_pointer_cast + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.tabui")); + M_ASSERT(m_tabUI); + m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::closeTabUI, this,_1)); + m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this,_1)); + m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1)); + m_tabUI->newIncognitoTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this,_1)); + m_tabUI->show(m_window.get()); + m_tabUI->addTabItems(m_webEngine->getTabContents()); } void SimpleUI::closeTabUI(const std::string& str) { -#if MERGE_ME - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_tabUI = nullptr; -#endif + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_tabUI = nullptr; } void SimpleUI::newTabClicked(const std::string& str) diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index d106d49..ea7220c 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -41,9 +41,7 @@ #include "SettingsUI.h" #endif #include "MainUI.h" -#if MERGE_ME #include "TabUI.h" -#endif #include "ButtonBar.h" #include "HistoryService.h" #if MERGE_ME @@ -305,8 +303,8 @@ private: #if MERGE_ME std::shared_ptr m_historyUI; std::shared_ptr m_settingsUI; - std::shared_ptr m_tabUI; #endif + std::shared_ptr m_tabUI; std::shared_ptr m_zoomList; std::shared_ptr m_tabList; std::shared_ptr m_platformInputManager; diff --git a/services/TabUI/CMakeLists.txt b/services/TabUI/CMakeLists.txt new file mode 100644 index 0000000..570381c --- /dev/null +++ b/services/TabUI/CMakeLists.txt @@ -0,0 +1,29 @@ +project(TabUI) + +set(TabUI_SRCS + TabUI.cpp + ) + +set(TabUI_HEADERS + TabUI.h + ) + +include(Coreheaders) +include(EFLHelpers) + +include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) + +add_library(${PROJECT_NAME} SHARED ${TabUI_SRCS}) + +if(TIZEN_BUILD) + target_link_libraries(${PROJECT_NAME} ${pkgs_LDFLAGS}) +endif(TIZEN_BUILD) + +install(TARGETS ${PROJECT_NAME} + LIBRARY DESTINATION services + ARCHIVE DESTINATION services/static) + +include(EDCCompile) +EDJ_TARGET(TabUI.edj + ${CMAKE_CURRENT_SOURCE_DIR}/edc/TabUI.edc + ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/services/TabUI/TabUI.cpp b/services/TabUI/TabUI.cpp new file mode 100644 index 0000000..5646f26 --- /dev/null +++ b/services/TabUI/TabUI.cpp @@ -0,0 +1,500 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "TabUI.h" +#include "ServiceManager.h" +#include "BrowserLogger.h" +#include "Tools/EflTools.h" +#include "../Tools/BrowserImage.h" + +#define efl_scale (elm_config_scale_get() / elm_app_base_scale_get()) + +namespace tizen_browser{ +namespace base_ui{ + +EXPORT_SERVICE(TabUI, "org.tizen.browser.tabui") + +typedef struct _TabItemData +{ + std::shared_ptr item; + std::shared_ptr tabUI; +} TabItemData; + +struct ItemData{ + tizen_browser::base_ui::TabUI* tabUI; + Elm_Object_Item * e_item; +}; + +TabUI::TabUI() + : m_gengrid(NULL) + , m_tab_layout(NULL) + , m_genListTop(NULL) + , m_genListActionBar(NULL) + , m_parent(NULL) + , m_itemClassActionBar(NULL) + , m_itemClassTop(NULL) + , m_item_class(NULL) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + edjFilePath = EDJE_DIR; + edjFilePath.append("TabUI/TabUI.edj"); +} + +TabUI::~TabUI() +{ + +} + +void TabUI::show(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + //m_parent = p; + elm_theme_extension_add(NULL, edjFilePath.c_str()); + m_tab_layout = elm_layout_add(parent); + elm_layout_file_set(m_tab_layout, 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); + evas_object_show(m_tab_layout); + + showActionBar(); + showTopButtons(); + + m_gengrid = elm_gengrid_add(m_tab_layout); + elm_object_part_content_set(m_tab_layout, "tab_gengird", m_gengrid); + + evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, NULL); + evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, NULL); + evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this); + + if (!m_item_class) { + m_item_class = elm_gengrid_item_class_new(); + m_item_class->item_style = "tab_item"; + m_item_class->func.text_get = _grid_text_get; + m_item_class->func.content_get = _tab_grid_content_get; + m_item_class->func.state_get = NULL; + m_item_class->func.del = NULL; + } + + M_ASSERT(m_parent); + elm_gengrid_align_set(m_gengrid, 0, 0); + elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE); + elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE); + elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE); + elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_scroller_page_size_set(m_gengrid, 0, 327); + + evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); + + elm_gengrid_item_size_set(m_gengrid, 364 * efl_scale, 320 * efl_scale); +} + + +void TabUI::showActionBar() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(NULL, edjFilePath.c_str()); + m_genListActionBar = elm_genlist_add(m_tab_layout); + elm_object_part_content_set(m_tab_layout, "action_bar_genlist", m_genListActionBar); + elm_genlist_homogeneous_set(m_genListActionBar, EINA_FALSE); + elm_genlist_multi_select_set(m_genListActionBar, EINA_FALSE); + elm_genlist_select_mode_set(m_genListActionBar, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListActionBar, ELM_LIST_LIMIT); + elm_genlist_decorate_mode_set(m_genListActionBar, EINA_TRUE); + evas_object_size_hint_weight_set(m_genListActionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + // evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); + // evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, NULL);*/ + + m_itemClassActionBar = elm_genlist_item_class_new(); + m_itemClassActionBar->item_style = "action_bar_items"; + m_itemClassActionBar->func.text_get = NULL; // &listTopItemTextGet; + m_itemClassActionBar->func.content_get = &listActionBarContentGet; + m_itemClassActionBar->func.state_get = 0; + m_itemClassActionBar->func.del = 0; + + ItemData * id = new ItemData; + id->tabUI = this; + Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + id, + NULL, //parent item + ELM_GENLIST_ITEM_NONE,//item type + NULL, + NULL //data passed to above function + ); + id->e_item = elmItem; + ItemData * id2 = new ItemData; + id2->tabUI = this; + Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + id2, + NULL, //parent item + ELM_GENLIST_ITEM_NONE,//item type + NULL, + NULL //data passed to above function + ); + id2->e_item = elmItem2; + + ItemData * id3 = new ItemData; + id3->tabUI = this; + Elm_Object_Item* elmItem3 = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + id3, + NULL, //parent item + ELM_GENLIST_ITEM_NONE,//item type + NULL, + NULL //data passed to above function + ); + id3->e_item = elmItem3; + + /*ItemData * id4 = new ItemData; + id4->tabUI = this; + Elm_Object_Item* elmItem4 = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + //id.get(), //item data + id4, + NULL, //parent item + ELM_GENLIST_ITEM_NONE,//item type + NULL, + NULL //data passed to above function + ); + id4->e_item = elmItem4;*/ + + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + +} + +Evas_Object* TabUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part) +{ + //ItemData *itemData = reinterpret_cast(data); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!strcmp(part, "newtab_click")) + { + BROWSER_LOGD("############in new tab button part##################"); + Evas_Object *newtabButton = elm_button_add(obj); + elm_object_style_set(newtabButton, "tab_button"); + evas_object_smart_callback_add(newtabButton, "clicked", tizen_browser::base_ui::TabUI::_newtab_clicked, data); + return newtabButton; + } + else if(!strcmp(part, "newincognitotab_click")) + { + Evas_Object *newincognitotabButton = elm_button_add(obj); + elm_object_style_set(newincognitotabButton, "tab_button"); + evas_object_smart_callback_add(newincognitotabButton, "clicked", tizen_browser::base_ui::TabUI::_newincognitotab_clicked, data); + return newincognitotabButton; + } + else if(!strcmp(part, "closetabs_click")) + { + Evas_Object *closetabsButton = elm_button_add(obj); + elm_object_style_set(closetabsButton, "tab_button"); + evas_object_smart_callback_add(closetabsButton, "clicked", tizen_browser::base_ui::TabUI::_closetabs_clicked, data); + return closetabsButton; + } + else if(!strcmp(part, "close_click")) + { + Evas_Object *close_click = elm_button_add(obj); + elm_object_style_set(close_click, "tab_button"); + evas_object_smart_callback_add(close_click, "clicked", TabUI::close_clicked_cb, data); + return close_click; + } + return NULL; +} + +void TabUI::close_clicked_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData * id = static_cast(data); + id->tabUI->closeTabUIClicked(std::string()); + id->tabUI->clearItems(); +} + +void TabUI::hide() +{ + evas_object_hide(elm_layout_content_get(m_tab_layout, "action_bar_genlist")); + evas_object_hide(elm_layout_content_get(m_tab_layout, "top_bar_genlist")); + evas_object_hide(elm_layout_content_get(m_tab_layout, "tab_gengird")); + evas_object_hide(m_tab_layout); +} + +void TabUI::showTopButtons() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(NULL, edjFilePath.c_str()); + m_genListTop = elm_genlist_add(m_tab_layout); + elm_object_part_content_set(m_tab_layout, "top_bar_genlist", m_genListTop); + elm_genlist_homogeneous_set(m_genListTop, EINA_FALSE); + elm_genlist_multi_select_set(m_genListTop, EINA_FALSE); + elm_genlist_select_mode_set(m_genListTop, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListTop, ELM_LIST_LIMIT); + elm_genlist_decorate_mode_set(m_genListTop, EINA_TRUE); + evas_object_size_hint_weight_set(m_genListTop, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); + evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, NULL);*/ + + m_itemClassTop = elm_genlist_item_class_new(); + m_itemClassTop->item_style = "top_buttons"; + m_itemClassTop->func.text_get = NULL;// &listTapTopItemTextGet; + m_itemClassTop->func.content_get = &listTopButtonItemsContentGet; + m_itemClassTop->func.state_get = 0; + m_itemClassTop->func.del = 0; + + ItemData * id = new ItemData; + id->tabUI = this; + Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListTop, //genlist + m_itemClassTop, //item Class + id, + NULL, //parent item + ELM_GENLIST_ITEM_NONE,//item type + NULL, + NULL //data passed to above function + ); + id->e_item = elmItem; + ItemData * id2 = new ItemData; + id2->tabUI = this; + Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListTop, //genlist + m_itemClassTop, //item Class + id2, + NULL, //parent item + ELM_GENLIST_ITEM_NONE,//item type + NULL, + NULL //data passed to above function + ); + id2->e_item = elmItem2; + + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); +} + +Evas_Object* TabUI::listTopButtonItemsContentGet(void* data, Evas_Object* obj , const char* part) +{ + //ItemData *itemData = reinterpret_cast(data); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!strcmp(part, "openedtabs_button")) + { + Evas_Object *openedtabsButton = elm_button_add(obj); + elm_object_style_set(openedtabsButton, "tab_button"); + evas_object_smart_callback_add(openedtabsButton, "clicked", tizen_browser::base_ui::TabUI::_openedtabs_clicked, data); + return openedtabsButton; + } + else if(!strcmp(part, "onotherdevices_button")) + { + Evas_Object *onotherdevicesButton = elm_button_add(obj); + elm_object_style_set(onotherdevicesButton, "tab_button"); + evas_object_smart_callback_add(onotherdevicesButton, "clicked", tizen_browser::base_ui::TabUI::_onotherdevices_clicked, data); + return onotherdevicesButton; + } + return NULL; +} + +void TabUI::_newtab_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->tabUI->clearItems(); + itemData->tabUI->newTabClicked(std::string()); + +} +void TabUI::_openedtabs_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + /*ItemData* itemData = reinterpret_cast(data); + itemData->tabUI->newTabClicked(std::string());*/ +} + +void TabUI::_onotherdevices_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + /*ItemData* itemData = reinterpret_cast(data); + itemData->tabUI->newTabClicked(std::string());*/ +} + +void TabUI::_newincognitotab_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->tabUI->clearItems(); + itemData->tabUI->newIncognitoTabClicked(std::string()); +} + +void TabUI::_closetabs_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->tabUI->closeTabsClicked(std::string()); +} + +/* +char* TabUI::listItemTopTextGet(void* data, Evas_Object* obj , const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData * id = static_cast(data); + if(!strcmp(part, "Tabmanager")) + { + if(!id->h_item->getTitle().empty()){ + return strdup(id->h_item->getTitle().c_str()); + } + } + else if(!strcmp(part, "tab_url")) + { + if(!id->h_item->getUrl().empty()){ + return strdup(id->h_item->getUrl().c_str()); + } + } + return strdup(""); +} +*/ + +void TabUI::addTabItem(std::shared_ptr hi) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + if (m_map_tab_views.size() >= 10) + return; + TabItemData *itemData = new TabItemData(); + itemData->item = hi; + itemData->tabUI = std::shared_ptr(this); + Elm_Object_Item* tabView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, NULL, this); + m_map_tab_views.insert(std::pair(hi->getTitle(),tabView)); + + // unselect by default + elm_gengrid_item_selected_set(tabView, EINA_FALSE); + setEmptyGengrid(false); +} + +void TabUI::addTabItems(std::vector>items) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + int i = 0; + for (auto it = items.begin(); it != items.end(); ++it) { + i++; + if (i > 10) break; + addTabItem(*it); + } +} + + +char* TabUI::_grid_text_get(void *data, Evas_Object *obj, const char *part) +{ + TabItemData *itemData = reinterpret_cast(data); + if (!strcmp(part, "tab_title")) { + return strdup(itemData->item->getTitle().c_str()); + } + if (!strcmp(part, "tab_url")) { + //return strdup(itemData->item->getUrl().c_str()); + return strdup(""); + } + + return strdup(""); +} + +Evas_Object * TabUI::_tab_grid_content_get(void *data, Evas_Object *obj, const char *part) +{ + + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + TabItemData *itemData = reinterpret_cast(data); + + if (!strcmp(part, "tab_thumbnail")) { + if (itemData->item->getThumbnail()) { + Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->tabUI->m_parent); + return thumb; + } + else { + return NULL; + } + } + else if (!strcmp(part, "tab_thumbButton")) { + Evas_Object *thumbButton = elm_button_add(obj); + elm_object_style_set(thumbButton, "tab_thumbButton"); + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::TabUI::_thumbSelected, data); + return thumbButton; + } + return NULL; + +} + +void TabUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) +{ + Elm_Object_Item * selected = reinterpret_cast(event_info); + TabItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); + TabUI * self = reinterpret_cast(data); + +// self->historyClicked(itemData->item); +} + +void TabUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */ ) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + TabItemData * itemData = reinterpret_cast(data); + itemData->tabUI->clearItems(); + itemData->tabUI->tabClicked(itemData->item->getId()); +} + +void TabUI::clearItems() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + hide(); + elm_gengrid_clear(m_gengrid); + elm_genlist_clear(m_genListActionBar); + elm_genlist_clear(m_genListTop); + m_map_tab_views.clear(); +} + +Evas_Object* TabUI::createNoHistoryLabel() +{ + Evas_Object *label = elm_label_add(m_parent); + elm_object_text_set(label, "No favorite websites."); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + return label; +} + +void TabUI::setEmptyGengrid(bool setEmpty) +{ + if(setEmpty) { + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoHistoryLabel()); + } else { + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", NULL); + } +} + +void TabUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,in", "over2"); + + // selected manually + elm_gengrid_item_selected_set(item, EINA_TRUE); +} + +void TabUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,out", "over2"); + + // unselected manually + elm_gengrid_item_selected_set(item, EINA_FALSE); +} + +} +} diff --git a/services/TabUI/TabUI.h b/services/TabUI/TabUI.h new file mode 100644 index 0000000..505ca5a --- /dev/null +++ b/services/TabUI/TabUI.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef TABUI_H +#define TABUI_H + +#include +#include + +#include "AbstractUIComponent.h" +#include "AbstractService.h" +#include "ServiceFactory.h" +#include "service_macros.h" +#include "services/HistoryService/HistoryItem.h" +#include "TabId.h" +namespace tizen_browser{ +namespace base_ui{ + +class BROWSER_EXPORT TabUI + : public tizen_browser::interfaces::AbstractUIComponent + , public tizen_browser::core::AbstractService +{ +public: + TabUI(); + ~TabUI(); + void show(Evas_Object *main_layout); + virtual std::string getName(); + void showActionBar(); + void showTopButtons(); + void clearItems(); + void hide(); + + void addTabItem(std::shared_ptr); + void addTabItems(std::vector > items); +// void addBookmarkItem(std::shared_ptr); +// void addbookmarkItems(std::vector >); + + boost::signals2::signal tabClicked; + boost::signals2::signal newTabClicked; + boost::signals2::signal newIncognitoTabClicked; + boost::signals2::signal closeTabsClicked; + boost::signals2::signal openedTabsClicked; + boost::signals2::signal onOtherDevicesClicked; + boost::signals2::signal closeTabUIClicked; +private: + static Evas_Object* listActionBarContentGet(void *data, Evas_Object *obj, const char *part); + static Evas_Object* listTopButtonItemsContentGet(void *data, Evas_Object *obj, const char *part); + //static char* listItemTextGet(void *data, Evas_Object *obj, const char *part); + + static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); + static Evas_Object * _tab_grid_content_get(void *data, Evas_Object *obj, const char *part); + static void _itemSelected(void * data, Evas_Object * obj, void * event_info); + static void _item_deleted(void *data, Evas_Object *obj); + static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); + static void _deleteBookmark(void *data, Evas_Object *obj, void *event_info); + static void close_clicked_cb(void *data, Evas_Object *obj, void *event_info); + void setEmptyGengrid(bool setEmpty); + + static void _openedtabs_clicked(void * data, Evas_Object * obj, void * event_info); + static void _newtab_clicked(void * data, Evas_Object * obj, void * event_info); + static void _newincognitotab_clicked(void * data, Evas_Object * obj, void * event_info); + static void _closetabs_clicked(void * data, Evas_Object * obj, void * event_info); + static void _onotherdevices_clicked(void * data, Evas_Object * obj, void * event_info); +private: + Evas_Object *m_tab_layout; + Evas_Object *m_genListActionBar; + Elm_Genlist_Item_Class *m_itemClassActionBar; + Evas_Object *m_genListTop; + Elm_Genlist_Item_Class *m_itemClassTop; + Evas_Object *m_gengrid; + Evas_Object *m_parent; + + Elm_Gengrid_Item_Class * m_item_class; + std::map m_map_tab_views; + bool m_gengridSetup; + std::string edjFilePath; + Evas_Object *createNoHistoryLabel(); + + static void focusItem(void* data, Evas_Object* obj, void* event_info); + static void unFocusItem(void* data, Evas_Object* obj, void* event_info); +}; + +} +} + +#endif // BOOKMARKSUI_H diff --git a/services/TabUI/edc/TabUI.edc b/services/TabUI/edc/TabUI.edc new file mode 100644 index 0000000..e4e88cd --- /dev/null +++ b/services/TabUI/edc/TabUI.edc @@ -0,0 +1,1421 @@ +#define DEBUG_RECT_OVER(over_part, r, g, b) \ + part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ + \ +scale:1; \ + type : RECT; \ + repeat_events: 1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + color: r g b 128; \ + rel1 { to: over_part; relative: 0 0; } \ + rel2 { to: over_part; relative: 1 1; } \ + } \ + } + +collections +{ +#define WIDTH 1920 +#define HEIGHT 181 +#define ITEM_WIDTH 374 + + group{ + name: "elm/button/base/tab_button"; + parts{ + part{ + name: "button"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 0 0 0 0; + } + } + part{ + name: "over"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "button";} + rel2 { relative: 1.0 1.0;to: "button";} + color: 0 0 0 0; + } + } + } + programs{ + program { + name: "mouse_click"; + signal: "mouse,clicked,1"; + source: "over"; + script { + emit("elm,action,click", ""); + } + } + } + } + +group { name: "elm/button/base/tab_thumbButton"; + images { + image: "ico_delete.png" COMP; + } + parts { + part { name: "elm.swallow.content"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + visible: 1; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + } + } + } + + programs { + program { name: "mouse,clicked"; + signal: "mouse,down,1"; + source: "elm.swallow.content"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + } +} + +group { + name: "tab-layout"; + data { + item: "highlight_focus" "off"; + } + images { + image: "btn_bar_stop_nor.png" COMP; + } + color_classes{ + color_class{ + name: "defaultBgColor"; + color: 18 22 34 255; + } + color_class{ + name: "focusBgColor"; + color: 69 143 255 255; + } + color_class{ + name: "highlightBgColor"; + color: 69 143 255 102; + } + color_class{ + name: "imageHighlight"; + color: 255 255 255 102; + } + color_class{ + name: "focusbtBgColor"; + color: 22 120 224 255; + } + color_class{ + name: "titleTextColor"; + color: 74 74 74 255; + } + color_class{ + name: "focusTextColor"; + color: 255 255 255 255; + } + color_class{ + name: "highlightTextColor"; + color: 255 255 255 51; + } + color_class{ + name: "urlTextColor"; + color: 116 116 116 204; + } + color_class{ + name: "transparent"; + color: 0 0 0 0; + } + } + + images { + image: "web_shadow.png" COMP; + } + parts { + part { name: "action_bar_genlist_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1920 104; + max: 1920 104; + color: 70 143 254 255; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "top_bar_genlist_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1920 181; + max: 1920 181; + color: 70 143 254 255; + rel1 { + relative: 0 1; to: "action_bar_genlist_bg"; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "gengrid_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1920 714; + max: 1920 714; + color: 231 231 231 255; + rel1 { + relative: 0 1; to: "top_bar_genlist_bg"; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "no_of_tabs_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1920 81; + max: 1920 81; + color: 231 231 231 255; + rel1 { + relative: 0 1; to: "gengrid_bg"; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "action_bar_genlist"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1920 104; + max: 1920 104; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "action_bar_genlist_bg";} + rel2 { relative: 1.0 1.0; } + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "top_bar_genlist"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1920 181; + max: 1920 181; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "top_bar_genlist_bg"; offset: 0 0;} + rel2 { relative: 1.0 1.0; } + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "tab_gengird"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1920 714; + max: 1920 714; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "gengrid_bg"; offset: 63 63;} + rel2 { relative: 1.0 1.0; } + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "uri_bar_shadow"; + type: IMAGE; + scale: 1; + repeat_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + fixed: 0 0; + min: 1920 14; + max: 1920 14; + image.normal: "web_shadow.png"; + rel1 { relative: 0.0 1.0; to: "action_bar_genlist_bg"; } + rel2 { relative: 1.0 1.0; } + } + } + part { name: "text_genlist"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1920 81; + max: 1920 81; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "top_bar_genlist_bg"; offset: 0 0;} + rel2 { relative: 1.0 1.0; } + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } +} + + +/*group { name: "elm/genlist/base/openedtabs_onotherdevices"; + data { + item: "focus_highlight" "off"; + } + + parts { + part { name: "clipper"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 70 143 254 255; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "background"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; + rel1 { + relative: 0 0; + offset: 62 0; + } + rel2 { + relative: 1 1; + offset: 0 0; + } + } + } + part { name: "elm.swallow.empty"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 0.5; + rel1 { + relative: 0.5 0.5; + } + rel2 { + relative: 0.5 0.5; + } + } + } + } +}*/ + +group { name: "elm/gengrid/item/tab_item/default"; + data.item: "texts" "tab_title tab_url"; + data.item: "contents" "tab_thumbnail tab_thumbButton"; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 338 294; + max: 338 294; + visible: 1; + color: 255 255 255 255; + rel1.offset: -26 -26; + } + description { state: "selected"; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "tab_thumbnail"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.0; + color : 255 255 255 255; + min: 338 198; + max: 338 198; + rel1 { + relative: 0.0 0.0; to: "bg"; + } + rel2 { + relative: 1.0 1.0; to: "bg"; + } + } + description { state: "selected"; + inherit: "default" 0.0; + } + } + + part { name: "focus_highlight"; + type: IMAGE; + description { state: "default" 0.0; + rel1 { + to: "tab_thumbnail"; + relative: 0.0 0.0; + } + rel2 { + to: "tab_thumbnail"; + relative: 1.0 1.0; + } + image.normal: "web_frame_selected.png"; + image.border: 8 8 8 0; + image.border_scale: 1; + image.middle: NONE; + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "background"; + type: RECT; + description { state: "default" 0.0; + min: 338 87; + max: 338 87; + align: 0.0 0.0; + color: 255 255 255 255; + rel1 { + to: "tab_thumbnail"; + relative: 0.0 1.0; + } + rel2 { + relative: 1.0 1.0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "tab_title"; + type: TEXT; + description { state: "default" 0.0; + min: 300 48; + max: 300 48; + align: 0.0 0.5; + rel1 { + to: "background"; + relative: 0.0 0.0; + offset: 17 0; + } + rel2 { + to: "background"; + relative: 1.0 1.0; + } + color: 51 51 51 255; + text { + text: "Web page title"; + font: "Sans"; + size: 27; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "tab_url"; + type: TEXT; + description { state: "default" 0.0; + min: 300 48; + max: 300 48; + align: 0 0.5; + rel1 { + to: "tab_title"; + relative: 0.0 1.0; + } + rel2 { + to: "tab_title"; + relative: 1.0 1.0; + } + color: 153 153 153 255; + text { + text: "Web page url"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "tab_thumbButton"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "tab_thumbnail"; + rel2.to: "tab_thumbnail"; + } + } + + part { name: "over2"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "bg"; + rel2.to: "background"; + } + } + part { name: "over3"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "background"; + rel2.to: "background"; + } + } + } + + programs{ + program { name: "mouse_in"; + signal: "mouse,in"; + source: "over2"; + action: STATE_SET "selected" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "over2"; + action: STATE_SET "default" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + } +} +group { name: "elm/genlist/item/action_bar_items/default"; + min: 1920 104; + max: 1920 104; + data.item: "texts" "closetabs_text"; + data.item: "contents" "newtab_click newincognitotab_click closetabs_click close_click"; + images { + image: "btn_bar_new_nor.png" COMP; + image: "btn_bar_new_foc.png" COMP; + image: "btn_bar_incognito_nor.png" COMP; + image: "btn_bar_incognito_foc.png" COMP; + } + parts{ + part { + name: "bg_clipper"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + color: 255 255 255 255; + align: 0 0; + min: 1920 104; + max: 1920 104; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + } + } + + part { + name: "newtab_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 255 255 255 255; + align: 0 0; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 63 1;} + rel2 { relative: 1.0 1.0; to: "bg_clipper"; } + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part { + name: "newtab_icon"; + type: IMAGE; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "newtab_button";} + rel2 { relative: 1.0 1.0; to: "newtab_button";} + image.normal: "btn_bar_new_nor.png"; + } + description { state: "highlight" 0.0; + image.normal: "btn_bar_new_foc.png"; + inherit: "default" 0.0; + visible: 1; + } + description { state: "focus" 0.0; + inherit: "highlight" 0.0; + } + } + part { + name: "newtab_over"; + scale:1; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "newtab_button";} + rel2 { relative: 1.0 1.0; to: "newtab_button";} + color_class: transparent; + } + } + + part { + name: "newtab_click"; + scale:1; + type: SWALLOW; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "newtab_over";} + rel2 { relative: 1.0 1.0; to: "newtab_over";} + } + } + + part { + name: "newincognitotab_button_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 255 255 255 255; + align: 0 0; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 175 1;} + rel2 { relative: 1.0 1.0; to: "bg_clipper"; } + } + } + part { + name: "newincognitotab_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "newincognitotab_button_bg"; } + rel2 { relative: 1.0 1.0; to: "newincognitotab_button_bg"; } + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part { + name: "newincognitotab_icon"; + type: IMAGE; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "newincognitotab_button";} + rel2 { relative: 1.0 1.0; to: "newincognitotab_button";} + image.normal: "btn_bar_incognito_nor.png"; + } + description { state: "highlight" 0.0; + image.normal: "btn_bar_incognito_foc.png"; + inherit: "default" 0.0; + visible: 1; + } + description { state: "focus" 0.0; + inherit: "highlight" 0.0; + } + } + part { + name: "newincognitotab_over"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "newincognitotab_button";} + rel2 { relative: 1.0 1.0; to: "newincognitotab_button";} + color_class: transparent; + } + } + + part { + name: "newincognitotab_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "newincognitotab_over";} + rel2 { relative: 1.0 1.0; to: "newincognitotab_over";} + color_class: transparent; + } + } + + part { + name: "item3_bg"; + type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 348 65; + max: 348 65; + align: 0.5 0.5; + rel1 { relative: 0.0 0.0;to: "bg_clipper";} + rel2 { relative: 1.0 1.0;to: "bg_clipper";} + color : 255 255 255 255; + + } + } + + part { + name: "Tabmanager"; + scale:1; + mouse_events: 1; + type: TEXT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 .3; + min: 348 65; + max: 348 65; + color: 116 116 116 255; + rel1 { relative: 0.0 0.0; to: "item3_bg"; } + rel2 { relative: 1.0 1.0; to: "item3_bg"; } + text { + text: "Tab Manager"; + font: "Sans"; + size: 40; + align: 0.5 0.5; + } + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor1; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor1; + visible: 1; + } + } + part { + name: "closetabs_button_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 192 192 192 255; + align: 0 0; + min: 220 65; + max: 220 65; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 1500 20;} + rel2 { relative: 1.0 1.0; to: "bg_clipper"; } + } + } + part { + name: "closetabs_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + + min: 220 65; + max: 220 65; + rel1 { relative: 0.0 0.0; to: "closetabs_button_bg"; } + rel2 { relative: 1.0 1.0; to: "closetabs_button_bg"; } + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part{ + name: "closetabs_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "closetabs_button";} + rel2 { relative: 1.0 1.0;to: "closetabs_button";} + color: 0 0 0 255; + text { + text: "Close all"; + font: "Sans"; + size: 27; + align: 0.5 0.5; + } + } + } + + part { + name: "closetabs_over"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + + min: 220 65; + max: 220 65; + rel1 { relative: 0.0 0.0; to: "closetabs_button";} + rel2 { relative: 1.0 1.0; to: "closetabs_button";} + color_class: transparent; + } + } + + part { + name: "closetabs_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 220 65; + max: 220 65; + rel1 { relative: 0.0 0.0; to: "closetabs_over";} + rel2 { relative: 1.0 1.0; to: "closetabs_over";} + color_class: transparent; + } + } + part { + name: "close_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0.5; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 1758 0;} + rel2 { relative: 1.0 1.0; to: "bg_clipper";} + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusDelBgColor; + visible: 1; + } + } + part { + name: "close_icon"; + type: IMAGE; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_bg";} + rel2 { relative: 1.0 1.0; to: "close_bg";} + image.normal: "btn_bar_stop_nor.png"; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "focus" 0.0; + inherit: "highlight" 0.0; + } + } + part { + name: "close_over"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_bg";} + rel2 { relative: 1.0 1.0; to: "close_bg";} + color_class: transparent; + } + } + part { + name: "close_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_over";} + rel2 { relative: 1.0 1.0; to: "close_over";} + color_class: transparent; + } + } + + programs{ + + program { + name: "mouse_click_newtab"; + signal: "mouse,clicked,1"; + source: "newtab_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_newtab_click"; + signal: "mouse,in"; + source: "newtab_*"; + action: STATE_SET "highlight" 0.0; + target: "newtab_button"; + target: "newtab_over"; + target: "newtab_icon"; + } + program { + name: "mouse_out_newtab_click"; + signal: "mouse,out"; + source: "newtab_*"; + action: STATE_SET "default" 0.0; + target: "newtab_button"; + target: "newtab_over"; + target: "newtab_icon"; + } + + program { + name: "mouse_click_newincognitotab"; + + signal: "mouse,clicked,1"; + source: "newincognitotab_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_newincognitotab_click"; + signal: "mouse,in"; + source: "newincognitotab_*"; + action: STATE_SET "highlight" 0.0; + target: "newincognitotab_button"; + target: "newincognitotab_over"; + target: "newincognitotab_icon"; + } + program { + name: "mouse_out_newincognitotab_click"; + signal: "mouse,out"; + source: "newincognitotab_*"; + action: STATE_SET "default" 0.0; + target: "newincognitotab_button"; + target: "newincognitotab_over"; + target: "newincognitotab_icon"; + } + program { + name: "mouse_click_closetabs"; + signal: "mouse,clicked,1"; + source: "closetabs_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_closetabs_click"; + signal: "mouse,in"; + source: "closetabs_*"; + action: STATE_SET "highlight" 0.0; + target: "closetabs_button"; + target: "closetabs_over"; + target: "closetabs_text"; + } + program { + name: "mouse_out_closetabs_click"; + signal: "mouse,out"; + source: "closetabs_*"; + action: STATE_SET "default" 0.0; + target: "closetabs_button"; + target: "closetabs_over"; + target: "closetabs_text"; + } + program { + name: "mouse_in_close_click"; + signal: "mouse,in"; + source: "close_click"; + script { + emit("mouse_in_close_click", ""); + } + } + program { + name: "mouse_out_close_click"; + signal: "mouse,out"; + source: "close_click"; + script { + emit("mouse_out_close_click", ""); + } + } + program { + name: "mouse_in_close"; + signal: "mouse_in_close_click"; + source: ""; + action: STATE_SET "highlight" 0.0; + target: "close_over"; + target: "close_bg"; + target: "close_icon"; + } + program { + name: "mouse_out_close"; + signal: "mouse_out_close_click"; + source: ""; + action: STATE_SET "default" 0.0; + target: "close_over"; + target: "close_bg"; + target: "close_icon"; + } + } + } +} + +group { name: "elm/genlist/item/top_buttons/default"; + min: 1920 181; + max: 1920 181; + data.item: "texts" "openedtabs_button_text onotherdevices_button_text"; + data.item: "contents" "openedtabs_click onotherdevices_click"; + parts{ + part { + name: "bg_clipper"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 231 231 231 255; + align: 0 0; + min: 1920 181; + max: 1920 181; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + } + } + part { + name: "button_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 192 192 192 255; + align: 0 0; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 611 67;} + rel2 { relative: 1.0 1.0; to: "bg_clipper"; } + } + } + part { + name: "openedtabs_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0.5 0.5; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "button_bg"; } + rel2 { relative: 1.0 1.0; to: "button_bg"; } + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part{ + name: "openedtabs_over"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "openedtabs_button";} + rel2 { relative: 1.0 1.0;to: "openedtabs_button";} + color: 0 0 0 0; + } + } + part{ + name: "openedtabs_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "button_bg";} + rel2 { relative: 1.0 1.0;to: "button_bg";} + color: 0 0 0 255; + text { + text: "Opened Tabs"; + font: "Sans"; + size: 27; + align: 0.5 0.5; + } + } + } + + part { + name: "openedtabs_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "openedtabs_over";} + rel2 { relative: 1.0 1.0; to: "openedtabs_over";} + color_class: transparent; + } + } + part { + name: "onotherdevices_button_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 192 192 192 255; + align: 0 0; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 961 67;} + rel2 { relative: 1.0 1.0; to: "bg_clipper"; } + } + } + part { + name: "onotherdevices_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "onotherdevices_button_bg"; } + rel2 { relative: 1.0 1.0; to: "onotherdevices_button_bg"; } + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part{ + name: "onotherdevices_over"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "onotherdevices_button";} + rel2 { relative: 1.0 1.0;to: "onotherdevices_button";} + color: 0 0 0 0; + } + } + part{ + name: "onotherdevices_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "onotherdevices_button_bg";} + rel2 { relative: 1.0 1.0;to: "onotherdevices_button_bg";} + color: 0 0 0 255; + text { + text: "On Other Devices"; + font: "Sans"; + size: 27; + align: 0.5 0.5; + } + } + } + + part { + name: "onotherdevicess_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 348 65; + max: 348 65; + rel1 { relative: 0.0 0.0; to: "onotherdevices_over";} + rel2 { relative: 1.0 1.0; to: "onotherdevices_over";} + color_class: transparent; + } + } + } + programs{ + + program { + name: "mouse_click_openedtabs"; + signal: "mouse,clicked,1"; + source: "openedtabs_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_openedtabs_click"; + signal: "mouse,in"; + source: "openedtabs_*"; + action: STATE_SET "highlight" 0.0; + target: "openedtabs_button"; + target: "openedtabs_over"; + target: "openedtabs_text"; + } + program { + name: "mouse_out_openedtabs_click"; + signal: "mouse,out"; + source: "openedtabs_*"; + action: STATE_SET "default" 0.0; + target: "openedtabs_button"; + target: "openedtabs_over"; + target: "openedtabs_text"; + } + + program { + name: "mouse_click_onotherdevices"; + signal: "mouse,clicked,1"; + source: "onotherdevices_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_onotherdevices_click"; + signal: "mouse,in"; + source: "onotherdevices_*"; + action: STATE_SET "highlight" 0.0; + target: "onotherdevices_button"; + target: "onotherdevices_over"; + target: "onotherdevices_text"; + } + program { + name: "mouse_out_onotherdevices_click"; + signal: "mouse,out"; + source: "onotherdevices_*"; + action: STATE_SET "default" 0.0; + target: "onotherdevices_button"; + target: "onotherdevices_over"; + target: "onotherdevices_text"; + } + } + } +} diff --git a/services/TabUI/edc/error.edc b/services/TabUI/edc/error.edc new file mode 100644 index 0000000..0291971 --- /dev/null +++ b/services/TabUI/edc/error.edc @@ -0,0 +1,144 @@ +collections { + images { + image: "web_browsing_icon_error.png" COMP; + } + group { name: "error_message"; + styles { + style { name: "mssage_style"; + base: "font=Sans font_size=35 color=#d3d3d3 wrap=word align=0.5"; + } + style { name: "mssage_hint_style"; + base: "font=Sans font_size=24 color=#868686 wrap=word align=0.5"; + } + } + parts { + part{ + name: "message_background"; + type: RECT; + description{ + state: "default" 0.0; + visible: 1; + rel1.relative: 0 0; + rel2.relative: 1 1; + color: 42 50 64 255; + } + } + part{ + name: "error_message_background"; + type:RECT; + description{ + state: "default" 0.0; + visible: 1; + min: 1582 730; + max: 1582 730; + fixed: 1 1; + align: 0.5 0.5; + color: 30 38 50 153; + } + } + part{ + name: "err_ico"; + type: IMAGE; + description{ + state: "default" 0.0; + visible: 1; + min: 140 140; + max:140 140; + fixed: 1 1; + align: 0.5 0; + rel1{ + relative: 0 0; + offset:0 163; + to: "error_message_background"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + image{ + normal: "web_browsing_icon_error.png"; + } + } + } + + part{ + name: "error_text"; + type: TEXTBLOCK; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1502 96; + max: 1502 96; + //color: 211 211 211 255; + align: 0.5 0; + rel1{ + relative: 0 1; + to_x: "error_message_background"; + to_y: "err_ico"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + text{ + style: "mssage_style"; + text: "Server not found.
sdf Please check the followings:"; + //min: 0 0; + //max: 1 1; + //align: 1 0; + //size: 35; + } + } + } + + + part{ + name: "error_hint"; + type: TEXTBLOCK; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1502 117; + max: 1502 117; + color: 134 134 134 255; + align: 0.5 0; + rel1{ + relative: 0 1; + to_x: "error_message_background"; + to_y: "error_text"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + text{ + max: 0 1; + style: "mssage_hint_style"; + text: "Check for any typing error in URL.
" + "Check your network settings.
" + "Try again later.
" + "Click refresh to reload."; + } + } + } + } +/* + programs { + program { name: "mouse_down"; + signal: "mouse,down,1"; + source: "logo"; + action: STATE_SET "hide" 0.0; + target: "logo"; + } + program { name: "mouse_up"; + signal: "mouse,up,1"; + source: "logo"; + action: STATE_SET "default" 0.0; + target: "logo"; + } + } +*/ + } +} diff --git a/services/TabUI/images/btn_bar_incognito_dis.png b/services/TabUI/images/btn_bar_incognito_dis.png new file mode 100644 index 0000000000000000000000000000000000000000..a6bbd1a978f917137f1946242f61679153be6f71 GIT binary patch literal 3046 zcmX|@cQ_SnAII+#*(-Z@L{>PqY|gP~IC6~2h+`xpPgZo0EhE_-q3ltSqZ2Z-9U=1= z*&%u}I%K_`=X&4gkMHOEyRYlM?(6sc{&mOSFw>`};idrq&>I@)Sf2aea-*U+C#t&( zdT!Ld2DT3Xpk?`65Rm(V695`>4+P@I4R@aap9k(fzEDF10_yAUUAxjs`3XRRMro-)t7%@VG;iz~;|4s(0fKn~ zX$?rbZcK$?1zI7=@DiY<2f<*og{?pVIdJTEab5y9B!Q#Ic#;EH^>%F3eqF0!S`$BSDyLQrFQlv+VNWILM`>dt#V<-Q8|dcTa){3^fFTVls~5j^suQ#n}~S=cUt?p-NvZ02TtmhfgJ7 zb=(+L3XJz@(ba8o_uI4ue~}X1Y8kcaLBaa8&93j?-RKsk;-{uomX{}uI^p(CeKujI z==M9UHYfKE!_|&S``{Jp7s1=c^-UcNga+j>t6T6~J3h4M=F3WZ5kjvfsucOsIg? zMG^ozjXrH(MXAUz?okUvfoDH8PxK3}0*ssCGd}=s>j+69`|32isQ}O^h!B6P&9m3W zDbY&7+jeoLjrQ14@d;e0vmMR^r@4#a^>-AjiiC^C48G+PcZ7Y_;*)Q+aF0p%WsqvO z{=lH_%lOBMD!)y%DT10@yN8O!Nnkn-;+%jIOs3+EtuXr zeb=j&Qu(0j6Xp7otrb&oF`g266TFP8 zgI7gnRwk;_pwgmJf3sP!W~&ri(yZHPdlbQ--EAb|Afk^>AzZ|+Sxs5ZmeQ26o2skq z*GN@(74sA}>IAmjFWt`0|8yIZZ{kxr7u>w|hc^s%f;{p5Q@XEDhoY#X6QUr}5jfR8 zEBN`S@xi)@zbp{9Id5 zFx}3zG{u*Qm8hDinsg5i3>FQJ=P2Z<%S_0w<*nsSh!9y)mO(Gs~bx%mEz6P%_{T9(H(Dp;d*i94P0+mCMk$DIB#5- z6WW;r-SD}lV>`V$J?vxH(-U<{`q(LkNfL4y=B!^nq{J%rKS48D+El_ap(>7 zs@ucz)3@V0kpy;uC6Ei5yvM zk0(WEf>wB9efnB*W}d$zyVJ?hkMCgf{(_|1n0iZz7#& z^nM~*L#$25+{Rpw43Fwanlj#-f-nXjFy#2Pi$wtUdCIBd z=$Z>*-jmVi=SQZ1g%RDe#5L6>Rf5CLhk%`0;tGq+2b` z7yqZ;AUT=adpD1^+5%?+`F_5dXEa}a1br-e=6?8Y-|9>0Q94(8`WZP{_U^HZoFwu5 zzX^3QurviA94_QZFHbJD_~@nI0%<+-AMKe6JfG;Uk(fvL4nJ`T4>*PoJ8kMK?f-*-?~@>*`W zJzeOx;t=*p&+eX9Bx@>EyH6od5#6#B4eNeaH{27F?(gEVTkuO^#F@-eE0UbravNWV z|8vNF=#};Rd8lw@_r&>D)zf^d71N$7E2K2;;PiW^RVYF2e;)e>H0L+8|HZ#C{t0B+ e&j7&L85v*_6@b2P=uJ2;5*X^5>D0g-BmWEaN0s^j literal 0 HcmV?d00001 diff --git a/services/TabUI/images/btn_bar_incognito_foc.png b/services/TabUI/images/btn_bar_incognito_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..686e40d259b5b3bfb264c2594d504535b6f32570 GIT binary patch literal 3029 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 XCMjH_l#m?r%M^jGrjbSs)FJY}wa}D( literal 0 HcmV?d00001 diff --git a/services/TabUI/images/btn_bar_new_dis.png b/services/TabUI/images/btn_bar_new_dis.png new file mode 100644 index 0000000000000000000000000000000000000000..af49c5af52731fb146af572791cd28382e524afb GIT binary patch literal 2980 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 literal 0 HcmV?d00001 diff --git a/services/TabUI/images/btn_bar_stop_nor.png b/services/TabUI/images/btn_bar_stop_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..c5cdc11ca8ea537497a1a794d79d40362f8659a9 GIT binary patch literal 3255 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 literal 0 HcmV?d00001 diff --git a/services/TabUI/images/web_frame_selected.png b/services/TabUI/images/web_frame_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..4470ca4a328ef0d26bbe8a92764757a7a217b2a7 GIT binary patch literal 17687 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 SOF&k3)ON6OvCgyFvg_YNdqf}r literal 0 HcmV?d00001 diff --git a/services/TabUI/images/web_shadow.png b/services/TabUI/images/web_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..f9018b0a6e15ae5670b67d580b890d1950636066 GIT binary patch literal 17700 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 literal 0 HcmV?d00001 -- 2.7.4 From 4f3c9dd7f588a1e77b887de1f85ed40934f7b778 Mon Sep 17 00:00:00 2001 From: "k.lis2" Date: Tue, 4 Aug 2015 10:16:56 +0200 Subject: [PATCH 02/16] Task TT-76 Implement Bookmark view [Issue#] https://bugs.tizen.org/jira/browse/TT-76 [Task] TT-76 Implement Bookmark view [Cause] - [Solution] Add BookmarkManagerUI. Enable code referring to BookmarkManagerUI in SimpleUI. [Verify] Perform basic sanity check. Change-Id: I196746e4153d0b9ce86b562fbcd82f33068eef14 --- core/AbstractInterfaces/AbstractFavoriteService.h | 2 +- core/Tools/BookmarkItem.cpp | 13 +- core/Tools/BookmarkItem.h | 8 +- services/BookmarkManagerUI/AddNewFolderPopup.cpp | 142 +++ services/BookmarkManagerUI/AddNewFolderPopup.h | 59 ++ services/BookmarkManagerUI/BookmarkManagerUI.cpp | 549 ++++++++++ services/BookmarkManagerUI/BookmarkManagerUI.h | 106 ++ services/BookmarkManagerUI/CMakeLists.txt | 40 + .../BookmarkManagerUI/edc/AddNewFolderPopup.edc | 198 ++++ .../BookmarkManagerUI/edc/BookmarkManagerUI.edc | 1118 ++++++++++++++++++++ .../BookmarkManagerUI/images/btn_bar_new_dis.png | Bin 0 -> 2980 bytes .../BookmarkManagerUI/images/btn_bar_new_foc.png | Bin 0 -> 2963 bytes .../BookmarkManagerUI/images/btn_bar_new_nor.png | Bin 0 -> 2977 bytes .../BookmarkManagerUI/images/btn_bar_stop_nor.png | Bin 0 -> 3255 bytes services/BookmarkManagerUI/images/favicon.png | Bin 0 -> 13397 bytes .../BookmarkManagerUI/images/ic_add_bookmark.png | Bin 0 -> 2036 bytes .../images/ic_more_bookmark_foc.png | Bin 0 -> 2008 bytes .../images/ic_more_bookmark_nor.png | Bin 0 -> 2089 bytes .../images/ic_more_desktopview_foc.png | Bin 0 -> 4066 bytes .../images/ic_more_desktopview_nor.png | Bin 0 -> 4372 bytes .../BookmarkManagerUI/images/ic_more_exit_foc.png | Bin 0 -> 1558 bytes .../BookmarkManagerUI/images/ic_more_exit_nor.png | Bin 0 -> 1604 bytes .../images/ic_more_focusmode_foc.png | Bin 0 -> 2053 bytes .../images/ic_more_focusmode_nor.png | Bin 0 -> 2062 bytes .../images/ic_more_history_foc.png | Bin 0 -> 2892 bytes .../images/ic_more_history_nor.png | Bin 0 -> 2918 bytes .../images/ic_more_minibrowser_foc.png | Bin 0 -> 1472 bytes .../images/ic_more_minibrowser_nor.png | Bin 0 -> 1524 bytes .../images/ic_more_mobileview_foc.png | Bin 0 -> 3929 bytes .../images/ic_more_mobileview_nor.png | Bin 0 -> 4205 bytes .../images/ic_more_pointermode_foc.png | Bin 0 -> 3180 bytes .../images/ic_more_pointermode_nor.png | Bin 0 -> 3346 bytes .../images/ic_more_readermode_foc.png | Bin 0 -> 1943 bytes .../images/ic_more_readermode_nor.png | Bin 0 -> 2021 bytes .../images/ic_more_setting_foc.png | Bin 0 -> 4600 bytes .../images/ic_more_setting_nor.png | Bin 0 -> 4936 bytes .../BookmarkManagerUI/images/ic_more_share_foc.png | Bin 0 -> 2653 bytes .../BookmarkManagerUI/images/ic_more_share_nor.png | Bin 0 -> 2854 bytes .../BookmarkManagerUI/images/ic_more_zoom_foc.png | Bin 0 -> 3419 bytes .../BookmarkManagerUI/images/ic_more_zoom_nor.png | Bin 0 -> 3524 bytes .../images/ic_thumbnail_folder.png | Bin 0 -> 1522 bytes .../images/ic_thumbnail_folder_all.png | Bin 0 -> 1378 bytes .../images/ic_thumbnail_folder_mark.png | Bin 0 -> 1831 bytes .../images/ico_bg_round_shape_37x37.png | Bin 0 -> 18109 bytes services/BookmarkManagerUI/images/ico_delete.png | Bin 0 -> 18365 bytes .../BookmarkManagerUI/images/modal_dialogs_bg.png | 0 .../images/modal_dialogs_title_bg.png | 0 .../images/web_frame_selected.png | Bin 0 -> 17687 bytes services/BookmarkManagerUI/images/web_shadow.png | Bin 0 -> 17700 bytes services/BookmarkService/BookmarkService.cpp | 9 +- services/BookmarkService/BookmarkService.h | 2 +- services/CMakeLists.txt | 3 +- services/SimpleUI/CMakeLists.txt | 8 +- services/SimpleUI/SimpleUI.cpp | 10 - services/SimpleUI/SimpleUI.h | 7 +- 55 files changed, 2235 insertions(+), 39 deletions(-) create mode 100644 services/BookmarkManagerUI/AddNewFolderPopup.cpp create mode 100644 services/BookmarkManagerUI/AddNewFolderPopup.h create mode 100644 services/BookmarkManagerUI/BookmarkManagerUI.cpp create mode 100644 services/BookmarkManagerUI/BookmarkManagerUI.h create mode 100644 services/BookmarkManagerUI/CMakeLists.txt create mode 100644 services/BookmarkManagerUI/edc/AddNewFolderPopup.edc create mode 100644 services/BookmarkManagerUI/edc/BookmarkManagerUI.edc create mode 100644 services/BookmarkManagerUI/images/btn_bar_new_dis.png create mode 100644 services/BookmarkManagerUI/images/btn_bar_new_foc.png create mode 100644 services/BookmarkManagerUI/images/btn_bar_new_nor.png create mode 100644 services/BookmarkManagerUI/images/btn_bar_stop_nor.png create mode 100644 services/BookmarkManagerUI/images/favicon.png create mode 100644 services/BookmarkManagerUI/images/ic_add_bookmark.png create mode 100644 services/BookmarkManagerUI/images/ic_more_bookmark_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_bookmark_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_more_desktopview_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_desktopview_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_more_exit_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_exit_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_more_focusmode_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_focusmode_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_more_history_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_history_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_more_minibrowser_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_minibrowser_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_more_mobileview_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_mobileview_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_more_pointermode_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_pointermode_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_more_readermode_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_readermode_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_more_setting_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_setting_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_more_share_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_share_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_more_zoom_foc.png create mode 100644 services/BookmarkManagerUI/images/ic_more_zoom_nor.png create mode 100644 services/BookmarkManagerUI/images/ic_thumbnail_folder.png create mode 100644 services/BookmarkManagerUI/images/ic_thumbnail_folder_all.png create mode 100644 services/BookmarkManagerUI/images/ic_thumbnail_folder_mark.png create mode 100644 services/BookmarkManagerUI/images/ico_bg_round_shape_37x37.png create mode 100644 services/BookmarkManagerUI/images/ico_delete.png create mode 100644 services/BookmarkManagerUI/images/modal_dialogs_bg.png create mode 100644 services/BookmarkManagerUI/images/modal_dialogs_title_bg.png create mode 100644 services/BookmarkManagerUI/images/web_frame_selected.png create mode 100644 services/BookmarkManagerUI/images/web_shadow.png diff --git a/core/AbstractInterfaces/AbstractFavoriteService.h b/core/AbstractInterfaces/AbstractFavoriteService.h index 5c24c4f..4d32920 100644 --- a/core/AbstractInterfaces/AbstractFavoriteService.h +++ b/core/AbstractInterfaces/AbstractFavoriteService.h @@ -89,7 +89,7 @@ public: * * @return list of bookmark items in folder with id, folder_id */ - virtual std::vector > getBookmarks(int folder_id = 0)= 0; + virtual std::vector > getBookmarks(int folder_id = -1)= 0; /** * @brief Get bookmark folders from platform service and store it in private m_bookmarkFoldersList diff --git a/core/Tools/BookmarkItem.cpp b/core/Tools/BookmarkItem.cpp index 3f994fd..b427afd 100644 --- a/core/Tools/BookmarkItem.cpp +++ b/core/Tools/BookmarkItem.cpp @@ -31,23 +31,24 @@ namespace services{ BookmarkItem::BookmarkItem() : m_saved_id(0) -, m_url(std::string()) -, m_tittle(std::string()) -, m_thumbnail(std::shared_ptr()) -, m_favicon(std::shared_ptr()) +, m_url() +, m_title() +, m_note() +, m_thumbnail(std::make_shared()) +, m_favicon(std::make_shared()) { } BookmarkItem::BookmarkItem( const std::string& url, - const std::string& tittle, + const std::string& title, const std::string& note, unsigned int dir, unsigned int id ) : m_saved_id(id) , m_url(url) -, m_tittle(tittle) +, m_title(title) , m_note(note) , m_directory(dir) { diff --git a/core/Tools/BookmarkItem.h b/core/Tools/BookmarkItem.h index 84fe489..fd34070 100644 --- a/core/Tools/BookmarkItem.h +++ b/core/Tools/BookmarkItem.h @@ -36,7 +36,7 @@ public: BookmarkItem(); BookmarkItem( const std::string& url, - const std::string& tittle, + const std::string& title, const std::string& note, unsigned int dir = 0, unsigned int id = 0 @@ -46,8 +46,8 @@ public: void setAddress(const std::string & url) { m_url = url; }; std::string getAddress() const { return m_url; }; - void setTittle(const std::string & tittle) { m_tittle = tittle; }; - std::string getTittle() const { return m_tittle; }; + void setTittle(const std::string & tittle) { m_title = tittle; }; + std::string getTittle() const { return m_title; }; void setNote(const std::string& note){m_note = note;}; std::string getNote() const { return m_note;}; @@ -76,7 +76,7 @@ public: private: unsigned int m_saved_id; std::string m_url; - std::string m_tittle; + std::string m_title; std::string m_note; std::shared_ptr m_thumbnail; std::shared_ptr m_favicon; diff --git a/services/BookmarkManagerUI/AddNewFolderPopup.cpp b/services/BookmarkManagerUI/AddNewFolderPopup.cpp new file mode 100644 index 0000000..10b6114 --- /dev/null +++ b/services/BookmarkManagerUI/AddNewFolderPopup.cpp @@ -0,0 +1,142 @@ + + +#include +#include +#include + +#include "Tools/EflTools.h" +#include "BrowserLogger.h" + +#include "AddNewFolderPopup.h" +#include "BrowserLogger.h" +#include "ServiceManager.h" +#include "AbstractMainWindow.h" + + +namespace tizen_browser{ +namespace base_ui{ + +AddNewFolderPopup::AddNewFolderPopup(Evas_Object* main_layout) : + m_popup(nullptr), + m_cancel_button(nullptr), + m_editfield_entry(nullptr), + m_ok_button(nullptr), + m_mainLayout(main_layout) +{ +} + +AddNewFolderPopup::AddNewFolderPopup(Evas_Object *main_layout, Evas_Object *content, const std::string& message, + const std::string& title, const std::string& okButtonText, + const std::string& cancelButtonText) : + m_popup(nullptr), + m_cancel_button(nullptr), + m_editfield_entry(nullptr), + m_ok_button(nullptr), + m_content(content), + m_message(message), + m_title(title), + m_okButtonText(okButtonText), + m_cancelButtonText(cancelButtonText), + m_mainLayout(main_layout) +{ + +} + +void AddNewFolderPopup::setTitle(const std::string& title) +{ + m_title = title; +} + +void AddNewFolderPopup::setMessage(const std::string& message) +{ + m_message = message; +} + +void AddNewFolderPopup::setContent(Evas_Object* content) +{ + m_content = content; +} + +void AddNewFolderPopup::setOkButtonText(const std::string& okButtonText) +{ + m_okButtonText = okButtonText; +} + +void AddNewFolderPopup::setCancelButtonText(const std::string& cancelButtonText) +{ + m_cancelButtonText = cancelButtonText; +} + +void AddNewFolderPopup::show() +{ + std::string edjePath = std::string(EDJE_DIR); + edjePath.append("BookmarkManagerUI/AddNewFolderPopup.edj"); + elm_theme_extension_add(0, edjePath.c_str()); + m_popup = elm_popup_add(m_mainLayout); + evas_object_size_hint_weight_set(m_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + /* for margins */ + Evas_Object *layout = elm_layout_add(m_popup); + elm_layout_file_set(layout, edjePath.c_str() , "popup_input_text"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_content_set(m_popup, layout); + elm_object_part_text_set(m_popup, "title,text", m_title.c_str()); + + m_editfield_entry = elm_entry_add(layout); + elm_object_style_set(m_editfield_entry, "uri_entry_popup"); + evas_object_size_hint_weight_set(m_editfield_entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_editfield_entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_entry_editable_set(m_editfield_entry, EINA_TRUE); + elm_entry_cnp_mode_set(m_editfield_entry, ELM_CNP_MODE_PLAINTEXT); + elm_entry_scrollable_set(m_editfield_entry, EINA_TRUE); + elm_entry_autocapital_type_set(m_editfield_entry, ELM_AUTOCAPITAL_TYPE_NONE); + elm_entry_prediction_allow_set(m_editfield_entry, EINA_FALSE); + elm_entry_single_line_set(m_editfield_entry, EINA_TRUE); + + elm_entry_input_panel_layout_set(m_editfield_entry, ELM_INPUT_PANEL_LAYOUT_URL); + elm_entry_input_panel_return_key_type_set(m_editfield_entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE); + elm_object_part_content_set(layout, "elm.swallow.content" , m_editfield_entry); + elm_entry_cursor_end_set(m_editfield_entry); + + m_cancel_button = elm_button_add(m_popup); + elm_object_style_set(m_cancel_button, "popup"); + elm_object_part_content_set(m_popup, "button1",m_cancel_button); + elm_object_part_text_set(m_cancel_button, "elm.text", m_cancelButtonText.c_str()); + evas_object_smart_callback_add(m_cancel_button, "clicked", popup_cancel_cb, this); + + m_ok_button = elm_button_add(m_popup); + elm_object_style_set(m_ok_button, "popup"); + elm_object_part_content_set(m_popup, "button2", m_ok_button); + elm_object_part_text_set(m_ok_button, "elm.text", m_okButtonText.c_str()); + evas_object_smart_callback_add(m_ok_button, "clicked", popup_ok_cb, this); + + evas_object_show(m_popup); +} + +void AddNewFolderPopup::hide() +{ + evas_object_hide(m_popup); + elm_object_signal_emit(m_mainLayout, "elm,state,hide", "elm"); +} + +void AddNewFolderPopup::popup_ok_cb(void *data, Evas_Object *, void*) +{ + BROWSER_LOGD("[%s],", __func__); + if (data != nullptr) + { + AddNewFolderPopup *ownPopup = static_cast(data); + ownPopup->on_ok(ownPopup->m_editfield_entry); + } +} +void AddNewFolderPopup::popup_cancel_cb(void *data, Evas_Object *, void*) +{ + BROWSER_LOGD("[%s],", __func__); + if (data != nullptr) + { + AddNewFolderPopup *ownPopup = static_cast(data); + ownPopup->on_cancel(ownPopup->m_editfield_entry); + } +} + +} +} diff --git a/services/BookmarkManagerUI/AddNewFolderPopup.h b/services/BookmarkManagerUI/AddNewFolderPopup.h new file mode 100644 index 0000000..4f2d6a5 --- /dev/null +++ b/services/BookmarkManagerUI/AddNewFolderPopup.h @@ -0,0 +1,59 @@ +#ifndef ADDNEWFOLDERPOPUP_H +#define ADDNEWFOLDERPOPUP_H + +#include +#include + +#include "AbstractUIComponent.h" +#include "AbstractService.h" +#include "ServiceFactory.h" +#include "service_macros.h" +#include "BookmarkItem.h" + + + +namespace tizen_browser{ +namespace base_ui{ + +class AddNewFolderPopup{ + +public: + AddNewFolderPopup(Evas_Object *main_layout); + AddNewFolderPopup(Evas_Object *main_layout, Evas_Object *content, const std::string& message, + const std::string& title, const std::string& okButtonText, const std::string& cancelButtonText); + + /* + * These setters should be called before showing popup. + */ + void setContent(Evas_Object *content); + void setMessage(const std::string &message); + void setTitle(const std::string &title); + void setOkButtonText(const std::string &okButtonText); + void setCancelButtonText(const std::string &cancelButtonText); + + void show(); + void hide(); + boost::signals2::signal on_ok; + boost::signals2::signal on_cancel; + + +private: + static void popup_ok_cb(void *data, Evas_Object *, void*); + static void popup_cancel_cb(void *data, Evas_Object *, void*); + Evas_Object *m_popup; + Evas_Object *m_cancel_button; + Evas_Object *m_editfield_entry; + Evas_Object *m_ok_button; + Evas_Object *m_content; + std::string m_message; + std::string m_title; + std::string m_okButtonText; + std::string m_cancelButtonText; + +protected: + Evas_Object *m_mainLayout; +}; + +} +} +#endif diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.cpp b/services/BookmarkManagerUI/BookmarkManagerUI.cpp new file mode 100644 index 0000000..a44f7bd --- /dev/null +++ b/services/BookmarkManagerUI/BookmarkManagerUI.cpp @@ -0,0 +1,549 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "AddNewFolderPopup.h" +#include "BookmarkManagerUI.h" +#include "ServiceManager.h" +#include "BrowserLogger.h" +#include "Tools/EflTools.h" +#include "../Tools/BrowserImage.h" + +namespace tizen_browser{ +namespace base_ui{ + +EXPORT_SERVICE(BookmarkManagerUI, "org.tizen.browser.bookmarkmanagerui") + +struct ItemData +{ + tizen_browser::base_ui::BookmarkManagerUI * m_bookmarkManager; + tizen_browser::services::BookmarkItem * h_item; + Elm_Object_Item * e_item; +}; + +typedef struct +{ + std::shared_ptr item; + std::shared_ptr bookmarkManagerUI; +} BookmarkItemData, BookmarkFolderItemData; + +BookmarkManagerUI::BookmarkManagerUI() + : m_genList(nullptr) + , popup_content(nullptr) + , b_mm_layout(nullptr) + , m_itemClass(nullptr) + , m_gengrid(nullptr) + , m_parent(nullptr) + , m_item_class(nullptr) + , m_detail_item_class(nullptr) + , m_gengridSetup(false) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + edjFilePath = EDJE_DIR; + edjFilePath.append("BookmarkManagerUI/BookmarkManagerUI.edj"); +} + +BookmarkManagerUI::~BookmarkManagerUI() +{ +} + +void BookmarkManagerUI::show(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_parent = parent; + m_folder.clear(); + elm_theme_extension_add(nullptr, edjFilePath.c_str()); + b_mm_layout = elm_layout_add(parent); + elm_layout_file_set(b_mm_layout, edjFilePath.c_str(), "bookmarkmanager-layout"); + evas_object_size_hint_weight_set(b_mm_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(b_mm_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(b_mm_layout); + + 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"); + evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, nullptr); + evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, nullptr); + evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this); + + if (!m_item_class) { + m_item_class = elm_gengrid_item_class_new(); + m_item_class->item_style = "grid_bm_item"; + m_item_class->func.text_get = _grid_text_get; + m_item_class->func.content_get = _grid_content_get; + m_item_class->func.state_get = nullptr; + m_item_class->func.del = nullptr; + } + + if (!m_detail_item_class) { + m_detail_item_class = elm_gengrid_item_class_new(); + m_detail_item_class->item_style = "grid_ds_item"; + m_detail_item_class->func.text_get = _grid_bookmark_text_get; + m_detail_item_class->func.content_get = _grid_bookmark_content_get; + m_detail_item_class->func.state_get = nullptr; + m_detail_item_class->func.del = nullptr; + } + + 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_TRUE); + elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_scroller_page_size_set(m_gengrid, 0, 327); + evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); + double efl_scale = elm_config_scale_get() / elm_app_base_scale_get(); + elm_gengrid_item_size_set(m_gengrid, 404 * efl_scale, 320 * efl_scale); +} + +void BookmarkManagerUI::showTopContent() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(nullptr, edjFilePath.c_str()); + m_genList = elm_genlist_add(b_mm_layout); + elm_object_part_content_set(b_mm_layout, "elm.swallow.genlist", m_genList); + elm_genlist_homogeneous_set(m_genList, EINA_FALSE); + elm_genlist_multi_select_set(m_genList, EINA_FALSE); + elm_genlist_select_mode_set(m_genList, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genList, ELM_LIST_LIMIT); + elm_genlist_decorate_mode_set(m_genList, EINA_TRUE); + evas_object_size_hint_weight_set(m_genList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); + evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/ + + m_itemClass = elm_genlist_item_class_new(); + m_itemClass->item_style = "topContent"; + m_itemClass->func.text_get = &listItemTextGet; + m_itemClass->func.content_get = &listItemContentGet; + m_itemClass->func.state_get = 0; + m_itemClass->func.del = 0; + + ItemData * id = new ItemData; + id->m_bookmarkManager = this; + Elm_Object_Item* elmItem = elm_genlist_item_append(m_genList, //genlist + m_itemClass, //item Class + id, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE, //item type + nullptr, + nullptr //data passed to above function + ); + id->e_item = elmItem; + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); +} + +Evas_Object* BookmarkManagerUI::listItemContentGet(void* data, Evas_Object* obj, const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if ((data != nullptr) && (obj != nullptr) && (part != nullptr)) + { + const char *part_name1 = "new_folder_click"; + const char *part_name2 = "close_click"; + static const int part_name1_len = strlen(part_name1); + static const int part_name2_len = strlen(part_name2); + ItemData * id = static_cast(data); + if(!strncmp(part_name1, part, part_name1_len)) + { + Evas_Object *new_folder_click = elm_button_add(obj); + elm_object_style_set(new_folder_click, "hidden_button"); + evas_object_smart_callback_add(new_folder_click, "clicked", BookmarkManagerUI::new_folder_clicked_cb, id); + return new_folder_click; + } + if(!strncmp(part_name2, part, part_name2_len)) + { + Evas_Object *close_click = elm_button_add(obj); + elm_object_style_set(close_click, "hidden_button"); + evas_object_smart_callback_add(close_click, "clicked", BookmarkManagerUI::close_clicked_cb, id); + return close_click; + } + } + 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(); + } +} + +void BookmarkManagerUI::new_folder_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->newFolderPopup(); + } +} + +void BookmarkManagerUI::newFolderPopup() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_popup.reset(new AddNewFolderPopup(m_parent, nullptr,"Add New Folder?","New Folder","Ok","Cancel")); + m_popup->on_ok.disconnect_all_slots(); + m_popup->on_ok.connect(boost::bind(&BookmarkManagerUI::NewFolderCreate, this, _1)); + m_popup->on_cancel.disconnect_all_slots(); + m_popup->on_cancel.connect(boost::bind(&BookmarkManagerUI::CancelClicked, this, _1)); + m_popup->show(); +} + +void BookmarkManagerUI::NewFolderCreate(Evas_Object * popup_content) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (popup_content != nullptr) + { + m_folderName = elm_entry_entry_get(popup_content); + saveFolderClicked(m_folderName.c_str(), 0,0); + m_popup->hide(); + } +} + +void BookmarkManagerUI::CancelClicked(Evas_Object * popup) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (popup != nullptr) + { + m_popup->hide(); + } +} + +char* BookmarkManagerUI::listItemTextGet(void* data, Evas_Object*, const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if ((data != nullptr) && (part != nullptr)) + { + const char *part_name = "folder_text"; + static const int part_name_len = strlen(part_name); + ItemData * id = static_cast(data); + if(!strncmp(part_name, part, part_name_len)) + { + if(!id->m_bookmarkManager->m_folder.empty()) + { + std::string s = std::string("Bookmark > ") + id->m_bookmarkManager->m_folder; + return strdup(s.c_str()); + } + } + } + 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; +} + +Evas_Object * BookmarkManagerUI::getContent() +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + return m_gengrid; +} + +void BookmarkManagerUI::setEmptyGengrid(bool setEmpty) +{ + if(setEmpty) { + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoHistoryLabel()); + } else { + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", nullptr); + } +} + +Evas_Object* BookmarkManagerUI::createNoHistoryLabel() +{ + Evas_Object *label = elm_label_add(m_parent); + if (label != nullptr) + { + elm_object_text_set(label, "No favorite websites."); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + } + return label; +} + +void BookmarkManagerUI::addBookmarkFolderItem(std::shared_ptr hi) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + BookmarkFolderItemData *itemData = new BookmarkFolderItemData(); + itemData->item = hi; + itemData->bookmarkManagerUI.reset(this); + Elm_Object_Item* BookmarkFolderView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, nullptr, this); + m_map_bookmark_folder_views.insert(std::pair(hi->getAddress(),BookmarkFolderView)); + elm_gengrid_item_selected_set(BookmarkFolderView, EINA_FALSE); + setEmptyGengrid(false); +} + +void BookmarkManagerUI::addBookmarkFolderItems(std::vector > items) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + for (auto it = items.begin(); it != items.end(); ++it) + { + addBookmarkFolderItem(*it); + } + elm_object_part_content_set(b_mm_layout, "elm.swallow.grid",getContent()); + evas_object_show(getContent()); +} + + +void BookmarkManagerUI::addBookmarkItem(std::shared_ptr hi) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + BookmarkItemData *itemData = new BookmarkItemData(); + itemData->item = hi; + itemData->bookmarkManagerUI.reset(this); + Elm_Object_Item* BookmarkView = elm_gengrid_item_append(m_gengrid, m_detail_item_class, itemData, nullptr, this); + m_map_bookmark_folder_views.insert(std::pair(hi->getAddress(),BookmarkView)); + elm_gengrid_item_selected_set(BookmarkView, EINA_FALSE); + setEmptyGengrid(false); +} + +void BookmarkManagerUI::addBookmarkItems(std::vector > items) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + for (auto it = items.begin(); it != items.end(); ++it) + { + addBookmarkItem(*it); + } + elm_object_part_content_set(b_mm_layout, "elm.swallow.grid",getContent()); + evas_object_show(getContent()); +} + +char* BookmarkManagerUI::_grid_text_get(void *data, Evas_Object *, const char *part) +{ + if ((data != nullptr) && (part != nullptr)) + { + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + BookmarkFolderItemData *itemData = static_cast(data); + const char *part_name1 = "page_title"; + const char *part_name2 = "page_url"; + static const int part_name1_len = strlen(part_name1); + static const int part_name2_len = strlen(part_name2); + ItemData * id = static_cast(data); + if (!strncmp(part_name1, part, part_name1_len) && !itemData->item->getTittle().empty()) + { + return strdup(itemData->item->getTittle().c_str()); + } + if (!strncmp(part_name2, part, part_name2_len) && !itemData->item->getAddress().empty()) + { + return strdup(itemData->item->getAddress().c_str()); + } + } + return strdup(""); +} + +Evas_Object * BookmarkManagerUI::_grid_content_get(void *data, Evas_Object *obj, const char *part) +{ + if ((data != nullptr) && (obj != nullptr) && (part != nullptr)) + { + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + BookmarkFolderItemData *itemData = static_cast(data); + const char *part_name1 = "elm.thumbnail"; + const char *part_name2 = "elm.thumbButton"; + static const int part_name1_len = strlen(part_name1); + static const int part_name2_len = strlen(part_name2); + if (!strncmp(part_name1, part, part_name1_len)) + { + Evas_Object * thumb = nullptr; + std::shared_ptr image = itemData->item->getThumbnail(); + if (image) + { + thumb = tizen_browser::tools::EflTools::getEvasImage(image, itemData->bookmarkManagerUI->m_parent); + } + return thumb; + } + else if (!strncmp(part_name2, part, part_name2_len)) + { + Evas_Object *thumbButton = elm_button_add(obj); + if (thumbButton != nullptr) + { + elm_object_style_set(thumbButton, "thumbButton"); + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::BookmarkManagerUI::_thumbSelected, data); + } + return thumbButton; + } + } + return nullptr; +} + +char* BookmarkManagerUI::_grid_bookmark_text_get(void *data, Evas_Object *, const char *part) +{ + if ((data != nullptr) && (part != nullptr)) + { + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + BookmarkItemData *itemData = static_cast(data); + const char *part_name1 = "page_title"; + const char *part_name2 = "page_url"; + static const int part_name1_len = strlen(part_name1); + static const int part_name2_len = strlen(part_name2); + if (!strncmp(part_name1, part, part_name1_len)) + { + return strdup(itemData->item->getTittle().c_str()); + } + else if (!strncmp(part_name2, part, part_name2_len)) + { + return strdup(itemData->item->getAddress().c_str()); + } + } + return strdup(""); +} + +Evas_Object * BookmarkManagerUI::_grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part) +{ + if ((data != nullptr) && (obj != nullptr) && (part != nullptr)) + { + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + BookmarkItemData *itemData = static_cast(data); + const char *part_name1 = "elm.thumbnail"; + const char *part_name2 = "elm.thumbButton"; + static const int part_name1_len = strlen(part_name1); + static const int part_name2_len = strlen(part_name2); + if (!strncmp(part_name1, part, part_name1_len)) + { + std::shared_ptr image = itemData->item->getThumbnail(); + if (image) + { + return tizen_browser::tools::EflTools::getEvasImage(image, itemData->bookmarkManagerUI->m_parent); + } + else + { + return nullptr; + } + } + else if (!strncmp(part_name2, part, part_name2_len)) + { + Evas_Object *thumbButton = elm_button_add(obj); + if (thumbButton != nullptr) + { + elm_object_style_set(thumbButton, "thumbButton"); + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::BookmarkManagerUI::_bookmark_thumbSelected, data); + } + return thumbButton; + } + } + return nullptr; +} + +void BookmarkManagerUI::_itemSelected(void * data, Evas_Object *, void * event_info) +{ + (void)data; + (void)event_info; +#if 0 + if ((data != nullptr) && (event_info != nullptr)) + { + Elm_Object_Item * selected = static_cast(event_info); + BookmarkManagerUI * self = static_cast(data); + HistoryItemData * itemData = static_cast(elm_object_item_data_get(selected)); + if (itemData != nullptr) + { + self->bookmarkClicked(itemData->item); + } + } +#endif +} + +void BookmarkManagerUI::_thumbSelected(void * data, Evas_Object *, void *) +{ + if (data != nullptr) + { + BookmarkFolderItemData * itemData = reinterpret_cast(data); + BROWSER_LOGD("Folder ID: %d" , itemData->item->getId()); + itemData->bookmarkManagerUI->set_folder(itemData->item->getTittle().c_str()); + itemData->bookmarkManagerUI->bookmarkFolderClicked(itemData->item->getId()); + } +} + + +void BookmarkManagerUI::_bookmark_thumbSelected(void * data, Evas_Object *, void *) +{ + (void)data; +#if 0 + if (data != nullptr) + { + HistoryItemData * itemData = reinterpret_cast(data); + itemData->bookmarkManagerUI->bookmarkClicked(itemData->item); + } +#endif +} + +void BookmarkManagerUI::clearItems() +{ + hide(); + BROWSER_LOGD("Deleting all items from gengrid"); + elm_gengrid_clear(m_gengrid); + elm_genlist_clear(m_genList); + m_map_bookmark_folder_views.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); + m_map_bookmark_folder_views.clear(); +} + +void BookmarkManagerUI::focusItem(void*, Evas_Object*, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (event_info != nullptr) + { + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,in", "over2"); + + // selected manually + elm_gengrid_item_selected_set(item, EINA_TRUE); + } +} + +void BookmarkManagerUI::unFocusItem(void*, Evas_Object*, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (event_info != nullptr) + { + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,out", "over2"); + + // unselected manually + elm_gengrid_item_selected_set(item, EINA_FALSE); + } +} + +} +} diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.h b/services/BookmarkManagerUI/BookmarkManagerUI.h new file mode 100644 index 0000000..419f508 --- /dev/null +++ b/services/BookmarkManagerUI/BookmarkManagerUI.h @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef BOOKMARKMANAGERUI_H +#define BOOKMARKMANAGERUI_H + +#include +#include + +#include "AbstractUIComponent.h" +#include "AbstractService.h" +#include "ServiceFactory.h" +#include "service_macros.h" +#include "services/HistoryService/HistoryItem.h" +#include "BookmarkItem.h" +#include "AddNewFolderPopup.h" + +namespace tizen_browser{ +namespace base_ui{ + +class BROWSER_EXPORT BookmarkManagerUI + : public tizen_browser::interfaces::AbstractUIComponent + , public tizen_browser::core::AbstractService +{ +public: + BookmarkManagerUI(); + ~BookmarkManagerUI(); + void show(Evas_Object *main_layout); + Evas_Object *getContent(); + Evas_Object *getGenList(); + void showTopContent(); + virtual std::string getName(); + void addBookmarkFolderItem(std::shared_ptr); + void addBookmarkFolderItems(std::vector >); + void addBookmarkItem(std::shared_ptr); + void addBookmarkItems(std::vector >); + void hide(); + void clearItems(); + void set_folder(const std::string &name) {m_folder = name;}; + void updateGengrid(); + void newFolderPopup(); + Evas_Object* createNoHistoryLabel(); + void setEmptyGengrid(bool setEmpty); + + boost::signals2::signal closeBookmarkManagerClicked; + boost::signals2::signal addNewFolderClicked; + boost::signals2::signal saveFolderClicked; + boost::signals2::signal bookmarkFolderClicked; + +private: + static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); + static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); + static char* _grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part); + static Evas_Object * _grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part); + + static void _itemSelected(void * data, Evas_Object * obj, void * event_info); + static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); + static void _bookmark_thumbSelected(void * data, Evas_Object *, void *); + + void NewFolderCreate(Evas_Object * popup_content); + void CancelClicked(Evas_Object * popup_content); + + 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 *); + static void new_folder_clicked_cb(void *data, Evas_Object *, void *); + +private: + std::string m_folderName; + Evas_Object *m_genList; + Evas_Object *popup_content; + std::shared_ptr m_popup; + Evas_Object *b_mm_layout; + Elm_Genlist_Item_Class *m_itemClass; + Evas_Object *m_gengrid; + Evas_Object *m_parent; + Elm_Gengrid_Item_Class * m_item_class; + Elm_Gengrid_Item_Class * m_detail_item_class; + std::map m_map_bookmark_folder_views; + std::string edjFilePath; + std::string m_folder; + bool m_gengridSetup; + + static void focusItem(void*, Evas_Object*, void* event_info); + static void unFocusItem(void*, Evas_Object*, void* event_info); +}; + +} +} + +#endif // BOOKMARKSUI_H diff --git a/services/BookmarkManagerUI/CMakeLists.txt b/services/BookmarkManagerUI/CMakeLists.txt new file mode 100644 index 0000000..7ff57b7 --- /dev/null +++ b/services/BookmarkManagerUI/CMakeLists.txt @@ -0,0 +1,40 @@ +project(BookmarkManagerUI) + +set(BookmarkManagerUI_SRCS + BookmarkManagerUI.cpp + AddNewFolderPopup.cpp + ) + +set(BookmarkManagerUI_HEADERS + BookmarkManagerUI.h + AddNewFolderPopup.h + ) + +include(Coreheaders) +include(EFLHelpers) + +include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) + +add_library(${PROJECT_NAME} SHARED ${BookmarkManagerUI_SRCS}) + +if(TIZEN_BUILD) + target_link_libraries(${PROJECT_NAME} ${pkgs_LDFLAGS}) +endif(TIZEN_BUILD) + +install(TARGETS ${PROJECT_NAME} + LIBRARY DESTINATION services + ARCHIVE DESTINATION services/static) + +#please do not add edc/ directory +set(edcFiles + BookmarkManagerUI.edc + AddNewFolderPopup.edc + ) + +foreach(edec ${edcFiles}) + string(REPLACE ".edc" ".edj" target_name ${edec}) + EDJ_TARGET(${target_name} + ${CMAKE_CURRENT_SOURCE_DIR}/edc/${edec} + ${CMAKE_CURRENT_BINARY_DIR}) +endforeach(edec) + diff --git a/services/BookmarkManagerUI/edc/AddNewFolderPopup.edc b/services/BookmarkManagerUI/edc/AddNewFolderPopup.edc new file mode 100644 index 0000000..3ae44b9 --- /dev/null +++ b/services/BookmarkManagerUI/edc/AddNewFolderPopup.edc @@ -0,0 +1,198 @@ +#define POPUP_EDITFIELD_LAYOUT_MINMAX_HEIGHT_INC 40 +#define POPUP_CONTENT_DEFAULT_PADDING_LEFT_MIN_INC 65 +#define POPUP_CONTENT_DEFAULT_PADDING_RIGHT_MIN_INC 65 + +collections { + +group { name: "elm/entry/selection/browser_entry"; + parts { + part { name: "bg"; + scale:1; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + } + } + } +} +group { name: "elm/entry/cursor/browser_entry"; + parts { + part { name: "bg"; + scale:1; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 22 120 237 255; + min: 2 36; + max: 2 36; + visible: 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { name: "focused"; + signal: "elm,action,focus"; + source: "elm"; + action: STATE_SET "focused" 0.0; + target: "bg"; + } + program { name: "unfocused"; + signal: "elm,action,unfocus"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + } + } +} +group { + name: "popup_input_text"; + parts { + part { + name: "elm.text.message"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + min: 0 0 ; + max: 670 80 ; + align: 0.0 0.5; + rel1 { + relative: 0.0 0.0; offset: 65 0; + } + rel2 { + relative: 1.0 1.0; + } + color: 0 0 0 255; + text + { text: "Add a New Folder?"; + font: "Sans,Edje-Vera"; + size: 34; + min: 0 1; + align: 0.0 0.5; + } + } + } + part { + name: "elm.swallow.content"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: 0 POPUP_EDITFIELD_LAYOUT_MINMAX_HEIGHT_INC; + max: -1 POPUP_EDITFIELD_LAYOUT_MINMAX_HEIGHT_INC; + align: 0.0 0.5; + min: 0 0 ; + max: 540 100 ; + rel1 { + relative: 0.0 1.0 ; + to: "elm.text.message"; + } + rel2 { + relative: 1.0 1.0; + } + } + } + } + } + group { + name: "elm/entry/base-single/uri_entry_popup"; + styles { + style { + name: "browser-entry-uri-style-unselected"; + base: "font=Sans:style=SVD_Medium font_size="34" wrap=none color=#515151"; + } + style { + name: "browser-entry-uri-style-selected"; + base: "font=Sans:style=SVD_Medium font_size="34" wrap=none color=#dddddd"; + } + } + data { + item: focus_highlight "off"; + } + parts { + + part { name: "bg"; + scale:1; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + } + } + + part { + name: "elm.guide"; + scale:1; + type: TEXTBLOCK; + mouse_events: 0; + description { state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + text { + style: "browser-entry-uri-style-unselected"; + min: 0 1; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "label.text.clip"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + } + } + part { + name: "elm.text"; + scale:1; + multiline: 0; + entry_mode: EDITABLE; + select_mode: DEFAULT; + cursor_mode: BEFORE; + type: TEXTBLOCK; + clip_to: "label.text.clip"; + source: "elm/entry/selection/browser_entry"; + source4: "elm/entry/cursor/browser_entry"; + description { state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + text { + style: "browser-entry-uri-style-unselected"; + min: 0 1; + } + } + } + } + programs { + program { name: "focus"; + signal: "load"; + source: ""; + action: FOCUS_SET; + target: "elm.text"; + } + program { name: "gdisabled"; + signal: "elm,guide,disabled"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "elm.guide"; + } + program { name: "genabled"; + signal: "elm,guide,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.guide"; + } + } +}//group +} diff --git a/services/BookmarkManagerUI/edc/BookmarkManagerUI.edc b/services/BookmarkManagerUI/edc/BookmarkManagerUI.edc new file mode 100644 index 0000000..6b29ccb --- /dev/null +++ b/services/BookmarkManagerUI/edc/BookmarkManagerUI.edc @@ -0,0 +1,1118 @@ +#define RESOURCE_IMAGE_LOSSY( FILE_NAME ) \ + group { \ + name: FILE_NAME; \ + images.image: FILE_NAME LOSSY 100; \ + parts { \ + part { name: "image"; \ + description { \ + state: "default" 0.0; \ + image.normal: FILE_NAME; \ + aspect: 1 1; \ + aspect_preference: BOTH; \ + } \ + } \ + } \ + } + +collections { + +RESOURCE_IMAGE_LOSSY("ic_more_exit_nor.png") +RESOURCE_IMAGE_LOSSY("btn_bar_new_nor.png") +RESOURCE_IMAGE_LOSSY("btn_bar_new_foc.png") +RESOURCE_IMAGE_LOSSY("ic_thumbnail_folder.png") +RESOURCE_IMAGE_LOSSY("ic_thumbnail_folder_all.png") +RESOURCE_IMAGE_LOSSY("ic_thumbnail_folder_mark.png") + +#define WIDTH 1920 +#define HEIGHT 181 +#define ITEM_WIDTH 1200 + + group { + name: "elm/genlist/item/topContent/default"; + min: WIDTH HEIGHT; + max: WIDTH HEIGHT; + images { + image: "ico_delete.png" COMP; + image: "ic_add_bookmark" COMP; + image: "thumbnail.png" COMP; + image: "btn_bar_stop_nor.png" COMP; + } + data.item: "texts" "webpage_title webpage_url folder_text"; + data.item: "contents" "favicon star_click close_click new_folder_click"; + color_classes{ + color_class{ + name: "defaultBgColor"; + color: 18 22 34 255; + } + color_class{ + name: "focusBgColor"; + color: 69 143 255 255; + } + color_class{ + name: "highlightBgColor"; + color: 69 143 255 102; + } + color_class{ + name: "imageHighlight"; + color: 255 255 255 102; + } + color_class{ + name: "focusDelBgColor"; + color: 96 114 146 255; + } + color_class{ + name: "titleTextColor"; + color: 74 74 74 255; + } + color_class{ + name: "focusTextColor"; + color: 255 255 255 255; + } + color_class{ + name: "highlightTextColor"; + color: 255 255 255 51; + } + color_class{ + name: "urlTextColor"; + color: 116 116 116 204; + } + color_class{ + name: "transparent"; + color: 0 0 0 0; + } + } + parts { + part { + name: "bg_rect"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 255 255 255 255; + align: 0 0; + min: 1920 285; + max: 1920 285; + rel1 { relative: 0.0 0.0; offset: 0 0;} + } + } + part { + name: "action_bar_bg"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1920 104; + max: 1920 104; + align: 0 0; + rel1 { relative: 0.0 0.0;to: "bg_rect"; offset: 0 0;} + rel2 { relative: 1.0 1.0;to: "bg_rect";} + color : 255 255 255 255; + } + } + part { name: "action_bar_shadow"; + type: IMAGE; + scale: 1; + repeat_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + fixed: 0 0; + min: 1920 5; + max: 1920 5; + image.normal: "web_shadow.png"; + rel1 { relative: 0.0 1.0; to: "action_bar_bg"; } + rel2 { relative: 1.0 1.0; } + } + } + part { + name: "new_folder_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "action_bar_bg"; offset: 10 0;} + rel2 { relative: 1.0 1.0; to: "action_bar_bg";} + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusDelBgColor; + visible: 1; + } + } + part { + name: "new_folder_icon"; + type: IMAGE; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "new_folder_bg";} + rel2 { relative: 1.0 1.0; to: "new_folder_bg";} + image.normal: "btn_bar_new_nor.png"; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "focus" 0.0; + inherit: "highlight" 0.0; + image.normal: btn_bar_new_foc.png; + } + } + part { + name: "new_folder_over"; + scale:1; + type: RECT; + mouse_events :1; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "new_folder_bg";} + rel2 { relative: 1.0 1.0; to: "new_folder_bg";} + color_class: transparent; + } + } + part { + name: "new_folder_click"; + scale:1; + type: SWALLOW; + mouse_events :1; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "new_folder_over";} + rel2 { relative: 1.0 1.0; to: "new_folder_over";} + color_class: transparent; + } + } + part { + name: "title_text"; + scale: 1; + type: TEXT; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "action_bar_bg";} + rel2 { relative: 1.0 1.0;to: "action_bar_bg";} + color: 116 116 116 255; + text { + text: "Bookmark Manager"; + font: "Sans"; + size: 42; + align: 0.5 0.5; + } + } + } + part { + name: "close_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0.5; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "action_bar_bg"; offset: 1828 0;} + rel2 { relative: 1.0 1.0; to: "action_bar_bg";} + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusDelBgColor; + visible: 1; + } + } + part { + name: "close_icon"; + type: IMAGE; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_bg";} + rel2 { relative: 1.0 1.0; to: "close_bg";} + image.normal: "btn_bar_stop_nor.png"; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "focus" 0.0; + inherit: "highlight" 0.0; + } + } + part { + name: "close_over"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_bg";} + rel2 { relative: 1.0 1.0; to: "close_bg";} + color_class: transparent; + } + } + part { + name: "close_click"; + scale:1; + mouse_events: 1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_over";} + rel2 { relative: 1.0 1.0; to: "close_over";} + color_class: transparent; + } + } + + part { + name: "folder_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0.0; + min: 1920 181; + max: 1920 181; + rel1 { relative: 0.0 1.0; to: "action_bar_bg";} + rel2 { relative: 1.0 1.0; } + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusDelBgColor; + visible: 1; + } + } + part { + name: "folder_text"; + scale: 1; + type: TEXT; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "folder_bg"; offset : 62 104; } + rel2 { relative: 1.0 1.0;to: "folder_bg";} + color: 116 116 116 255; + text { + text: "Bookmark"; + font: "Sans"; + size: 34; + align: 0.0 0.0; + } + } + } + } + programs{ + program { + name: "mouse_in_close_click"; + signal: "mouse,in"; + source: "close_click"; + script { + emit("mouse_in_close_click", ""); + } + } + program { + name: "mouse_out_close_click"; + signal: "mouse,out"; + source: "close_click"; + script { + emit("mouse_out_close_click", ""); + } + } + program { + name: "mouse_in_new_folder_click"; + signal: "mouse,in"; + source: "new_folder_*"; + script { + emit("mouse_in_new_folder_click", ""); + } + } + program { + name: "mouse_out_new_folder_click"; + signal: "mouse,out"; + source: "new_folder_*"; + script { + emit("mouse_out_new_folder_click", ""); + } + } + program { + name: "mouse_in_close"; + signal: "mouse_in_close_click"; + source: ""; + action: STATE_SET "highlight" 0.0; + target: "close_over"; + target: "close_bg"; + target: "close_icon"; + } + program { + name: "mouse_out_close"; + signal: "mouse_out_close_click"; + source: ""; + action: STATE_SET "default" 0.0; + target: "close_over"; + target: "close_bg"; + target: "close_icon"; + } + program { + name: "mouse_in_new_folder"; + signal: "mouse_in_new_folder_click"; + source: ""; + action: STATE_SET "highlight" 0.0; + target: "new_folder_over"; + target: "new_folder_bg"; + target: "new_folder_icon"; + } + program { + name: "mouse_out_new_folder"; + signal: "mouse_out_new_folder_click"; + source: ""; + action: STATE_SET "default" 0.0; + target: "new_folder_over"; + target: "new_folder_bg"; + target: "new_folder_icon"; + } + + } + } + + group{ + name: "elm/button/base/hidden_button"; + parts{ + part{ + name: "button"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 0 0 0 0; + } + } + part{ + name: "over"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "button";} + rel2 { relative: 1.0 1.0;to: "button";} + color: 0 0 0 0; + } + } + } + programs{ + program { + name: "mouse_click"; + signal: "mouse,clicked,1"; + source: "over"; + script { + emit("elm,action,click", ""); + } + } + } + } + +group { + name: "bookmarkmanager-layout"; + data { + item: "highlight_focus" "off"; + } + + images { + image: "web_shadow.png" COMP; + } + parts { + part { name: "window_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + min: 1920 1080; + max: 1920 1080; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "genlist_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1920 285; + max: 1920 285; + color: 70 143 254 255; + rel1 { + relative: 0 0; to: "window_bg"; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "elm.swallow.genlist"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1920 285; + max: 1920 285; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "genlist_bg";} + rel2 { relative: 1.0 1.0; to: "genlist_bg";} + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "gengrid_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1920 614; + max: 1920 614; + color: 255 255 255 255; + rel1 { + relative: 0 1; to: "genlist_bg"; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "elm.swallow.grid"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1920 795; + max: 1920 795; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "gengrid_bg"; offset: 63 0;} + rel2 { relative: 1.0 1.0; to: "gengrid_bg";} + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "genlist2_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1920 181; + max: 1920 181; + color: 255 255 255 255; + rel1 { + relative: 0 1; to: "gengrid_bg"; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "elm.swallow.genlist2"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1920 149; + max: 1920 149; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "genlist2_bg"; offset: 0 32;} + rel2 { relative: 1.0 1.0; to: "genlist2_bg";} + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.swallow.empty"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 0.5; + rel1 { + relative: 0.5 0.5; + } + rel2 { + relative: 0.5 0.5; + } + } + } + } +} + +group { name: "elm/gengrid/base/back_ground"; + data { + item: "focus_highlight" "off"; + } + + parts { + part { name: "clipper"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 70 143 254 255; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "background"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; + rel1 { + relative: 0 0; + offset: 0 0; + } + rel2 { + relative: 1 1; + offset: 0 0; + } + } + } + part { name: "elm.swallow.empty"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 0.5; + rel1 { + relative: 0.5 0.5; + } + rel2 { + relative: 0.5 0.5; + } + } + } + } +} + +group { name: "elm/gengrid/item/grid_bm_item/default"; + data.item: "texts" "page_title page_url"; + data.item: "contents" "elm.thumbnail elm.thumbButton"; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + parts { + part { name: "win_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 378 294; + max: 378 294; + visible: 0; + align: 0.0 0.0; + color: 231 231 231 255; + rel1.offset: -26 -26; + } + description { state: "selected"; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 378 212; + max: 378 212; + visible: 1; + align: 0.0 0.0; + color : 97 109 124 255; + rel1 { + relative: 0.0 0.0; to: "win_bg"; + } + rel2 { + relative: 1.0 1.0; + } + + } + description { state: "selected"; + inherit: "default" 0.0; + } + } + + part { name: "folder_image"; + type: IMAGE; + scale: 1; + repeat_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0.5 0.5; + fixed: 0 0; + min: 140 140; + max: 140 140; + image.normal: "ic_thumbnail_folder.png"; + rel1 { relative: 0.0 0.0; to: "bg"; } + rel2 { relative: 1.0 1.0; to: "bg"; } + } + } + + part { name: "elm.thumbnail"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.0; + min: 378 212; + max: 378 212; + rel1 { + relative: 0.0 0.0; to: "bg"; + } + rel2 { + relative: 1.0 1.0; to: "bg"; + } + } + description { state: "selected"; + inherit: "default" 0.0; + } + } + + part { name: "focus_highlight"; + type: IMAGE; + description { state: "default" 0.0; + + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; + } + image.normal: "web_frame_selected.png"; + image.border: 8 8 8 0; + image.border_scale: 1; + image.middle: NONE; + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "background"; + type: RECT; + description { state: "default" 0.0; + min: 378 82; + max: 378 82; + align: 0.0 0.0; + color: 86 98 113 255; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 1.0; + } + rel2 { + relative: 1.0 1.0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 0 119 246 255; + } + } + + part { name: "page_title"; + type: TEXT; + description { state: "default" 0.0; + min: 342 54; + max: 342 54; + align: 0.0 0.5; + rel1 { + to: "background"; + relative: 0.0 0.0; + offset: 18 0; + } + rel2 { + to: "background"; + relative: 1.0 1.0; + } + color: 255 255 255 255; + text { + text: "Web page title"; + font: "Sans"; + size: 28; + align: 0 0.5; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "elm.thumbButton"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "elm.thumbnail"; + rel2.to: "elm.thumbnail"; + } + } + + part { name: "over2"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "win_bg"; + rel2.to: "background"; + } + } + part { name: "over3"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "background"; + rel2.to: "background"; + } + } + } + + programs{ + program { name: "mouse_in"; + signal: "mouse,in"; + source: "over2"; + action: STATE_SET "selected" 0.0; + target: "background"; + target: "focus_highlight"; + //target: "bg"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "over2"; + action: STATE_SET "default" 0.0; + target: "background"; + target: "focus_highlight"; + //target: "bg"; + } + } +} + +group { name: "elm/gengrid/item/grid_ds_item/default"; + data.item: "texts" "page_title page_url"; + data.item: "contents" "elm.thumbnail elm.thumbButton"; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 378 294; + max: 378 294; + visible: 1; + color: 231 231 231 255; + rel1.offset: -26 -26; + } + description { state: "selected"; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "elm.thumbnail"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.0; + color : 231 231 231 255; + min: 378 198; + max: 378 198; + rel1 { + relative: 0.0 0.0; to: "bg"; + } + rel2 { + relative: 1.0 1.0; to: "bg"; + } + } + description { state: "selected"; + inherit: "default" 0.0; + } + } + + part { name: "focus_highlight"; + type: IMAGE; + description { state: "default" 0.0; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; + } + image.normal: "web_frame_selected.png"; + image.border: 8 8 8 0; + image.border_scale: 1; + image.middle: NONE; + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "background"; + type: RECT; + description { state: "default" 0.0; + min: 378 96; + max: 378 96; + align: 0.0 0.0; + color: 231 231 231 255; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 1.0; + } + rel2 { + relative: 1.0 1.0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "page_title"; + type: TEXT; + description { state: "default" 0.0; + min: 300 48; + max: 300 48; + align: 0.0 0.5; + rel1 { + to: "background"; + relative: 0.0 0.0; + offset: 17 0; + } + rel2 { + to: "background"; + relative: 1.0 1.0; + } + color: 51 51 51 255; + text { + text: "Web page title"; + font: "Sans"; + size: 27; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "page_url"; + type: TEXT; + description { state: "default" 0.0; + min: 300 48; + max: 300 48; + align: 0 0.5; + rel1 { + to: "page_title"; + relative: 0.0 1.0; + } + rel2 { + to: "page_title"; + relative: 1.0 1.0; + } + color: 153 153 153 255; + text { + text: "Web page url"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + //color: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + + part { name: "elm.thumbButton"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "elm.thumbnail"; + rel2.to: "elm.thumbnail"; + } + } + + part { name: "over2"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "bg"; + rel2.to: "background"; + } + } + part { name: "over3"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "background"; + rel2.to: "background"; + } + } + } + + programs{ + program { name: "mouse_in"; + signal: "mouse,in"; + source: "over2"; + action: STATE_SET "selected" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "over2"; + action: STATE_SET "default" 0.0; + target: "background"; + target: "focus_highlight"; + target: "bg"; + } + } + +} + +} diff --git a/services/BookmarkManagerUI/images/btn_bar_new_dis.png b/services/BookmarkManagerUI/images/btn_bar_new_dis.png new file mode 100644 index 0000000000000000000000000000000000000000..af49c5af52731fb146af572791cd28382e524afb GIT binary patch literal 2980 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 literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/btn_bar_stop_nor.png b/services/BookmarkManagerUI/images/btn_bar_stop_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..c5cdc11ca8ea537497a1a794d79d40362f8659a9 GIT binary patch literal 3255 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 PM;~=nZIv>mm#_a1)GRY* literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_add_bookmark.png b/services/BookmarkManagerUI/images/ic_add_bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea3265455d6c20f2682df08e0690120fa1e3adb GIT binary patch literal 2036 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 literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_more_desktopview_foc.png b/services/BookmarkManagerUI/images/ic_more_desktopview_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..21bcc68b5136282a2a51cfc0d5a9a0f79cf36103 GIT binary patch literal 4066 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 G%D(^(M#QiH literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_more_exit_foc.png b/services/BookmarkManagerUI/images/ic_more_exit_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..779fc486324ba4350b68c6f8f9f49d1077f9f089 GIT binary patch literal 1558 zcmbVMZ%i9y7_T+xfM6IHTKS;IEj3eUd)GhL-i?m6y{qk@&;UZ6NI2R9E^xi}dW=HI z9E(Iz=Z6I(PLVHW8nz)i6&8^3r^}pyu#G6$KtC`yW&%ON!ZH?(Z=r=@$Ubb`qe216)FIlhMpcNK<0AXo@D7TF%yt^P zdIyUe{fxSh3G(%V2h^i#UknVidvc(NBglp*5Li$Yx{l;M^&I099i#~cUsPV!OIS!u zr!nfyI8GTU9f}$aT8t#MW`o6`F;WIJ#<3gLXtC(c7-d8dtrn?;Y2ItzuN zIy{DT_<|zs^DwcvEQlM$8lH$HtO7%eyim;Zb+Ha`)$k%8tl|BTwFraum$E)D-w=Ey zQl8D-l8nF}WxO_l=b#OJ33iwGR$QYaahpvGGNAM*iraLES*x?+HjN%JAXYev_5L5t z)F2skq&XgImY4~2U}U=0`e3njco-izF#*n+*^E<5njRL)rM=`){< zB>%7|4Yv*)Dtj+6&@zxLo0kSMRN=UJ3ornCvJBWWRKRX2gH%z+@a3;=6L}Zx(;qgc zo#m9aj?qUKZ*>j7`O`n;XKtp>+-+Z5yV%p7bbcxH_M!ZHdv~MQ5i9-ds&00^@;Bd& zi5qj&b6NchX}O{A7Qg1Q53gQ(*xY?LYjUvTgW(sa=Z+riCf^zjcYOJ$T$u+f3G z^;voON1t9kS&}&u`o5)$$kM#C=E74;%X=y=XdkY>JJwA*yRJks5i2LCvj*2#%(a$D0Kf^3O@zkPNPPS0uUsO|bVZfUtR!2QZ( z9Qa!?NjU;{{+feJ{!^K4mYo&bwm)9l`)e5^k{sz5Q!dAxI`XG>Q2Au9rQ*cDFX1^0 literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_more_exit_nor.png b/services/BookmarkManagerUI/images/ic_more_exit_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..b6dcd889bc6efa4962b1f43b02b21f093e04a136 GIT binary patch literal 1604 zcmeAS@N?(olHy`uVBq!ia0vp^(?OVn4M{( zJaZG%Q-e|yQz{EjrrIztFsEgPM3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcpk{1iHq`zbF$JDTz5Q`N^fZsd*)yF1AWQ8NHOu6e}keGZP~V zQ%6fnR|{7YLqiL5V>1^QV@Go*b0Z5^b3>RJ*z{T$I-58*DVb5UwyNq$jCetr%t1q5W|m*f{` zkk2Xf$O6-{>>&nPlIHs5ftw?$;v=Fj^o_siF;=smON@8`6;S2w==UB{SwVoL4ooi-LIQ3->Ut_0t!Xu#@ z@r}C1GJh^T-Y$BUomqO$T2?cOxK%%LpC|RmzFGF=tYgec=Iq;LntH3aePWn|#eXsh zPd{+Pb>D#_Q)8}|9%Z}s6g@OJN^?Y+a?*0Dv@|MJ#JKq46hV9#ML{+CS^jYwk=Wh}_SNqr}`GwoF zEa5%v-~IHL+-KuwhMzre>^${##$Oh^5djXrtiW6G|G&rySzlMP4c~Ha|B(Q(~_ctdz#}%)*#F69spxPb|0|sNUYU84BRck=yx~Hq3%Q~loCIDqOQbYg% literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_more_focusmode_foc.png b/services/BookmarkManagerUI/images/ic_more_focusmode_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..f5fdac8488ea3b34dadac6f9e03d71b2326fa922 GIT binary patch literal 2053 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 literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_more_history_foc.png b/services/BookmarkManagerUI/images/ic_more_history_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..a397ea056b2ad8e5d6971886c1f9b8a449bfa982 GIT binary patch literal 2892 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

;4pTXqLd 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 literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_more_mobileview_nor.png b/services/BookmarkManagerUI/images/ic_more_mobileview_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..91aebfe29e531e5f9607b9b6995b2e94bb628e17 GIT binary patch literal 4205 zcmbVQXIN8Pv!;khvjmZ@Az(vD0g{kNkrIj$PyquRS_q+&4g{o#g7juXKt!Y{pb-!? zfD{!%3+*W7DAIBe1q2bL2*M4PbMKGye9ygiKYOpWXV%R7&YGFEf9!;l*5*>;3gQ9+ z0#cS1rl48Ri433z(c71#51OlO00DhH^+7l| z7K){q5Pf_t!e~U>Fl#$Pm_GsK2{JSQ>M_xLfIuPx4`c=gkmzWpKIjK7n*YA3hJb)S zOc?(9pr1iGU{3-~$TT7l4%XHrKw&T-0s)5Uz!3Lck%~U^2}c0z;utn;2SJntTgQdMJs3XKIq@ zs=pCTiF5+Zm%{KRlYpCucn@+ALm$MC^yd}=DOl`3z$E&wMDbGwVd5ze7#Io(4BXt; z4{JK(H1WT~_*ZMXT_}YJIZdRKgJ=YPJ-k$ZJM(k*pNTdN`O%$Pi-Anhs-mje;qA%Xa`rf&*u{yFk<6@7)$!^J)8?Av7GC?9W5kK%2y)gr1u1nY$}170 zqH*x;!HOYrNQD78H>g2(Ls`lOIBx5`l9CMe@fda9*%V$1!O;NPJ^lL9&bRXw8*^F) z{%g7Oc%C>fidgoi3M-nkkm9X)c2EAgaPo^b$12j2;@qwGF=zJB>pGa%<}G=2P6vJ4 zG?CXoSn(tosn{Y{+w1b&4dUAf3M_c@r4jC?Wk7KDy%7+gN`18bl+m{7%H{e=1SmQ@+Mb5-YRk$ zPjxXz)(k8wip!Cfop{r;dhzQjyzUfzHP&a&!Rrdw->0f*Lf#MVO7zg(VMB1mVF+j0^=*V)V=dU z9IxoQ>W-!Py}^HiNPHT`BkEJ^{Gzv&Y`#7Z7XKNTP^L#IoQLt6X9o>^q#9qFv2wk_ zcXYJcV72OP8|$7njT#D}#Sc#EhNu#1U{Ar%cQ5*#wQw%N?BhvuY~NN8Inut56kg;f z-vcU7V4L@-JTqv=3+t-I5%j7RBy-W_Xrs|urpZ}4>>^5XfEF^#Y z{FHUnWvnz^xopO4dWZ#&FB|g0a07vhOhftVC+3!tJ0EoHio()}O_)um)~*Kbs8YWu zFC)og(r#W<`%1r`-Hhn&Wz;9aK93vTYv-G;D)sQPXI%-~is&;+lGEYYTcA0D@^m$` zfj`^7_c2pz-_3$XkfzkMdG-36tqjqNMO#m6#229vr*;^San}s@X@%Bd0Jt&T8-gJ+ zZV<2TozdUTopBpIgFzqV(^68uw%!hdrt4{VZq3}KM+S|6a*{3#w!J?t+n)uy)NP+@ zgow?xdZ@?k>Oe<|+AeR1SlO<*jH^oy96b`tUG+YENlKD4x!`J3{D*uOyYvs?Ap2@9 zk4*oZR(&JSvåVi8Fk3zl%xu>xL1@oxdE-SWG$8F*Q>W@6viF{00S*N6VpKxB? z?r=?F$e$Y>_Aq(@cuvN13)i@Dt>jsklvKRfJs5-XAyrMV*8reJpT(WBdlc#%7d_h@ zV->k0Pf#0Xt-W3YXtuX+|GuZJtZa$E)rpClO=>>Ti9tHmA1k9^xUoUrr3DefV8p(e zTSafUOGY=UG6eNKO39z}nw-B&EGrpmxi)7XguA%9 z;z}^oaJv7(`S`o^^ej}(LC-rKK=%#xusYoV9TRP* z!@K<=-YRFe*qNw&y70zEhe}em-Tf%}V`D@4WOci8*+eK-3ia{!s{eb}Y>60=$ojwf zL^x+Z0A$bF^`6tY_Z%zs>Vx8!Hb8jsgjm9np3{MN`MS3YyL%?nPPl{`9n$Oli&H&V z<1jjM`ug6f$tm$?!Nor6d-hj2zXN16D2xfsg^Jl71$yRHl>{|}sSruj$`i60__VT< zlC+7*S5+Tm26p4D{nV55W-FbrImXni6HSZ}pPoH!oI*g1!Go$Z*c|H)`0!O&@wHca zWv;9>Bs>t^{5AhN`;svkH+-uYo5kkt2YrQcmBaM%OJQ#H5*-#^^{iq|eJ6BxEUfZ9 zzUOszcJ=_kX|1z6b#Tx)Pegt}(d2veH_g<+r8sAmt%?t-<`#3S68ukQgfSvPt|um* zkhW!+544LZhuU0!9by041DpqT$aJsEJq~0|ovdd=Q%DtQM;cC!jenkVv@hNI#g@dy z^usCSk_zX@q6XO`Lz?2m1K3ahZ^D2|h>@K?)w|xwg zjQ(2<=dJ!!5SMYU-jZ-)r@D>vI;yU#KZSLB_3)L*Gt(i`rM7pW)WEh~L$Zl3tnhO` zkjeyuEz5`XQD`aS#HO#MN0u}%VP@`nVehd0T&mqNn))m|v#qHsA6i=WJIwWinrX%& z2_1%4waYCkhBEy68Ho~fc5vm;otm1Ov&LUNKHjg>AUw0b^hex@k+MD<&`xW)3)R3L3O+I38C^RMlL<&E#NLad8e0Zs(%Gb%rKE^tBYsCaP3I%;D zQjaSMwN(exQ_6MdLn>CwM@t+1zGoMv?DrW=$Rtt&sh$*X@o)IP48aHeYb*DAzV`Nq33cJKj7#LC4L5^}-tHZ!O&sjvCob&{} z!C`FT*frQKeO1qE+v6XfekPfi>-X(Tyo6NRRmVuqfV7We_UpV!nc{uxa#}A#(=8$r zCU`3=z~W}VsV|8Vjf*dy#LQegPQ^b9#J{=H(ki1;D;R2`99ylytC&@Q2ek`*Q=09a z3y)U0UBt*Rhjtko1X!v*7n&9OYixg^%(s$~{a}qp%;I_Y08g>&dI{>y6ZdCtiLBJ5 zzE=R;t#SjU$`cwYHnCDKbB_A=?SSwb_hSb%41S6a&p*%7g;>TFqw{YVsT{T2 z;$G7=lio&lk)C>>pj?D3MwcO9GmjE7Uq`X0GvrJ*!C7K=G$M9M&o|=7R?0z*Eccg?9K0s8rVoM0wt{NS@0Hp z{MzOA3Kc)cnFY;`M{|cJy;Wq}Y4(V6^p4ZwQ00lwp1o%hBhR3Qtn6KK5f5em-Xro8 yU>v|l`2oitjDASt06zFX4F3m%o$(uDP=UC0a)>x0%4G8gfF;J-lx6IG{=WdHF?!Dc literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_more_pointermode_foc.png b/services/BookmarkManagerUI/images/ic_more_pointermode_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..8785d75a32e56194cfad14a628c2d55bf920e36e GIT binary patch literal 3180 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 literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_more_readermode_foc.png b/services/BookmarkManagerUI/images/ic_more_readermode_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..d257732fc053c20177ace08285da20d483e3a8f1 GIT binary patch literal 1943 zcmbVNYfuwc6pm%I49c`<6#I9b6fzB1>I1WTQ%hdlLw}V53GVOF=Lo5lL36`NYxM1|p!8 z^NF#H2rxn;KorWb3>~s7BT_8ONRe^m#NaIe&&b6Cs1QsF7*(liJ=e%5PQ~To->z*6 z5tuT;QuxH_q9hSffB@AY0E0{;$v_AKm`pN6XE2%2CV&b;R0@dSOcF%rGMHQ{3z)fx zcs89pi5mlpW^&;YpQykv4VOYO7z|_sjg0D&DG-OlamAogNw@_`pRUHFMv__|I2!>* z^fH}NgDFup;EE_sMAI-n5wCRm2r5lP#9Uyteg-HUGKx{Ep+IDiqEfleHD#^GVvv8! zc%!vmoUTDAF^C>b)5&l?k^*O)aqQln$YqFE!`-P<;-pAZVN{l;Ley9|%qQX+vRo8Pz@m1#RS&J zD%En-px@x4XZo}-qEjA3m9s$r@Rac^zERT@y3#+++yYX}n=dZUAWmM}8gR4^R>gmUWGg z2$S!rb?yM!viN=PriI!C_ADzv-Wul;EQ@i0pbfzVm)`ykt`CVjitDG1=k$-k#eSyx zXU?C;o7{^Joo=v;Uonbv5^QeHF#Z<5!WNqYKD@R(Z=>U+@s?#^Xwb-37nGhoY_H6I z9W*>?y)+nLHDQPBz0UC^FV&Wc<{`%~By&PSbI_13uE=gbUN$`8_9VK`%k1-_f7nW^ z?>@hQ(f{z7-=e6nXJ~t$|A1xSs&V0p*juMBR$6PS%oSaA zWmV=}icR3Za@2lcjp2^Z!@K8gX3NgzfX#pRN5_!{AJp(F757thGTxo@%TAqGrT30b z{@%>7|CIUX*Zv+U-$|;=3zj?kGbT~1BZO$Hh$uzAlXdZR+_*Qs7 z8d*^6V$A8A*5-L6xHl$fYe`G*BGdJtdY=L|X0M4a&L6eyzILQO@@V0mv1%*d^e8H4 zL}U&6D=+2P>QS@d%*87^EF;-HlA`tH@m1C0f!atm{q^y@i!}Y!7RT;;UWH$bG{}*@ zlSg?rjq8wG1(l838>Ygjv$xl zfE7e+bjo;utyaKdMJSRYc(fG|FOG0S!tu?oA;0`Ww_zSv-OPF~~-RibL$Js3ZakIfuBG zE+UK6JS0xBB1wycCk02ylHz4-Inmz_@HN1A040J+0fTb0N(UP_#F4l#{%zeR5rGjC zES^IgElMm31$d|y0q7vrTSkT;fWZJE8lAy_mH`wpL?My!o8b-7U^)Y)FoCg)h-cHv zW8pBqa4Z)tafopkriMu*yk?I%)ZnesEgFx&M|3i+ zLX9a<6=01hjX@JI4iT?(^ax6|NHh^xr5ghZhm2&9s!0$?CMlKHbB$Q*urTCp86ULP zMI@>bQW&B`6SOj%kJv@y&Nz0TPGmL2tARtb3Y-+_WWs{6*A~t z2A@l3F~)s^R60zmk|E=H6?on;U-Bn?VV)L|VyHF(MK_OkKxiC_p}II!4e-JlfY(}u zN{;GvUs~xIJuM&6Dz+eUp%zsFBlyCK59H^uDKtJ?D5NsUWC0z5*g_haOQrGHLJFPC zB=d-4zViQr83`|jWNnUjnq_t@l76oMPgMX$V;X3zjv;an z%z9*ez;@s{e3drs)aPHPI_?H~s`C7%Ubd|#o~eI&<7i|QYUp~R`A+)HtB%f>4bnRc z9=%8^vY}Qz%q5tU%Ly8;WVSN^rpz!;s+o)nJIk%YY-e1s!Sw*R9M{)O#`UAd6Z$>u zhQqtIoeM6~B@VSXHqRWq7*btmF}$XGq(s-=G?&1B^PNnMmQus^OSC8#=c{|pzlK9< z3N+zmcNY|tY4$Xmi@gV`)`{&*OS=|WQunF0Zd>@Y;2yN*>UGOg!{!cAm&~-70Hw_CM>;7wPMsl|vOaX^i37LuViR$u653zZmk` zkrr(#PI#TyZ@5%BX}yPk=HpF!T~B(s4V`Z9Y3a`hH)urs^R^t9=uEV6n#8g5;-_^Z#`TD4vVmpm!NuYUqZk2fV1lp@|7}5J&ZhLlm9Qd{XXQtKPDPyV6 zM`;R}VF`-x?Dof$|;6rgG5FskeB4YeVLMpOa^XXQN%yn!Lyd+5M}x z9p7@yGSlR(LC+`t?0Y7**gxIgelT@!(yuKA!3Xa&73KduT_LzcEZL{8Jzd-08!Cxj zNN=0nnRzI^qO;7ht9;4OZ2M*d2R=wL-tB?AH!TdT=gq5WDra|u9ar(%&!#>&=$d~$ zcsNQzxvwcTb(_JWf6Q>s^Xl3P^J$9_X1bkx@o4Xhm2Go7%jBS7RjxkX*+(2*=!p|* ztGV!F4Sn9_td})&WSMVPcW*eJ8z>1!^cf~UQln20t2@u>XnKA8)UB=BhU}FNWG9=C oPu0XAy@&QYQy1Vi5WUleup%+FN2t<2#vvthbGgpzJpZ|`I5}903hx)@;^Gpu zwXtyKjF~&1AU{XS=C_A%hJAEPB>fZ#M-M_%v0SD;ByX&OEdlL|b;hE7LMZK6I2RWW z4v#?6k@hF_F(d*Ay~6Yl`2dZL6yU-790LR_9jy>d2qe<YC|l=~?Q6f7$paU8sc) zSW^#brKzcH3I&6hu?qxt^b=wZKyG=dnIkR1!hq&;07+ z|G~dGOiRZCW@V+VtEp)T0fS*yI+~{1I_5AdEr_PBraAC0U7!CZXBwPfGrc^B|X z?QY%H+YR}-?V7dc?B}$vu*r{e?$hpbxf^c=Hvl7p%?;Z>=5P=QBt@angl5DYH40P# zMcrl!CM0siPc#bri4qbOID7vof%RlkGNx9jU#M0%Qe#G%Y7`OeC^#a)kam#VEmNbC zDe$2piTfITuO|@hIsj|i))lc9-ri^CSt=wie){veJa0s4!mLZeu@8S})SXxlVP9C0 z+j#o0mV8Qb(ZGypgLHXInG^CAejo|*sm=n)sfXJzP1Y?Pk>XwIEXio|=mRTjDXe_m zaZK+XRq;Myv@u(gjYv!Fo}wg?pU<1JuPLqZJ5e)a4TR^!pSv%i;fipN0hYleg4P+v zD&U(iY$~dB9T?s)UNp4RGia->SIj*Ezl->2sd`1&Ws{GkTc62)?SuM^``d3~*|a|4 zFo@Q+WK7tJ{jUAA%}1<#tcZ^*MDdhj=5_P%*-C0Uzjll@R5KaG>aWiXcjkF(c$PVw z`^*B_)ksT~G|HYFDpz5w!@9%3$6}gAY<%O%H*E!qUtM-PTD_cdUn);Myssmydj1{v z;vv=W*LDHNb4Kh`m!;i>f&wOab!nCJ!t6KP-3N+9XFwn4Z03~MP_)79-tYBqi~VDf zE?yruL?TO$NPe#wLj-Hw?UlXEb7|+i*`!;deLs#@Upa{avm;qw zpGK6;-xFN)dk})~Ketkr01M1jt~0OQKD_x`^4$gRl0hToLO8UniN+w?TClj^Xbp>z z*Oe~-q_;e3b?+5NoE4tClbpabGf{YlwI^|z;)^@{AwfIuNbi327-^1?e47;l^KHoMMs>^zvXB#zooXd+0K%Mq? zMip1g51o~A<ybsa;~H6j`^TSLWupATOdjUtEsF(S&S`5}Brd_FVhH~6c~-P`vH zSP%yNVn`|tMTi6?5w@Jyi`Gz@?|V%n-5n_rvV@p^W@jVKeaRryF^d^`yJJ=_&Yu?q zo<@DyHIZSBYW02HW~JUW6!JD8@pQQ{rAw4idK{(hfeW8sx5~XNkcju{f0i_I>RzE+ zOjL@UrQ(}rlPw|2={vR({VHq>PQG{89W-X_GArbNDd)h~KFlk=yWd*_R7H8p4<0pZ z-|gGt02&LD_KH4TfK_K~pm3vQ-5<|-jo?efL>MXt(WDpj2ys~WgmD?6DX5CTvo@6h zURmsFE&IKUlosMyE3DBM5q@#2`z7aFX7G$j*K-$yVwT z`vQm|VjIP@%9_mv-!vgQofKW#imUk$I2&W%-B3xZ`WAcdB_n7>!0^hRwJ>=S+@|q! z`#IbmzwImr+k`DgGCS&R^^qvH|;uYWq&TMforckG5w` zfKko6Sd(xxTz#hdCH?zUh_p?uJz%W|mG67;&S-E0#Wk_7*ylU|x^J0*^Beo|BMP-1 z!Bz!nhdl)&3nzb=bPMV8t>KMYc=N{KmBx4FhEWl(R~x)vMqbCyn~9Ggnga_w{Bnbm zOC-7KU)y1rwU)SNk+6jF{QeHrBbp8&8H3h};r=#w#ajnnZ~0^zAaFhPty~eWPNG&z zWMp7-bN49H7uTltN)&BJ5f$_2q`qy2K+-HUCK+(rYm36;QCwaSN zqX=s^LE{K@w~nT3Mt!WAw3+&3v!F$BR0FoY@A8+Iivb?dZ0T@$IjnO8D|Wg2Znah)*F&l&7NsdN(4pp zcrOfMHz$AK5sAwM1i^*N!Yq?fQjCa3Cl*xIGu4oN1E`K-D{>iy;vH+_)|%kQ>e{fe zd812r9KGW40G#oRD3^xNV6)eK+l~47xk7Nsk$*m$ zwd8SrluzwjgAh2i#nWBs_`q^zH1hjLQYXw{CA*1s9_#GsbKMuUeOmssQ%q9d6d2G6 z8TPddm-n^yT3vtI!9Qx5k*Ki$AX$@YTz-G*7}~1D$ihi4dU{ zt@G%5+tH;H7qWVSGGmbv^Ql9Gq^oVwSC5pXl-gh3DCJOHN`m6&#~;LAov;NNyq3R} zd-k`LmSR&>)|tR&U@~B#MPU89$Vk7OOD_@=@KnEu?x;Py#^h~lwXsXTS^D}sQetf) zWHmnw6@0Gh9i$J+Sw&C1B)gYhf55)u$eCSa*gtPqlOOMLah$2 zcq8;-h(vxj5ahlb2jfb-eUN-vDAr0JFGMQ{s2edz$-g}r^!rGSKSUbG_31P&Osu7s zKCmu;PQ7OMfLrkQm~LRJUViuaQ;DH(NCj=|^3{u^X}B^{ZQw^(fDd^!Se5 zLO*n)mcgL7eOi&?t9>IzY%O+TUjU@mq}(aJP*9wM2xufp^THy z+7-l32sC?zn&W00U-L;|OPGILes{3&pj?msM%6MZ{e?^>olTc9GgYPwqT65p@&#S!yWB9L4RLX8)M^={q3kdLv|AG@|L=SxIHy z<##D&??Nu7efpzl<)Yc6GM`oLG~3o4MF*<@@bgB3jG$)x|-h5$MJ-6~?BC%AH0V;qK<~ z9>-fI51%R|hb>@Fc7ZD0WUjT$S|PI@UGTgfo#8{- zC0qOK#mpGn^BU{NnsSg-`b53|-1 zU1h5&E|w-DJsVxx=ATJ9L$sL@4!+V!Kcj4=HXnipj-Z6YpOi(5B#Cu9up8lRqnLf5 z%{%0DrRk}1lz^~^m?n2h%Dr_fV`tEOTsZ!6`V9w zY(@F2zM_Zar$^n0#fWmt4ou8}MfiFHbhOEFK74$#_t8ZJ=8XDgs_lW^!9V!(5~nUu z@;2P>9L|<&*?TZdP`>xPq_k7$ab==TfRDanRguX2{i}?*BaTQOVL>SMIU_uFbsWmZ zu!#6jN4!7HlCL6=a-WESjeKR`B~84(2M=Ne-lJ2W*2>8T(yZV60j~NXQUkn0$C4jT z+$evj!T^Yi^@3D-dt5+PH)kIodhA`D)r5A-*maYZ#kW7fA99V?G(wEt_4biZdj`4D zQ|d&Ae`&L2%%!G l{a?cWOSdqekKD!2b=X+%5%rL~`_8`@TT2HEhM8B?zW}&QFVFx0 literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_more_setting_nor.png b/services/BookmarkManagerUI/images/ic_more_setting_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..284d4237339ebbe4cc5aa8c24486c5d01a726fba GIT binary patch literal 4936 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 literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_more_share_foc.png b/services/BookmarkManagerUI/images/ic_more_share_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..dadf09bd38e1a78fe7647a38af172a99a08caf5d GIT binary patch literal 2653 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\~q?AZkE8C<^8=}1$>cC9>Z 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 literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ic_thumbnail_folder_all.png b/services/BookmarkManagerUI/images/ic_thumbnail_folder_all.png new file mode 100644 index 0000000000000000000000000000000000000000..c23e195c8a3d6587bc0f869c9b94ee4aedd56073 GIT binary patch literal 1378 zcmbVMUu@e%821=V)znUXK!Q$CS*|AjXo-DJ?AUIzE{UBjV(Cg6tr4B3xb`KnTHBd@ zN!-E^1U9s(NN8eJr3s|&r4L9G1MxC6Sg6D_)a_x?3IhQHgg~Ow9tJ|%UO4AZ`J=86 zoNV9k?!NE)efPWXd~$STU(fcP+X;f`N$r<2xS#Xiu5I{x{&H*&?)s3DLt}OU)l>%( zG2NboWXe>FFauS6=IB*8L=amGMmC3X=>w8xn?cpL33_H3dlSUauvb>KDTv5PSTw9C zb?4(xDbmoR)Hs)B(&Yp!8T)4)I5s@ocN!a7yV;pCq%+X9 zD~^WGqcG5M#@cO8Qp-XX@53>Rn6GcT(!T<=7 z5HHK2SR@`{1tkJHF*fq$Ie}**2^quy2Y|u}Ae>MHK?YoiRgyg0@l9DSQY{U3cn!?k z_DyW+DT$AtJ;>@k9gwQNh^@NiG?aMS+RO1Q2K9RNGhoKbp}v8QL$7e-uk+3Rj>H*GnG{ z)-MmV@Qrcs)p&6>{UbqaIh~SYS?}w$Z!h$G#`Nxee(qd%@2b}Ith`KQ8RE&iyXNvc zu0Dd>h5F1v>EsUmYH)VJ9O{XTB?*>igoi>08B#p9q8jAV45sK|H=d05Jd#8{&X$>J~5|o`f%uaD>40 zMW><>2BRbcR!zsEc2asiNm?WzXt�b}kDi@<2!|7P~Px942MKv^p^oaWFA!xCa47 zt$M;_Ax$_2xDk;pcrhuZQ<=Uxg4vRiG6RfRr-`B{109G3gjj6QY<8b(%Gye1ps&-I z)!M3YT2L?pwc^Euo~nm2+~Z7fH+LYnA(f3JjWAI~K?-49Uu;G(G7*;2sV^*p$sm!# z0v<=imx;wnk&*{NA|Y1*!(5qAF64-mLdb(Lo3Dr~7xK9>F(iZd5TxXb*&?A_!4oPJ z3Kb;cDLlT3n3Y5@J?e>TqT){bistl{C@KVU#f0P=kuV&A=4D64Na4xgw!R&Xp^K5F}Po*^5+sl?)b(*m9W&lC$OX zXQ@qfwddKS@noW+E)pIDURKc)lP& z7Fza4MZ%t-H+6opj1$j%qS|(WtzTB`PPp793F-s{(NT*#HMR}umsRkB6@h`wH%1u& z&3>|oz2C`|)f2*B7Pv|u(Ax{o4gBDxd;Am|+t=^JY_`X?w&T6|0T&B58~k^&fh7yQ zF70H~khhond6&+k#EcGDGN;bZnES9IdtW&m5{O3ZFrMCut&#>_FFF{F<-dQ`5ldum zw7b|xDg%8rUCrI=Hx6#@XgI@=1`gRrTI?sb*4^8by>>9}^S9(>kM@UDWz|G4-*c|w z$KG`crTXv*fXJd>f`QBRjo+{OD>hFtsn!a)9 zWRh={Hq`0gfA{Ep&A5L;UFqbnS8q1`b&?zi>7MW5f<_TD2R}2MrSl>gA^XlTYFivl zV{P*#!56lpcf;COj(}3vYOZ8?`?^mCE?;>Trm9svkh>1==(CzQUF#~7oYIbl+LqPh z5k$k2(HDOGU*M6Qf0j*@6f9Ef+TwHL+gvNR`SpjkAHc^B)+hab{_5%Q!bbeNVQ?k>N~ebPHi~;&9&j~&hA^mxgAWRBjRp#$<2{d zJ|O*_tnU4ep#A`7(=v5h$Ygh9&Zgm83|&>$;X38SE?q?`^V^)hN0S?P!_QOnYkfXy z&j~&nW2`z>n$x#tz{PGEF6uq>6Nx{_S#b|n^oAY@?qM!N&L-E8X!V$Ql-{Z}S;l;k zvuQP{q7rNMg7`!?d(&;@7E`T8={`8CzTNN8h4)PS{o(aku)J99YgKH&vF`i9A1{S6 zYhQY=U>vL8QQi*KU-&fg3DUmRXkm+R*}U5x*r&Zc`EiHiQROE=G(*5cD@KA^RY Qx_@1X%2c>X{_d`S0KGJi(f|Me literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/ico_bg_round_shape_37x37.png b/services/BookmarkManagerUI/images/ico_bg_round_shape_37x37.png new file mode 100644 index 0000000000000000000000000000000000000000..00182eda393bba8bd7548044060c54661dd2e1bd GIT binary patch literal 18109 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 literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/modal_dialogs_bg.png b/services/BookmarkManagerUI/images/modal_dialogs_bg.png new file mode 100644 index 0000000..e69de29 diff --git a/services/BookmarkManagerUI/images/modal_dialogs_title_bg.png b/services/BookmarkManagerUI/images/modal_dialogs_title_bg.png new file mode 100644 index 0000000..e69de29 diff --git a/services/BookmarkManagerUI/images/web_frame_selected.png b/services/BookmarkManagerUI/images/web_frame_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..4470ca4a328ef0d26bbe8a92764757a7a217b2a7 GIT binary patch literal 17687 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 SOF&k3)ON6OvCgyFvg_YNdqf}r literal 0 HcmV?d00001 diff --git a/services/BookmarkManagerUI/images/web_shadow.png b/services/BookmarkManagerUI/images/web_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..f9018b0a6e15ae5670b67d580b890d1950636066 GIT binary patch literal 17700 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 literal 0 HcmV?d00001 diff --git a/services/BookmarkService/BookmarkService.cpp b/services/BookmarkService/BookmarkService.cpp index 7e30362..2489359 100644 --- a/services/BookmarkService/BookmarkService.cpp +++ b/services/BookmarkService/BookmarkService.cpp @@ -190,7 +190,7 @@ int BookmarkService::getBookmarkId(const std::string & url) std::vector > BookmarkService::getBookmarks(int folder_id) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("[%s:%d] folder_id = %d", __func__, __LINE__, folder_id); int *ids = nullptr; int ids_count = 0; int ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, 0, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); @@ -200,15 +200,15 @@ std::vector > BookmarkService::getBookmarks(int fo } m_bookmarks.clear(); - BROWSER_LOGD("Bookmark items: %d", ids_count); for(int i = 0; i bookmark = std::make_shared(url, title, std::string(""),(int) bookmark_info.parent, ids[i]); std::shared_ptr bi = std::make_shared(); @@ -228,7 +228,6 @@ std::vector > BookmarkService::getBookmarks(int fo fav->imageData = (void*)malloc(bookmark_info.favicon_length); memcpy(fav->imageData, (void*)image_bytes, bookmark_info.favicon_length); bookmark->setFavicon(fav); - m_bookmarks.push_back(bookmark); } free(ids); diff --git a/services/BookmarkService/BookmarkService.h b/services/BookmarkService/BookmarkService.h index 75ed2f2..8ce4790 100644 --- a/services/BookmarkService/BookmarkService.h +++ b/services/BookmarkService/BookmarkService.h @@ -83,7 +83,7 @@ public: * * @return list of bookmark items, bookmark items in a folder & bookmark folders */ - std::vector > getBookmarks(int folder_id = 0); + std::vector > getBookmarks(int folder_id = -1); std::vector > getBookmarkFolders(); /** diff --git a/services/CMakeLists.txt b/services/CMakeLists.txt index 547901f..8a137c9 100644 --- a/services/CMakeLists.txt +++ b/services/CMakeLists.txt @@ -11,8 +11,7 @@ add_subdirectory(SimpleUI) #MERGE_ME #add_subdirectory(SettingsUI) add_subdirectory(SimpleURI) -#MERGE_ME -#add_subdirectory(BookmarkManagerUI) +add_subdirectory(BookmarkManagerUI) add_subdirectory(StorageService) add_subdirectory(HistoryService) add_subdirectory(PlatformInputManager) diff --git a/services/SimpleUI/CMakeLists.txt b/services/SimpleUI/CMakeLists.txt index 62578b1..6234cb8 100644 --- a/services/SimpleUI/CMakeLists.txt +++ b/services/SimpleUI/CMakeLists.txt @@ -43,8 +43,7 @@ include_directories(${CMAKE_SOURCE_DIR}/services/SimpleURI) include_directories(${CMAKE_SOURCE_DIR}/services/WebEngineService) include_directories(${CMAKE_SOURCE_DIR}/services/WebEngineService/src) include_directories(${CMAKE_SOURCE_DIR}/services/StorageService) -#MERGE_ME -#include_directories(${CMAKE_SOURCE_DIR}/services/BookmarkManagerUI) +include_directories(${CMAKE_SOURCE_DIR}/services/BookmarkManagerUI) include_directories(${CMAKE_SOURCE_DIR}/services/StorageService/Storage/include) include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) include_directories(${CMAKE_SOURCE_DIR}/services/HistoryService) @@ -69,7 +68,7 @@ add_dependencies(${PROJECT_NAME} StorageService) add_dependencies(${PROJECT_NAME} HistoryService) #MERGE_ME #add_dependencies(${PROJECT_NAME} MoreMenuUI) -#add_dependencies(${PROJECT_NAME} BookmarkManagerUI) +add_dependencies(${PROJECT_NAME} BookmarkManagerUI) add_dependencies(${PROJECT_NAME} MainUI) #MERGE_ME #add_dependencies(${PROJECT_NAME} HistoryUI) @@ -87,8 +86,7 @@ target_link_libraries(${PROJECT_NAME} MainUI) #target_link_libraries(${PROJECT_NAME} HistoryUI) #target_link_libraries(${PROJECT_NAME} SettingsUI) target_link_libraries(${PROJECT_NAME} TabUI) -#MERGE_ME -#target_link_libraries(${PROJECT_NAME} BookmarkManagerUI) +target_link_libraries(${PROJECT_NAME} BookmarkManagerUI) target_link_libraries(${PROJECT_NAME} PlatformInputManager) target_link_libraries(${PROJECT_NAME} SessionStorage) target_link_libraries(${PROJECT_NAME} ${EFL_LDFLAGS}) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index edf05bd..e585130 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -67,9 +67,7 @@ SimpleUI::SimpleUI() , m_moreMenuUI() #endif , m_tabUI() -#if MERGE_ME , m_bookmarkManagerUI() -#endif , m_mainUI() , m_initialised(false) , m_isHomePageActive(false) @@ -1155,7 +1153,6 @@ void SimpleUI::closeMoreMenu(const std::string& str) void SimpleUI::showBookmarkManagerMenu() { -#if MERGE_ME BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if(!m_bookmarkManagerUI){ m_bookmarkManagerUI = @@ -1173,24 +1170,19 @@ void SimpleUI::showBookmarkManagerMenu() m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders()); m_bookmarkManagerUI->showTopContent(); } -#endif } void SimpleUI::updateBookmakMangaerGenGrid(int folder_id) { -#if MERGE_ME m_bookmarkManagerUI->updateGengrid(); m_bookmarkManagerUI->addBookmarkItems(getBookmarks(folder_id)); m_bookmarkManagerUI->showTopContent(); -#endif } void SimpleUI::closeBookmarkManagerMenu(std::string& str) { -#if MERGE_ME BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_bookmarkManagerUI.reset(); -#endif } void SimpleUI::openLinkFromPopup(const std::string &uri) @@ -1412,12 +1404,10 @@ void SimpleUI::saveFolder(const char* title,int folder_id, int by_operator) if (id >= 0 ) { BROWSER_LOGD("[%s], Added New Folder", __func__); } -#if MERGE_ME if(m_bookmarkManagerUI) { m_bookmarkManagerUI->updateGengrid(); m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders()); } -#endif } diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index ea7220c..a6c4acc 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -35,7 +35,6 @@ // components #include "AbstractWebEngine.h" #if MERGE_ME -#include "BookmarkManagerUI.h" #include "MoreMenuUI.h" #include "HistoryUI.h" #include "SettingsUI.h" @@ -44,9 +43,7 @@ #include "TabUI.h" #include "ButtonBar.h" #include "HistoryService.h" -#if MERGE_ME #include "BookmarkManagerUI.h" -#endif #include "SimpleURI.h" #include "SimpleScroller.h" #include "WebTitleBar.h" @@ -125,7 +122,7 @@ private: void tabClosed(const tizen_browser::basic_webengine::TabId& id); void bookmarkCheck(); - std::vector > getBookmarks(int folder_id = 0); + std::vector > getBookmarks(int folder_id = -1); std::vector > getBookmarkFolders(); std::vector > getHistory(); void onBookmarkAdded(std::shared_ptr bookmarkItem); @@ -297,8 +294,8 @@ private: std::shared_ptr m_historyService; #if MERGE_ME std::shared_ptr m_moreMenuUI; - std::shared_ptr m_bookmarkManagerUI; #endif + std::shared_ptr m_bookmarkManagerUI; std::shared_ptr m_mainUI; #if MERGE_ME std::shared_ptr m_historyUI; -- 2.7.4 From c79f0292ce2be1980c308135587d65ab01702c5f Mon Sep 17 00:00:00 2001 From: "k.lis2" Date: Tue, 4 Aug 2015 10:24:57 +0200 Subject: [PATCH 03/16] Task TT-77 Implement More Menu view [Issue#] https://bugs.tizen.org/jira/browse/TT-77 [Task] TT-77 Implement More Menu view [Cause] - [Solution] Add MoreMenuUI. Enable code referring to MoreMenuUI in SimpleUI [Verify] Perform basic sanity check. Change-Id: If623da956d560be47550a429f461443919ce3675 --- services/CMakeLists.txt | 5 +- services/MoreMenuUI/AddBookmarkPopup.cpp | 344 ++++++++ services/MoreMenuUI/AddBookmarkPopup.h | 70 ++ services/MoreMenuUI/CMakeLists.txt | 44 + services/MoreMenuUI/MoreMenuUI.cpp | 460 ++++++++++ services/MoreMenuUI/MoreMenuUI.h | 117 +++ services/MoreMenuUI/NewFolderPopup.cpp | 170 ++++ services/MoreMenuUI/NewFolderPopup.h | 50 ++ services/MoreMenuUI/edc/AddBookmarkPopup.edc | 370 ++++++++ services/MoreMenuUI/edc/MoreMenu.edc | 969 +++++++++++++++++++++ services/MoreMenuUI/edc/NewFolderPopup.edc | 463 ++++++++++ services/MoreMenuUI/edc/error.edc | 144 +++ services/MoreMenuUI/images/btn_bar_new_dis.png | Bin 0 -> 2980 bytes services/MoreMenuUI/images/btn_bar_new_foc.png | Bin 0 -> 2963 bytes services/MoreMenuUI/images/btn_bar_new_nor.png | Bin 0 -> 2977 bytes services/MoreMenuUI/images/btn_bar_stop_nor.png | Bin 0 -> 3255 bytes services/MoreMenuUI/images/favicon.png | Bin 0 -> 13397 bytes services/MoreMenuUI/images/ic_add_bookmark.png | Bin 0 -> 2036 bytes .../MoreMenuUI/images/ic_more_bookmark_foc.png | Bin 0 -> 2008 bytes .../MoreMenuUI/images/ic_more_bookmark_nor.png | Bin 0 -> 2089 bytes .../MoreMenuUI/images/ic_more_desktopview_foc.png | Bin 0 -> 4066 bytes .../MoreMenuUI/images/ic_more_desktopview_nor.png | Bin 0 -> 4372 bytes services/MoreMenuUI/images/ic_more_exit_foc.png | Bin 0 -> 1558 bytes services/MoreMenuUI/images/ic_more_exit_nor.png | Bin 0 -> 1604 bytes .../MoreMenuUI/images/ic_more_focusmode_foc.png | Bin 0 -> 2053 bytes .../MoreMenuUI/images/ic_more_focusmode_nor.png | Bin 0 -> 2062 bytes services/MoreMenuUI/images/ic_more_history_foc.png | Bin 0 -> 2892 bytes services/MoreMenuUI/images/ic_more_history_nor.png | Bin 0 -> 2918 bytes .../MoreMenuUI/images/ic_more_minibrowser_foc.png | Bin 0 -> 1472 bytes .../MoreMenuUI/images/ic_more_minibrowser_nor.png | Bin 0 -> 1524 bytes .../MoreMenuUI/images/ic_more_mobileview_foc.png | Bin 0 -> 3929 bytes .../MoreMenuUI/images/ic_more_mobileview_nor.png | Bin 0 -> 4205 bytes .../MoreMenuUI/images/ic_more_pointermode_foc.png | Bin 0 -> 3180 bytes .../MoreMenuUI/images/ic_more_pointermode_nor.png | Bin 0 -> 3346 bytes .../MoreMenuUI/images/ic_more_readermode_foc.png | Bin 0 -> 1943 bytes .../MoreMenuUI/images/ic_more_readermode_nor.png | Bin 0 -> 2021 bytes services/MoreMenuUI/images/ic_more_setting_foc.png | Bin 0 -> 4600 bytes services/MoreMenuUI/images/ic_more_setting_nor.png | Bin 0 -> 4936 bytes services/MoreMenuUI/images/ic_more_share_foc.png | Bin 0 -> 2653 bytes services/MoreMenuUI/images/ic_more_share_nor.png | Bin 0 -> 2854 bytes services/MoreMenuUI/images/ic_more_zoom_foc.png | Bin 0 -> 3419 bytes services/MoreMenuUI/images/ic_more_zoom_nor.png | Bin 0 -> 3524 bytes .../MoreMenuUI/images/ico_bg_round_shape_37x37.png | Bin 0 -> 18109 bytes services/MoreMenuUI/images/ico_delete.png | Bin 0 -> 18365 bytes services/MoreMenuUI/images/modal_dialogs_bg.png | Bin 0 -> 18648 bytes .../MoreMenuUI/images/modal_dialogs_title_bg.png | Bin 0 -> 18226 bytes services/MoreMenuUI/images/web_frame_selected.png | Bin 0 -> 17687 bytes services/MoreMenuUI/images/web_shadow.png | Bin 0 -> 17700 bytes services/SimpleUI/CMakeLists.txt | 3 +- services/SimpleUI/SimpleUI.cpp | 6 +- services/SimpleUI/SimpleUI.h | 4 +- 51 files changed, 3206 insertions(+), 13 deletions(-) create mode 100644 services/MoreMenuUI/AddBookmarkPopup.cpp create mode 100644 services/MoreMenuUI/AddBookmarkPopup.h create mode 100644 services/MoreMenuUI/CMakeLists.txt create mode 100644 services/MoreMenuUI/MoreMenuUI.cpp create mode 100644 services/MoreMenuUI/MoreMenuUI.h create mode 100644 services/MoreMenuUI/NewFolderPopup.cpp create mode 100644 services/MoreMenuUI/NewFolderPopup.h create mode 100644 services/MoreMenuUI/edc/AddBookmarkPopup.edc create mode 100644 services/MoreMenuUI/edc/MoreMenu.edc create mode 100644 services/MoreMenuUI/edc/NewFolderPopup.edc create mode 100644 services/MoreMenuUI/edc/error.edc create mode 100644 services/MoreMenuUI/images/btn_bar_new_dis.png create mode 100644 services/MoreMenuUI/images/btn_bar_new_foc.png create mode 100644 services/MoreMenuUI/images/btn_bar_new_nor.png create mode 100644 services/MoreMenuUI/images/btn_bar_stop_nor.png create mode 100644 services/MoreMenuUI/images/favicon.png create mode 100644 services/MoreMenuUI/images/ic_add_bookmark.png create mode 100644 services/MoreMenuUI/images/ic_more_bookmark_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_bookmark_nor.png create mode 100644 services/MoreMenuUI/images/ic_more_desktopview_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_desktopview_nor.png create mode 100644 services/MoreMenuUI/images/ic_more_exit_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_exit_nor.png create mode 100644 services/MoreMenuUI/images/ic_more_focusmode_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_focusmode_nor.png create mode 100644 services/MoreMenuUI/images/ic_more_history_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_history_nor.png create mode 100644 services/MoreMenuUI/images/ic_more_minibrowser_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_minibrowser_nor.png create mode 100644 services/MoreMenuUI/images/ic_more_mobileview_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_mobileview_nor.png create mode 100644 services/MoreMenuUI/images/ic_more_pointermode_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_pointermode_nor.png create mode 100644 services/MoreMenuUI/images/ic_more_readermode_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_readermode_nor.png create mode 100644 services/MoreMenuUI/images/ic_more_setting_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_setting_nor.png create mode 100644 services/MoreMenuUI/images/ic_more_share_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_share_nor.png create mode 100644 services/MoreMenuUI/images/ic_more_zoom_foc.png create mode 100644 services/MoreMenuUI/images/ic_more_zoom_nor.png create mode 100644 services/MoreMenuUI/images/ico_bg_round_shape_37x37.png create mode 100644 services/MoreMenuUI/images/ico_delete.png create mode 100644 services/MoreMenuUI/images/modal_dialogs_bg.png create mode 100644 services/MoreMenuUI/images/modal_dialogs_title_bg.png create mode 100644 services/MoreMenuUI/images/web_frame_selected.png create mode 100644 services/MoreMenuUI/images/web_shadow.png diff --git a/services/CMakeLists.txt b/services/CMakeLists.txt index 8a137c9..5515ac1 100644 --- a/services/CMakeLists.txt +++ b/services/CMakeLists.txt @@ -1,14 +1,13 @@ project(services) add_subdirectory(WebKitEngineService) -# MERGE_ME -#add_subdirectory(MoreMenuUI) +add_subdirectory(MoreMenuUI) add_subdirectory(MainUI) # MERGE_ME #add_subdirectory(HistoryUI) add_subdirectory(TabUI) add_subdirectory(SimpleUI) -#MERGE_ME +# MERGE_ME #add_subdirectory(SettingsUI) add_subdirectory(SimpleURI) add_subdirectory(BookmarkManagerUI) diff --git a/services/MoreMenuUI/AddBookmarkPopup.cpp b/services/MoreMenuUI/AddBookmarkPopup.cpp new file mode 100644 index 0000000..fea26c4 --- /dev/null +++ b/services/MoreMenuUI/AddBookmarkPopup.cpp @@ -0,0 +1,344 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include "Tools/EflTools.h" +#include "AddBookmarkPopup.h" +#include "BrowserLogger.h" + +namespace tizen_browser{ +namespace base_ui{ + +typedef struct _BookmarkFolderItemData +{ + int index; + std::shared_ptr item; + std::shared_ptr addBookmarkPopup; +} BookmarkFolderItemData; + + +AddBookmarkPopup::AddBookmarkPopup(Evas_Object* main_layout): + m_popup(nullptr), + m_gengrid(nullptr), + m_mainLayout(main_layout), + m_itemClass(nullptr) +{ +} + +AddBookmarkPopup::~AddBookmarkPopup () +{} + +void AddBookmarkPopup::show() +{ + BROWSER_LOGD("[%s],", __func__); + bm_edjFilePath = EDJE_DIR; + bm_edjFilePath.append("MoreMenuUI/AddBookmarkPopup.edj"); + elm_theme_extension_add(0, bm_edjFilePath.c_str()); + m_popup = elm_layout_add(m_mainLayout); + if (m_popup != nullptr) + { + elm_object_signal_emit(m_mainLayout, "elm,state,show", "elm"); + elm_layout_file_set(m_popup, bm_edjFilePath.c_str(), "bookmark_popup"); + BROWSER_LOGI("PATH: %s", bm_edjFilePath.c_str()); + + m_gengrid = elm_gengrid_add(m_popup); + + if (m_gengrid != nullptr) + { + evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, nullptr); + evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, nullptr); + // evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this); + + if (!m_itemClass) { + m_itemClass = elm_gengrid_item_class_new(); + m_itemClass->item_style = "folder_grid_item"; + m_itemClass->func.text_get = _grid_text_get; + m_itemClass->func.content_get = _grid_content_get; + m_itemClass->func.state_get = nullptr; + m_itemClass->func.del = nullptr; + } + + 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); + double efl_scale = elm_config_scale_get() / elm_app_base_scale_get(); + elm_gengrid_item_size_set(m_gengrid, 226 * efl_scale, 226 * efl_scale); + + elm_object_part_content_set(m_popup, "elm.swallow.gengrid", m_gengrid); + elm_object_part_content_set(m_mainLayout, "popup", m_popup); + evas_object_show(m_gengrid); + } + } +} + +void AddBookmarkPopup::hide() +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + elm_object_signal_emit(m_mainLayout, "elm,state,hide", "elm"); + evas_object_hide(elm_layout_content_get(m_popup, "elm.swallow.gengrid")); + evas_object_hide(elm_layout_content_get(m_mainLayout, "popup")); + evas_object_hide(m_gengrid); + evas_object_hide(m_popup); + clearItems(); +} + +Evas_Object * AddBookmarkPopup::getContent() +{ + return m_gengrid; +} + +void AddBookmarkPopup::setEmptyGengrid(bool setEmpty) +{ + if(setEmpty) { + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoHistoryLabel()); + } else { + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", nullptr); + } +} + +Evas_Object* AddBookmarkPopup::createNoHistoryLabel() +{ + Evas_Object *label = elm_label_add(m_popup); + if (label != nullptr) + { + elm_object_text_set(label, "No favorite websites."); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + } + return label; +} + +void AddBookmarkPopup::addBookmarkFolderItem(std::shared_ptr hi , int ind) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + BookmarkFolderItemData *itemData = new BookmarkFolderItemData(); + if (itemData != nullptr) + { + itemData->item = hi; + itemData->index = ind; + itemData->addBookmarkPopup = std::shared_ptr(this); + Elm_Object_Item* BookmarkFolderView = elm_gengrid_item_append(m_gengrid, m_itemClass, itemData, nullptr, this); + if (BookmarkFolderView) + { + if(ind == 1) + { + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + m_map_bookmark_folder_views.insert(std::pair("new_folder_button",BookmarkFolderView)); + } + else + m_map_bookmark_folder_views.insert(std::pair(hi->getAddress(),BookmarkFolderView)); + + elm_gengrid_item_selected_set(BookmarkFolderView, EINA_FALSE); + setEmptyGengrid(false); + } + } +} + +void AddBookmarkPopup::addBookmarkFolderItems(std::vector > items) +{ + BROWSER_LOGD("%s:%d %s Bookmark Folder Items: %d", __FILE__, __LINE__, __func__, items.size()); + int i = 1; + addBookmarkFolderItem(nullptr, i); + for (auto it = items.begin(); it != items.end(); ++it, ++i) { + addBookmarkFolderItem(*it, i); + } + elm_object_part_content_set(m_popup, "elm.swallow.gengrid",getContent()); + evas_object_show(getContent()); +} + +char* AddBookmarkPopup::_grid_text_get(void *data, Evas_Object *, const char *part) +{ + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + if ((data != nullptr) && (part != nullptr)) + { + static const char* part_name = "page_title"; + static const int part_len = strlen(part_name); + + BookmarkFolderItemData *itemData = reinterpret_cast(data); + if (!strncmp(part, part_name, part_len)) { + if(itemData->item) + return strdup(itemData->item->getTittle().c_str()); + } + } + return strdup(""); +} + +const char* AddBookmarkPopup::getImageFileNameForType(int index, bool focused) +{ + static char* file_name = ""; + if (index == 1) + { + if (focused) + { + file_name = "btn_bar_new_foc.png"; + } + else + { + file_name = "btn_bar_new_nor.png"; + } + } + return file_name; +} + +Evas_Object * AddBookmarkPopup::_grid_content_get(void *data, Evas_Object *obj, const char *part) +{ + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + if ((data != nullptr) && (obj != nullptr) && (part != nullptr)) + { + BookmarkFolderItemData *itemData = reinterpret_cast(data); + + static const char* part1_name = "elm.thumbnail"; + static const char* part2_name = "elm.thumbButton"; + static const int part1_len = strlen(part1_name); + static const int part2_len = strlen(part2_name); + + if (!strncmp(part, part1_name, part1_len) && (itemData->index == 1)) { + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + Evas_Object* thumb_nail = elm_icon_add(obj); + const char* file_name = getImageFileNameForType(itemData->index, false); + BROWSER_LOGD("%s:%d %s file=%s", __FILE__, __LINE__, __func__, file_name); + if (thumb_nail != nullptr) + { + elm_image_file_set(thumb_nail, itemData->addBookmarkPopup->bm_edjFilePath.c_str(), file_name); + } + return thumb_nail; + } + if (!strncmp(part, part2_name, part2_len)) { + Evas_Object *thumbButton = elm_button_add(obj); + if (thumbButton != nullptr) + { + elm_object_style_set(thumbButton, part2_name); + if(itemData->index == 1) + { + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::AddBookmarkPopup::_newFolderButton, data); + evas_object_event_callback_add(thumbButton, EVAS_CALLBACK_MOUSE_IN, __cb_mouse_in, data); + evas_object_event_callback_add(thumbButton, EVAS_CALLBACK_MOUSE_OUT, __cb_mouse_out, data); + } + else + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::AddBookmarkPopup::_thumbSelected, data); + } + return thumbButton; + } + + } + return nullptr; +} + +void AddBookmarkPopup::__cb_mouse_in(void * data, Evas *, Evas_Object *obj, void *) +{ + BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); + if ((data != nullptr) && (obj != nullptr)) + { + elm_object_focus_set(obj, EINA_TRUE); + BookmarkFolderItemData *itemData = reinterpret_cast(data); + + const char* file_name = getImageFileNameForType(itemData->index, true); + Elm_Object_Item * selected = itemData->addBookmarkPopup->m_map_bookmark_folder_views["new_folder_button"]; + if (selected != nullptr) + { + Evas_Object *thumb_nail = elm_object_item_part_content_get(selected, "elm.thumbnail"); + if (thumb_nail != nullptr) + { + elm_image_file_set(thumb_nail, itemData->addBookmarkPopup->bm_edjFilePath.c_str(), file_name); + } + } + } +} + +void AddBookmarkPopup::__cb_mouse_out(void * data, Evas *e, Evas_Object *obj, void *event_info) +{ + BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); + BookmarkFolderItemData *itemData = reinterpret_cast(data); + elm_object_focus_set(obj, EINA_FALSE); + const char* file_name = getImageFileNameForType(itemData->index, false); + Elm_Object_Item * selected = itemData->addBookmarkPopup->m_map_bookmark_folder_views["new_folder_button"]; + Evas_Object *thumb_nail = elm_object_item_part_content_get(selected, "elm.thumbnail"); + elm_image_file_set(thumb_nail, itemData->addBookmarkPopup->bm_edjFilePath.c_str(), file_name); +} + +void AddBookmarkPopup::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + /*Elm_Object_Item * selected = reinterpret_cast(event_info); + HistoryItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); + AddBookmarkPopup * self = reinterpret_cast(data); + + self->bookmarkClicked(itemData->item);*/ +} + + +void AddBookmarkPopup::_newFolderButton(void * data, Evas_Object * /* obj */, void * /* event_info */) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + BookmarkFolderItemData * itemData = reinterpret_cast(data); + itemData->addBookmarkPopup->addNewFolderClicked(std::string()); +} + +void AddBookmarkPopup::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + BookmarkFolderItemData * itemData = reinterpret_cast(data); + itemData->addBookmarkPopup->folderSelected(itemData->item->getId()); +} + +void AddBookmarkPopup::clearItems() +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + elm_gengrid_clear(m_gengrid); + m_map_bookmark_folder_views.clear(); + elm_theme_extension_del(nullptr, bm_edjFilePath.c_str()); + elm_theme_full_flush(); + elm_cache_all_flush(); +} + + +void AddBookmarkPopup::updateGengrid() +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + elm_gengrid_clear(m_gengrid); + m_map_bookmark_folder_views.clear(); +} + +void AddBookmarkPopup::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,in", "over2"); + + // selected manually + elm_gengrid_item_selected_set(item, EINA_TRUE); +} + +void AddBookmarkPopup::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,out", "over2"); + + // unselected manually + elm_gengrid_item_selected_set(item, EINA_FALSE); +} + +} +} diff --git a/services/MoreMenuUI/AddBookmarkPopup.h b/services/MoreMenuUI/AddBookmarkPopup.h new file mode 100644 index 0000000..62d86e7 --- /dev/null +++ b/services/MoreMenuUI/AddBookmarkPopup.h @@ -0,0 +1,70 @@ +#ifndef ADDBOOKMARKPOPUP_H +#define ADDBOOKMARKPOPUP_H + +#include +#include + +#include "AbstractUIComponent.h" +#include "AbstractService.h" +#include "ServiceFactory.h" +#include "service_macros.h" +#include "BookmarkItem.h" + +namespace tizen_browser{ +namespace base_ui{ + +class AddBookmarkPopup{ + +public: + AddBookmarkPopup(Evas_Object *main_layout); + ~AddBookmarkPopup(); + + Evas_Object *getContent(); + void addBookmarkFolderItem(std::shared_ptr , int); + void addBookmarkFolderItems(std::vector >); + void clearItems(); + void updateGengrid(); + Evas_Object* createNoHistoryLabel(); + void setEmptyGengrid(bool setEmpty); + + boost::signals2::signal blockClicked; + boost::signals2::signal folderSelected; + boost::signals2::signal addNewFolderClicked; + /** + * Theese setters should be called before showing popup. + */ + void show(); + void hide(); + +private: + static char* _grid_text_get(void *data, Evas_Object *, const char *part); + static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); + static void _itemSelected(void * data, Evas_Object * obj, void * event_info); + static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); + static void _newFolderButton(void *data, Evas_Object *obj, void *event_info); + static Evas_Object* listItemContentGet(void *data, Evas_Object *obj, const char *part); + static char* listItemTextGet(void *data, Evas_Object *obj, const char *part); + + static void item_clicked_cb(void *data, Evas_Object *obj, void *event_info); + static void close_clicked_cb(void *data, Evas_Object *obj, void *event_info); + + static const char* getImageFileNameForType(int index, bool focused); + + Evas_Object *m_mainLayout; + Evas_Object *m_popup; + Evas_Object *m_gengrid; + + Elm_Gengrid_Item_Class * m_itemClass; + std::map m_map_bookmark_folder_views; + std::string bm_edjFilePath; + bool m_gengridSetup; + + static void __cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info); + static void __cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info); + + static void focusItem(void* data, Evas_Object* obj, void* event_info); + static void unFocusItem(void* data, Evas_Object* obj, void* event_info); +}; +} +} +#endif diff --git a/services/MoreMenuUI/CMakeLists.txt b/services/MoreMenuUI/CMakeLists.txt new file mode 100644 index 0000000..611598b --- /dev/null +++ b/services/MoreMenuUI/CMakeLists.txt @@ -0,0 +1,44 @@ +project(MoreMenuUI) + +set(MoreMenuUI_SRCS + MoreMenuUI.cpp + AddBookmarkPopup.cpp + NewFolderPopup.cpp + ) + +set(MoreMenuUI_HEADERS + MoreMenuUI.h + AddBookmarkPopup.h + NewFolderPopup.h + ) + +include(Coreheaders) +include(EFLHelpers) + +include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) + +add_library(${PROJECT_NAME} SHARED ${MoreMenuUI_SRCS}) + +if(TIZEN_BUILD) + target_link_libraries(${PROJECT_NAME} ${pkgs_LDFLAGS}) +endif(TIZEN_BUILD) + +install(TARGETS ${PROJECT_NAME} + LIBRARY DESTINATION services + ARCHIVE DESTINATION services/static) + +include(EDCCompile) +#please do not add edc/ directory +set(edcFiles + MoreMenu.edc + AddBookmarkPopup.edc + NewFolderPopup.edc + ) + +foreach(edec ${edcFiles}) + string(REPLACE ".edc" ".edj" target_name ${edec}) + EDJ_TARGET(${target_name} + ${CMAKE_CURRENT_SOURCE_DIR}/edc/${edec} + ${CMAKE_CURRENT_BINARY_DIR}) +endforeach(edec) + diff --git a/services/MoreMenuUI/MoreMenuUI.cpp b/services/MoreMenuUI/MoreMenuUI.cpp new file mode 100644 index 0000000..492f3ea --- /dev/null +++ b/services/MoreMenuUI/MoreMenuUI.cpp @@ -0,0 +1,460 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "MoreMenuUI.h" +#include "ServiceManager.h" +#include "BrowserLogger.h" +#include "Tools/EflTools.h" +#include "../Tools/BrowserImage.h" + +#define efl_scale (elm_config_scale_get() / elm_app_base_scale_get()) + +namespace tizen_browser{ +namespace base_ui{ + +EXPORT_SERVICE(MoreMenuUI, "org.tizen.browser.moremenuui") + +struct ItemData{ + tizen_browser::base_ui::MoreMenuUI * m_moreMenu; + tizen_browser::services::HistoryItem * h_item; + Elm_Object_Item * e_item; + }; + +typedef struct _MoreItemData +{ + ItemType item; + std::shared_ptr moreMenuUI; +} MoreMenuItemData; + +MoreMenuUI::MoreMenuUI() + : m_gengrid(NULL) + , m_parent(NULL) + , m_item_class(NULL) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + edjFilePath = EDJE_DIR; + edjFilePath.append("MoreMenuUI/MoreMenu.edj"); +} + +MoreMenuUI::~MoreMenuUI() +{ +} + +void MoreMenuUI::show(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_parent = parent; + elm_theme_extension_add(NULL, edjFilePath.c_str()); + m_mm_layout = elm_layout_add(parent); + elm_layout_file_set(m_mm_layout, 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_show(m_mm_layout); + + m_gengrid = elm_gengrid_add(m_mm_layout); + elm_object_part_content_set(m_mm_layout, "elm.swallow.grid", m_gengrid); + + /*evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, NULL); + evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, NULL); + evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this);*/ + + if (!m_item_class) { + m_item_class = elm_gengrid_item_class_new(); + m_item_class->item_style = "menu_item"; + m_item_class->func.text_get = _grid_text_get; + m_item_class->func.content_get = _grid_content_get; + m_item_class->func.state_get = NULL; + m_item_class->func.del = NULL; + } + + 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); + + addItems(); +} + +void MoreMenuUI::showCurrentTab(const std::shared_ptr item) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(NULL, edjFilePath.c_str()); + m_genList = elm_genlist_add(m_mm_layout); + elm_object_part_content_set(m_mm_layout, "elm.swallow.genlist", m_genList); + elm_genlist_homogeneous_set(m_genList, EINA_FALSE); + elm_genlist_multi_select_set(m_genList, EINA_FALSE); + elm_genlist_select_mode_set(m_genList, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genList, ELM_LIST_LIMIT); + elm_genlist_decorate_mode_set(m_genList, EINA_TRUE); + evas_object_size_hint_weight_set(m_genList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); + evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, NULL);*/ + + m_itemClass = elm_genlist_item_class_new(); + m_itemClass->item_style = "current_tab"; + m_itemClass->func.text_get = &listItemTextGet; + m_itemClass->func.content_get = &listItemContentGet; + m_itemClass->func.state_get = 0; + m_itemClass->func.del = 0; + + ItemData * id = new ItemData; + id->m_moreMenu = this; + id->h_item = item ? item.get() : NULL; + Elm_Object_Item* elmItem = elm_genlist_item_append(m_genList, //genlist + m_itemClass, //item Class + id, + NULL, //parent item + ELM_GENLIST_ITEM_NONE, //item type + NULL, + NULL //data passed to above function + ); + id->e_item = elmItem; + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); +} + +Evas_Object* MoreMenuUI::listItemContentGet(void* data, Evas_Object* obj, const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData * id = static_cast(data); + if(!strcmp(part, "favicon") && id->h_item && id->h_item->getFavIcon()) + { + // Currently favicon is not getting fetched from the engine, so we are showing Google's favicon by default. + Evas_Object* thumb_nail = elm_icon_add(obj); + const char* file_name = "favicon.png"; + elm_image_file_set(thumb_nail, id->m_moreMenu->edjFilePath.c_str(), file_name); + return thumb_nail; + //return tizen_browser::tools::EflTools::getEvasImage(id->h_item->getFavIcon(), obj); + } + else if(!strcmp(part, "star_click")) + { + Evas_Object *star_click = elm_button_add(obj); + elm_object_style_set(star_click, "hidden_button"); + evas_object_smart_callback_add(star_click, "clicked", MoreMenuUI::star_clicked_cb, id); + return star_click; + } + else if(!strcmp(part, "close_click")) + { + Evas_Object *close_click = elm_button_add(obj); + elm_object_style_set(close_click, "hidden_button"); + evas_object_smart_callback_add(close_click, "clicked", MoreMenuUI::close_clicked_cb, id); + return close_click; + } + return NULL; +} + +void MoreMenuUI::item_clicked_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); +} + +void MoreMenuUI::star_clicked_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData * id = static_cast(data); + id->m_moreMenu->AddBookmarkPopupCalled(); +} + +void MoreMenuUI::AddBookmarkPopupCalled() +{ //m_map_bookmark_folder_list.clear(); + popup = std::shared_ptr (new AddBookmarkPopup(m_mm_layout)); + popup->show(); + popup->addBookmarkFolderItems(m_map_bookmark_folder_list); + popup->folderSelected.disconnect_all_slots(); + popup->folderSelected.connect(boost::bind(&MoreMenuUI::addToBookmarks, this, _1)); + popup->addNewFolderClicked.disconnect_all_slots(); + popup->addNewFolderClicked.connect(boost::bind(&MoreMenuUI::newFolderPopup, this,_1)); +} + +void MoreMenuUI::newFolderPopup(std::string) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_popup = std::shared_ptr (new NewFolderPopup(m_mm_layout, NULL,"Add New Folder for adding to Bookmark","New Folder","Add to bookmark","Cancel")); + m_popup->on_ok.disconnect_all_slots(); + m_popup->on_ok.connect(boost::bind(&MoreMenuUI::NewFolderCreate, this, _1)); + m_popup->on_cancel.disconnect_all_slots(); + m_popup->on_cancel.connect(boost::bind(&MoreMenuUI::CancelClicked, this, _1)); + popup->hide(); + m_popup->show(); +} + +void MoreMenuUI::NewFolderCreate(Evas_Object * popup_content) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_folderName = elm_entry_entry_get(popup_content); + BookmarkFolderCreated(m_folderName.c_str(), 0,0); + m_popup->hide(); +} + +void MoreMenuUI::CancelClicked(Evas_Object * popup) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_popup->hide(); +} + +void MoreMenuUI::addToBookmarks(int folder_id) +{ + AddBookmarkInput(folder_id); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + popup->hide(); + popup.reset(); +} +void MoreMenuUI::close_clicked_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData * id = static_cast(data); + id->m_moreMenu->closeMoreMenuClicked(std::string()); + id->m_moreMenu->clearItems(); +} + +char* MoreMenuUI::listItemTextGet(void* data, Evas_Object* /* obj */, const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData * id = static_cast(data); + if(!strcmp(part, "webpage_title")) + { + if(!id->h_item) + return strdup("New Tab"); + if(!id->h_item->getTitle().empty()){ + return strdup(id->h_item->getTitle().c_str()); + } + } + else if(!strcmp(part, "webpage_url")) + { + if(!id->h_item) + return strdup(""); + if(!id->h_item->getUrl().empty()){ + return strdup(id->h_item->getUrl().c_str()); + } + } + return strdup(""); +} + +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, "elm.swallow.genlist")); + evas_object_hide(m_mm_layout); +} + +void MoreMenuUI::addItems() +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + for (size_t i = 0; i < 10; i++) { + MoreMenuItemData *itemData = new MoreMenuItemData(); + itemData->item = static_cast(i);; + itemData->moreMenuUI = std::shared_ptr(this); + Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, NULL, this); + 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__); +} + +char* MoreMenuUI::_grid_text_get(void *data, Evas_Object *obj, const char *part) +{ + MoreMenuItemData *itemData = reinterpret_cast(data); + + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + if (!strcmp(part, "menu_label")) { + const char* item_name = NULL; + switch(itemData->item) { + case READER_MODE: + item_name = "Reader mode"; break; + case BOOKMARK_MANAGER: + item_name = "Bookmark manager"; break; + case HISTORY: + item_name = "History"; break; + case SCREEN_ZOOM: + item_name = "Screen zoom"; break; + case START_MINIBROWSER: + item_name = "Start minibrowser"; break; + case FOCUS_MODE: + item_name = "Focus mode"; break; + case VIEW_MOBILE_WEB: + item_name = "View mobile web"; break; + case SHARE: + item_name = "Share"; break; + case SETTINGS: + item_name = "Settings"; break; + case EXIT_BROWSER: + item_name = "Exit browser"; break; + default: + item_name = ""; + } + return strdup(item_name); + } + return NULL; +} + +static const char* getImageFileNameForType(ItemType type, bool focused) +{ + const char* file_name = NULL; + switch(type) { + case READER_MODE: + file_name = focused ? "ic_more_readermode_foc.png" : "ic_more_readermode_nor.png"; break; + case BOOKMARK_MANAGER: + file_name = focused ? "ic_more_bookmark_foc.png" : "ic_more_bookmark_nor.png"; break; + case HISTORY: + file_name = focused ? "ic_more_history_foc.png" : "ic_more_history_nor.png"; break; + case SCREEN_ZOOM: + file_name = focused ? "ic_more_zoom_foc.png" : "ic_more_zoom_nor.png"; break; + case START_MINIBROWSER: + file_name = focused ? "ic_more_minibrowser_foc.png" : "ic_more_minibrowser_nor.png"; break; + case FOCUS_MODE: + file_name = focused ? "ic_more_focusmode_foc.png" : "ic_more_focusmode_nor.png"; break; + case VIEW_MOBILE_WEB: + file_name = focused ? "ic_more_mobileview_foc.png" : "ic_more_mobileview_nor.png"; break; + case SHARE: + file_name = focused ? "ic_more_share_foc.png" : "ic_more_share_nor.png"; break; + case SETTINGS: + file_name = focused ? "ic_more_setting_foc.png" : "ic_more_setting_nor.png"; break; + case EXIT_BROWSER: + file_name = focused ? "ic_more_exit_foc.png" : "ic_more_exit_nor.png"; break; + default: + file_name = ""; + } + return file_name; +} + +Evas_Object * MoreMenuUI::_grid_content_get(void *data, Evas_Object *obj, const char *part) +{ + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + MoreMenuItemData *itemData = reinterpret_cast(data); + + if (!strcmp(part, "thumbnail_item")) { + Evas_Object* thumb_nail = elm_icon_add(obj); + const char* file_name = getImageFileNameForType(itemData->item, false); + elm_image_file_set(thumb_nail, itemData->moreMenuUI->edjFilePath.c_str(), file_name); + return thumb_nail; + } + else if (!strcmp(part, "thumbbutton_item")) { + Evas_Object *thumbButton = elm_button_add(obj); + elm_object_style_set(thumbButton, "clickButton"); + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MoreMenuUI::_thumbSelected, data); + evas_object_event_callback_add(thumbButton, EVAS_CALLBACK_MOUSE_IN, __cb_mouse_in, data); + evas_object_event_callback_add(thumbButton, EVAS_CALLBACK_MOUSE_OUT, __cb_mouse_out, data); + return thumbButton; + } + return NULL; +} + +void MoreMenuUI::__cb_mouse_in(void * data, Evas *e, Evas_Object *obj, void *event_info) +{ + BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); + elm_object_focus_set(obj, EINA_TRUE); + MoreMenuItemData *itemData = reinterpret_cast(data); + + const char* file_name = getImageFileNameForType(itemData->item, true); + Elm_Object_Item * selected = itemData->moreMenuUI->m_map_menu_views[itemData->item]; + Evas_Object *thumb_nail = elm_object_item_part_content_get(selected, "thumbnail_item"); + elm_image_file_set(thumb_nail, itemData->moreMenuUI->edjFilePath.c_str(), file_name); +} + +void MoreMenuUI::__cb_mouse_out(void * data, Evas *e, Evas_Object *obj, void *event_info) +{ + BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); + MoreMenuItemData *itemData = reinterpret_cast(data); + elm_object_focus_set(obj, EINA_FALSE); + const char* file_name = getImageFileNameForType(itemData->item, false); + Elm_Object_Item * selected = itemData->moreMenuUI->m_map_menu_views[itemData->item]; + Evas_Object *thumb_nail = elm_object_item_part_content_get(selected, "thumbnail_item"); + elm_image_file_set(thumb_nail, itemData->moreMenuUI->edjFilePath.c_str(), file_name); +} + +void MoreMenuUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); +} + +void MoreMenuUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) +{ + BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); + MoreMenuItemData *itemData = reinterpret_cast(data); + switch(itemData->item) { + case READER_MODE: + break; + case BOOKMARK_MANAGER: + break; + case HISTORY: + itemData->moreMenuUI->historyUIClicked(std::string()); break; + case SCREEN_ZOOM: + break; + case START_MINIBROWSER: + break; + case FOCUS_MODE: + break; + case VIEW_MOBILE_WEB: + break; + case SHARE: + break; + case SETTINGS: + itemData->moreMenuUI->settingsClicked(std::string()); break; + case EXIT_BROWSER: + break; + } +} + +void MoreMenuUI::getBookmarkFolderList(std::vector > folderList) +{ + m_map_bookmark_folder_list = folderList; +} + +void MoreMenuUI::clearItems() +{ + hide(); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_gengrid_clear(m_gengrid); + elm_genlist_clear(m_genList); + m_map_menu_views.clear(); + m_map_bookmark_folder_list.clear(); + elm_theme_extension_del(NULL, edjFilePath.c_str()); + elm_theme_full_flush(); + elm_cache_all_flush(); +} + +void MoreMenuUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,in", "over2"); + + // selected manually + elm_gengrid_item_selected_set(item, EINA_TRUE); +} + +void MoreMenuUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,out", "over2"); + + // unselected manually + elm_gengrid_item_selected_set(item, EINA_FALSE); +} + +} +} diff --git a/services/MoreMenuUI/MoreMenuUI.h b/services/MoreMenuUI/MoreMenuUI.h new file mode 100644 index 0000000..7bff048 --- /dev/null +++ b/services/MoreMenuUI/MoreMenuUI.h @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MOREMENUUI_H +#define MOREMENUUI_H + +#include +#include + +#include "AbstractUIComponent.h" +#include "AbstractService.h" +#include "ServiceFactory.h" +#include "service_macros.h" +//#include "../SimpleUI/SimpleUI.h" + +#include "BookmarkItem.h" +#include "AddBookmarkPopup.h" +#include "NewFolderPopup.h" +#include "../BookmarkManagerUI/AddNewFolderPopup.h" +#include "services/HistoryService/HistoryItem.h" + +namespace tizen_browser{ +namespace base_ui{ + +class SimpleUI; +enum ItemType { + READER_MODE, + BOOKMARK_MANAGER, + HISTORY, + SCREEN_ZOOM, + START_MINIBROWSER, + FOCUS_MODE, + VIEW_MOBILE_WEB, + SHARE, + SETTINGS, + EXIT_BROWSER +} item; + +class BROWSER_EXPORT MoreMenuUI + : public tizen_browser::interfaces::AbstractUIComponent + , public tizen_browser::core::AbstractService +{ +public: + MoreMenuUI(); + ~MoreMenuUI(); + void show(Evas_Object *main_layout); + void showCurrentTab(const std::shared_ptr item); + virtual std::string getName(); + void addItems(); + void hide(); + void clearItems(); + void getBookmarkFolderList(std::vector > ); + + boost::signals2::signal historyUIClicked; + boost::signals2::signal BookmarkFolderCreated; + boost::signals2::signal closeMoreMenuClicked; + boost::signals2::signal BookmarkFoldersListImport; + boost::signals2::signal settingsClicked; + boost::signals2::signal AddBookmarkInput; +private: + 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 _itemSelected(void * data, Evas_Object * obj, void * event_info); + static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); + + static Evas_Object* listItemContentGet(void *data, Evas_Object *obj, const char *part); + static char* listItemTextGet(void *data, Evas_Object *obj, const char *part); + + void newFolderPopup(std::string); + void NewFolderCreate(Evas_Object * popup_content); + void CancelClicked(Evas_Object * popup_content); + + void AddBookmarkPopupCalled(); + void addToBookmarks(int folder_id); + static void item_clicked_cb(void *data, Evas_Object *obj, void *event_info); + static void star_clicked_cb(void *data, Evas_Object *obj, void *event_info); + static void close_clicked_cb(void *data, Evas_Object *obj, void *event_info); + + static void __cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info); + static void __cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info); + +private: + Evas_Object *m_genList; + std::shared_ptr m_popup; + Evas_Object *m_mm_layout; + std::shared_ptr popup; + Elm_Genlist_Item_Class *m_itemClass; + Evas_Object *m_gengrid; + Evas_Object *m_parent; + Elm_Gengrid_Item_Class * m_item_class; + std::map m_map_menu_views; + std::vector > m_map_bookmark_folder_list; + std::string edjFilePath; + std::string m_folderName; + bool m_gengridSetup; + + static void focusItem(void* data, Evas_Object* obj, void* event_info); + static void unFocusItem(void* data, Evas_Object* obj, void* event_info); +}; + +} +} + +#endif // BOOKMARKSUI_H diff --git a/services/MoreMenuUI/NewFolderPopup.cpp b/services/MoreMenuUI/NewFolderPopup.cpp new file mode 100644 index 0000000..32b8f69 --- /dev/null +++ b/services/MoreMenuUI/NewFolderPopup.cpp @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include "Tools/EflTools.h" +#include "NewFolderPopup.h" +#include "BrowserLogger.h" + +#define efl_scale (elm_config_scale_get() / elm_app_base_scale_get()) + +namespace tizen_browser{ +namespace base_ui{ + +NewFolderPopup::NewFolderPopup(Evas_Object* main_layout) : + m_popup(NULL), + m_content(NULL), + m_mainLayout(main_layout) +{ + +} + +NewFolderPopup::NewFolderPopup(Evas_Object *main_layout, Evas_Object *content, const char *message, char* title, char* okButtonText, char* cancelButtonText) : + m_popup(NULL), + m_mainLayout(main_layout), + m_content(content), + m_message(message), + m_title(title), + m_okButtonText(okButtonText), + m_cancelButtonText(cancelButtonText) +{ + +} + +void NewFolderPopup::setTitle(const std::string& title) +{ + m_title = title; +} + +void NewFolderPopup::setMessage(const std::string& message) +{ + m_message = message; +} + +void NewFolderPopup::setContent(Evas_Object* content) +{ + m_content = content; +} + +void NewFolderPopup::setOkButtonText(const std::string& okButtonText) +{ + m_okButtonText = okButtonText; +} + +void NewFolderPopup::setCancelButtonText(const std::string& cancelButtonText) +{ + m_cancelButtonText = cancelButtonText; +} + +void NewFolderPopup::show() +{ + BROWSER_LOGD("[%si %d],", __func__, __LINE__); + std::string edjePath = std::string(EDJE_DIR); + edjePath.append("MoreMenuUI/NewFolderPopup.edj"); + elm_theme_extension_add(0, edjePath.c_str()); + m_popup = elm_layout_add(m_mainLayout); + elm_layout_file_set(m_popup, edjePath.c_str(), "new_folder_popup"); + elm_object_part_text_set(m_popup, "title_text", m_title.c_str()); + + Evas_Object *buttonsBox = elm_box_add(m_popup); + elm_box_horizontal_set(buttonsBox, EINA_TRUE); + + /* for margins */ + Evas_Object *layout = elm_layout_add(m_popup); + elm_layout_file_set(layout, edjePath.c_str() , "popup_input_text"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_content_set(m_popup, layout); + elm_object_part_text_set(m_popup, "title,text", m_title.c_str()); + + m_editfield_entry = elm_entry_add(layout); + elm_object_style_set(m_editfield_entry, "uri_entry_popup"); + evas_object_size_hint_weight_set(m_editfield_entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_editfield_entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_entry_editable_set(m_editfield_entry, EINA_TRUE); + elm_entry_cnp_mode_set(m_editfield_entry, ELM_CNP_MODE_PLAINTEXT); + elm_entry_scrollable_set(m_editfield_entry, EINA_TRUE); + elm_entry_autocapital_type_set(m_editfield_entry, ELM_AUTOCAPITAL_TYPE_NONE); + elm_entry_prediction_allow_set(m_editfield_entry, EINA_FALSE); + elm_entry_single_line_set(m_editfield_entry, EINA_TRUE); + + elm_entry_input_panel_layout_set(m_editfield_entry, ELM_INPUT_PANEL_LAYOUT_URL); + elm_entry_input_panel_return_key_type_set(m_editfield_entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE); + elm_object_part_content_set(layout, "elm.swallow.content" , m_editfield_entry); + elm_entry_cursor_end_set(m_editfield_entry); + + if (!m_okButtonText.empty()) + { + BROWSER_LOGD("Button1, %s", edjePath.c_str()); + Evas_Object *btn1 = elm_button_add(buttonsBox); + evas_object_size_hint_weight_set(btn1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn1, 0.5, 0.5); + elm_object_style_set(btn1, "bookmark_button"); + elm_object_part_text_set(btn1, "elm.text", m_okButtonText.c_str()); + elm_box_pack_end(buttonsBox, btn1); + evas_object_smart_callback_add(btn1, "clicked", popup_ok_cb, (void*)this); + evas_object_show(btn1); + } + + if (!m_cancelButtonText.empty()) + { + BROWSER_LOGD("Button2"); + Evas_Object *btn2 = elm_button_add(buttonsBox); + evas_object_size_hint_weight_set(btn2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn2, 0.5, 0.5); + elm_object_style_set(btn2, "bookmark_button"); + elm_object_part_text_set(btn2, "elm.text", m_cancelButtonText.c_str()); + elm_box_pack_end(buttonsBox, btn2); + evas_object_smart_callback_add(btn2, "clicked", popup_cancel_cb, (void*)this); + evas_object_show(btn2); + } + + if(!m_message.empty()) + elm_object_part_text_set(m_popup, "elm.text", m_message.c_str()); + + evas_object_show(m_editfield_entry); + evas_object_show(buttonsBox); + evas_object_show(layout); + elm_object_part_content_set(m_popup, "buttons", buttonsBox); + elm_object_part_content_set(m_popup, "content", layout); + elm_object_part_content_set(m_mainLayout, "popup", m_popup); + + elm_object_signal_emit(m_mainLayout, "elm,state,show", "elm"); +} + +void NewFolderPopup::hide() +{ + evas_object_hide(m_popup); + elm_object_signal_emit(m_mainLayout, "elm,state,hide", "elm"); +} + +void NewFolderPopup::popup_ok_cb(void *data, Evas_Object *btn, void*) +{ + BROWSER_LOGD("[%s],", __func__); + NewFolderPopup *ownPopup = static_cast(data); + ownPopup->on_ok(ownPopup->m_editfield_entry); +} +void NewFolderPopup::popup_cancel_cb(void *data, Evas_Object *btn, void*) +{ + BROWSER_LOGD("[%s],", __func__); + NewFolderPopup *ownPopup = static_cast(data); + ownPopup->on_cancel(ownPopup->m_editfield_entry); +} + +} +} diff --git a/services/MoreMenuUI/NewFolderPopup.h b/services/MoreMenuUI/NewFolderPopup.h new file mode 100644 index 0000000..18edd11 --- /dev/null +++ b/services/MoreMenuUI/NewFolderPopup.h @@ -0,0 +1,50 @@ +#ifndef NEWFOLDERPOPUP_H +#define NEWFOLDERPOPUP_H + +#include +#include + +#include "AbstractUIComponent.h" +#include "AbstractService.h" +#include "ServiceFactory.h" +#include "service_macros.h" +#include "BookmarkItem.h" + +namespace tizen_browser{ +namespace base_ui{ + +class NewFolderPopup{ + +public: + NewFolderPopup(Evas_Object *main_layout); + NewFolderPopup(Evas_Object *main_layout, Evas_Object *content, const char *message, char *title, char* okButtonText, char* cancelButtonText); + + /** + * Theese setters should be called before showing popup. + */ + void setContent(Evas_Object *content); + void setMessage(const std::string &message); + void setTitle(const std::string &title); + void setOkButtonText(const std::string &okButtonText); + void setCancelButtonText(const std::string &cancelButtonText); + + void show(); + void hide(); + boost::signals2::signal on_ok; + boost::signals2::signal on_cancel; + +private: + static void popup_ok_cb(void *data, Evas_Object *btn, void*); + static void popup_cancel_cb(void *data, Evas_Object *btn, void*); + Evas_Object *m_popup; + Evas_Object *m_editfield_entry; + Evas_Object *m_content; + std::string m_message, m_title, m_okButtonText, m_cancelButtonText; + +protected: + Evas_Object *m_mainLayout; +}; + +} +} +#endif diff --git a/services/MoreMenuUI/edc/AddBookmarkPopup.edc b/services/MoreMenuUI/edc/AddBookmarkPopup.edc new file mode 100644 index 0000000..ec3c60a --- /dev/null +++ b/services/MoreMenuUI/edc/AddBookmarkPopup.edc @@ -0,0 +1,370 @@ +#define CONTENT_HEIGHT 99; +#define CONTENT_BG_HEIGHT (CONTENT_HEIGHT+294); + +#define DEBUG_RECT_OVER(over_part, r, g, b) \ + part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ + \ +scale:1; \ + type : RECT; \ + repeat_events: 1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + color: r g b 128; \ + rel1 { to: over_part; relative: 0 0; } \ + rel2 { to: over_part; relative: 1 1; } \ + } \ + } + +#define RESOURCE_IMAGE_LOSSY( FILE_NAME ) \ + group { \ + name: FILE_NAME; \ + images.image: FILE_NAME LOSSY 100; \ + parts { \ + part { name: "image"; \ + description { \ + state: "default" 0.0; \ + image.normal: FILE_NAME; \ + min: 134 167; \ + max: 134 167; \ + aspect_preference: BOTH; \ + } \ + } \ + } \ + } + + + +collections{ + RESOURCE_IMAGE_LOSSY("btn_bar_new_foc.png") + RESOURCE_IMAGE_LOSSY("btn_bar_new_nor.png") + + group { name: "bookmark_popup"; + parts{ + part{ name: "content_bg"; + type: RECT; + scale: 1; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 255 255 255 255; + align: 0.5 0.5; + min: 740 658; + max: 740 884; + rel1 {relative: 0.0 0.0;} + rel2 {relative: 1.0 1.0;} + } + } + part{ name: "title_bg"; + type: RECT; + description{ + state: "default" 0.0; + visible: 1; + color: 255 255 255 255; + min: 740 144; + max: 740 144; + align: 0.0 0; + rel1 {relative: 0.0 0.0; to: "content_bg"; offset: 0 0;} + rel2 {relative: 1.0 1.0; to: "content_bg";} + } + } + part{ name: "title_text_bm"; + type: TEXT; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 {relative: 0.0 0.0; to: "title_bg"; offset: 40 46;} + rel2 {relative: 1.0 1.0; to: "title_bg"; offset: -40 0;} + color: 51 51 51 255; + text{ + text: "Add to bookmark"; + font: "Sans"; + size: 42; + align: 0.5 0.0; + } + } + } + part{ name: "sub_title_text_bm"; + type: TEXT; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 {relative: 0.0 0.0; to: "title_bg"; offset: 40 112;} + rel2 {relative: 1.0 1.0; to: "title_bg"; offset: -40 0;} + color: 104 104 104 255; + text{ + text: "Select folder for adding to bookmark"; + font: "Sans"; + size: 32; + align: 0.5 0.0; + } + } + } + part{ name: "gengrid_bg"; + type: RECT; + mouse_events: 0; + description{ + state: "default" 0.0; + visible: 1; + color: 255 255 255 255; + rel1 {relative: 0.0 1.0; to: "title_bg"; offset: 40 40;} + rel2 {relative: 1.0 1.0; } + align: 0 0; + min: 698 452; + max: 698 678; + } + } + part{ name: "elm.swallow.gengrid"; + type: SWALLOW; + scale: 1; + description{ + state: "default" 0.0; + visible: 1; + fixed: 0 0; + rel1 {relative: 0.0 0.0; to: "gengrid_bg";} + rel2 {relative: 1.0 1.0; to: "gengrid_bg";} + align: 0.0 0.0; + min: 698 452; + max: 698 678; + } + } + } + } + + /* group { + name: "own_popup_bm_long"; + inherit: "own_popup_bm"; + parts { + part{ name: "content"; + type: SWALLOW; + scale: 1; + description{ + state: "default" 0.0; + visible: 1; + rel1 {relative: 0.0 0.0;} + rel2 {relative: 1.0 1.0;} + fixed: 1 1; + align: 0.5 0.5; + min: 542 0; + max: 542 450; + } + } + } + } + */ + +group { name: "elm/gengrid/item/folder_grid_item/default"; + data.item: "texts" "page_title"; + data.item: "contents" "elm.thumbnail elm.thumbButton"; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + image: "btn_bar_new_nor.png" COMP; + } + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + min: 226 226; + max: 226 226; + color: 255 255 255 255; + rel1.offset: -18 -18; + } + description { state: "selected"; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "thumbnail_bg"; + type: RECT; + description { state: "default" 0.0; + visible: 1; + min: 208 208; + max: 208 208; + align: 0.0 0.0; + color : 231 231 231 255; + rel1 { + relative: 0.0 0.0; to: "bg"; + } + rel2 { + relative: 1.0 1.0; to: "bg"; + } + } + description { state: "selected"; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + part { name: "elm.thumbnail"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + visible: 1; + align: 0.0 0.0; + color : 255 255 255 255; + rel1 { + relative: 0.0 0.0; to: "thumbnail_bg"; + } + rel2 { + relative: 1.0 1.0; to: "thumbnail_bg"; + } + } + description { state: "selected"; + inherit: "default" 0.0; + } + } + part { name: "page_title"; + type: TEXT; + description { state: "default" 0.0; + align: 0.5 0.5; + rel1 { + to: "thumbnail_bg"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + to: "thumbnail_bg"; + relative: 1.0 1.0; + } + color: 51 51 51 255; + text { + text: "Web page title"; + font: "Sans"; + size: 32; + align: 0.5 0.5; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color: highlightTextColor; + } + } + part { name: "elm.thumbButton"; + type: SWALLOW; + mouse_events: 1; + description { state: "default" 0.0; + rel1.to: "elm.thumbnail"; + rel2.to: "elm.thumbnail"; + } + } + part { name: "over"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "thumbnail_bg"; + rel2.to: "thumbnail_bg"; + } + } + } + programs{ + program { + name: "mouse_click_newtab"; + signal: "mouse,clicked,1"; + source: "over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_click_thumbbutton"; + signal: "mouse,clicked"; + source: "elm.thumbButton"; + script { + emit("clicked", "elm.thumbButton"); + } + } + program { name: "mouse_in"; + signal: "mouse,in"; + source: "over"; + action: STATE_SET "selected" 0.0; + target: "thumbnail_bg"; + target: "page_title"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "over"; + action: STATE_SET "default" 0.0; + target: "thumbnail_bg"; + target: "page_title"; + } + } +} + + +group{ + name: "elm/button/base/hidden_bm_button"; + parts{ + part{ + name: "button"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 0 0 0 0; + } + } + part{ + name: "over"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "button";} + rel2 { relative: 1.0 1.0;to: "button";} + color: 0 0 0 0; + } + } + } + programs{ + program { + name: "mouse_click"; + signal: "mouse,clicked,1"; + source: "over"; + script { + emit("elm,action,click", ""); + } + } + } + } +group { name: "elm/button/base/elm.thumbButton"; + images { + image: "ico_delete.png" COMP; + } + parts { + part { name: "elm.swallow.content"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + visible: 1; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + } + } + } + + programs { + program { name: "mouse,clicked"; + signal: "mouse,down,1"; + source: "elm.swallow.content"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + } + +} diff --git a/services/MoreMenuUI/edc/MoreMenu.edc b/services/MoreMenuUI/edc/MoreMenu.edc new file mode 100644 index 0000000..e7b67a7 --- /dev/null +++ b/services/MoreMenuUI/edc/MoreMenu.edc @@ -0,0 +1,969 @@ +#define DEBUG_RECT_OVER(over_part, r, g, b) \ + part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ + \ +scale:1; \ + type : RECT; \ + repeat_events: 1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + color: r g b 128; \ + rel1 { to: over_part; relative: 0 0; } \ + rel2 { to: over_part; relative: 1 1; } \ + } \ + } + +#define RESOURCE_IMAGE_LOSSY( FILE_NAME ) \ + group { \ + name: FILE_NAME; \ + images.image: FILE_NAME LOSSY 100; \ + parts { \ + part { name: "image"; \ + description { \ + state: "default" 0.0; \ + image.normal: FILE_NAME; \ + aspect: 1 1; \ + aspect_preference: BOTH; \ + } \ + } \ + } \ + } + +collections { + +RESOURCE_IMAGE_LOSSY("ic_more_readermode_nor.png") +RESOURCE_IMAGE_LOSSY("ic_more_bookmark_nor.png") +RESOURCE_IMAGE_LOSSY("ic_more_history_nor.png") +RESOURCE_IMAGE_LOSSY("ic_more_zoom_nor.png") +RESOURCE_IMAGE_LOSSY("ic_more_minibrowser_nor.png") +RESOURCE_IMAGE_LOSSY("ic_more_focusmode_nor.png") +RESOURCE_IMAGE_LOSSY("ic_more_mobileview_nor.png") +RESOURCE_IMAGE_LOSSY("ic_more_share_nor.png") +RESOURCE_IMAGE_LOSSY("ic_more_setting_nor.png") +RESOURCE_IMAGE_LOSSY("ic_more_exit_nor.png") +RESOURCE_IMAGE_LOSSY("ic_add_bookmark.png") +RESOURCE_IMAGE_LOSSY("ic_more_readermode_foc.png") +RESOURCE_IMAGE_LOSSY("ic_more_bookmark_foc.png") +RESOURCE_IMAGE_LOSSY("ic_more_history_foc.png") +RESOURCE_IMAGE_LOSSY("ic_more_zoom_foc.png") +RESOURCE_IMAGE_LOSSY("ic_more_minibrowser_foc.png") +RESOURCE_IMAGE_LOSSY("ic_more_focusmode_foc.png") +RESOURCE_IMAGE_LOSSY("ic_more_mobileview_foc.png") +RESOURCE_IMAGE_LOSSY("ic_more_share_foc.png") +RESOURCE_IMAGE_LOSSY("ic_more_setting_foc.png") +RESOURCE_IMAGE_LOSSY("ic_more_exit_foc.png") +RESOURCE_IMAGE_LOSSY("favicon.png") + +#define WIDTH 1920 +#define HEIGHT 366 +#define ITEM_WIDTH 1200 + + group { + name: "elm/genlist/item/current_tab/default"; + min: WIDTH HEIGHT; + max: WIDTH HEIGHT; + images { + image: "ico_delete.png" COMP; + image: "ic_add_bookmark" COMP; + image: "thumbnail.png" COMP; + image: "btn_bar_stop_nor.png" COMP; + } + data.item: "texts" "webpage_title webpage_url"; + data.item: "contents" "favicon star_click close_click"; + color_classes{ + color_class{ + name: "defaultBgColor"; + color: 18 22 34 255; + } + color_class{ + name: "focusBgColor"; + color: 69 143 255 255; + } + color_class{ + name: "highlightBgColor"; + color: 69 143 255 102; + } + color_class{ + name: "imageHighlight"; + color: 255 255 255 102; + } + color_class{ + name: "focusDelBgColor"; + color: 96 114 146 255; + } + color_class{ + name: "titleTextColor"; + color: 74 74 74 255; + } + color_class{ + name: "focusTextColor"; + color: 255 255 255 255; + } + color_class{ + name: "highlightTextColor"; + color: 255 255 255 51; + } + color_class{ + name: "urlTextColor"; + color: 116 116 116 204; + } + color_class{ + name: "transparent"; + color: 0 0 0 0; + } + } + parts { + part { + name: "bg_rect"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 231 231 231 255; + align: 0 0; + min: 1920 366; + max: 1920 366; + rel1 { relative: 0.0 0.0; offset: 0 0;} + } + } + part { + name: "action_bar_bg"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1920 104; + max: 1920 104; + align: 0 0; + rel1 { relative: 0.0 0.0;to: "bg_rect"; offset: 0 0;} + rel2 { relative: 1.0 1.0;to: "bg_rect";} + color : 255 255 255 255; + } + } + part { name: "action_bar_shadow"; + type: IMAGE; + scale: 1; + repeat_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + fixed: 0 0; + min: 1920 14; + max: 1920 14; + image.normal: "web_shadow.png"; + rel1 { relative: 0.0 1.0; to: "action_bar_bg"; } + rel2 { relative: 1.0 1.0; } + } + } + part { name: "moremenu_title"; + scale: 1; + type: TEXT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 500 58; + max: 500 58; + align: 0.5 0.5; + rel1 { relative: 0.0 0.0; to: "action_bar_bg";} + rel2 { relative: 1.0 1.0; to: "action_bar_bg";} + color_class: titleTextColor; + text { + text: "More menu"; + font: "Sans"; + size: 58; + align: 0.5 0.5; + } + } + } + part { + name: "close_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0.5; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "action_bar_bg"; offset: 1758 0;} + rel2 { relative: 1.0 1.0; to: "action_bar_bg";} + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusDelBgColor; + visible: 1; + } + } + part { + name: "close_icon"; + type: IMAGE; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_bg";} + rel2 { relative: 1.0 1.0; to: "close_bg";} + image.normal: "btn_bar_stop_nor.png"; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "focus" 0.0; + inherit: "highlight" 0.0; + } + } + part { + name: "close_over"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_bg";} + rel2 { relative: 1.0 1.0; to: "close_bg";} + color_class: transparent; + } + } + part { + name: "close_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_over";} + rel2 { relative: 1.0 1.0; to: "close_over";} + color_class: transparent; + } + } + part { + name: "item_background"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1200 78; + max: 1200 78; + align: 0 0; + rel1 { relative: 0.0 0.0;to: "bg_rect"; offset: 62 190;} + rel2 { relative: 1.0 1.0;to: "bg_rect";} + color : 231 231 231 231; + //color_class: defaultBgColor; + } + } + //SPACER_ITEM_BR("horizontal_line", ITEM_WIDTH, 2, "bg_rect") + part { + name: "favicon_bg"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 0; + min: 58 58; + max: 58 58; + align: 0.0 0.5; + rel1 { relative: 0.0 0.0; to: "item_background";} + rel2 { relative: 1.0 1.0; to: "item_background";} + color_class: transparent; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: imageHighlight; + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusTextColor; + } + } + part { + name: "favicon"; + type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 58 58; + max: 58 58; + align: 0.0 0.0; + rel1 { relative: 0.0 0.0; to: "favicon_bg";} + rel2 { relative: 1.0 1.0; to: "favicon_bg";} + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: imageHighlight; + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusTextColor; + } + } + part { + name: "webpage_title"; + scale: 1; + type: TEXT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 216 36; + max: 216 36; + align: 0 0.0; + rel1 { relative: 0.0 0.0; to: "item_background"; offset: 98 0;} + rel2 { relative: 1.0 1.0; to: "item_background";} + color_class: titleTextColor; + text { + text: "Web page title"; + font: "font_name"; + size: 36; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: highlightTextColor; + } + } + part { + name: "webpage_url"; + scale: 1; + type: TEXT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 765 27; + max: 765 27; + align: 0 0; + rel1 { relative: 0.0 0.0; to: "item_background"; offset: 98 51;} + rel2 { relative: 1.0 1.0; to: "item_background";} + color_class: urlTextColor; + text { + text: "http:/onet.pl"; + font: "font_name"; + size: 27; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: highlightTextColor; + } + } + part { + name: "star_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 338 58; + max: 338 58; + rel1 { relative: 0.0 0.0; to: "bg_rect"; offset: 1519 200;} + rel2 { relative: 1.0 1.0; to: "bg_rect";} + color: 255 255 255 255; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusDelBgColor; + visible: 1; + } + } + part{ + name: "add_to_bookmark_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "star_bg";} + rel2 { relative: 1.0 1.0;to: "star_bg";} + color: 0 0 0 255; + text { + text: "Add to bookmark"; + font: "Sans"; + size: 28; + align: 0.5 0.5; + } + } + } + + part { + name: "star_over"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 338 58; + max: 338 58; + rel1 { relative: 0.0 0.0; to: "star_bg";} + rel2 { relative: 1.0 1.0; to: "star_bg";} + color_class: transparent; + } + } + part { + name: "star_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 338 58; + max: 338 58; + rel1 { relative: 0.0 0.0; to: "star_over";} + rel2 { relative: 1.0 1.0; to: "star_over";} + color_class: transparent; + } + } + } + programs{ + program { + name: "mouse_in_star_click"; + signal: "mouse,in"; + source: "star_click"; + script { + emit("mouse_in_star_click", ""); + } + } + program { + name: "mouse_out_star_click"; + signal: "mouse,out"; + source: "star_click"; + script { + emit("mouse_out_star_click", ""); + } + } + program { + name: "mouse_in_star"; + signal: "mouse_in_star_click"; + source: ""; + action: STATE_SET "highlight" 0.0; + //target: "item_background"; + //target: "favicon"; + //target: "webpage_title"; + //target: "webpage_url"; + target: "star_bg"; + //target: "star_icon"; + //target: "over"; + } + program { + name: "mouse_out_star"; + signal: "mouse_out_star_click"; + source: ""; + action: STATE_SET "default" 0.0; + //target: "item_background"; + //target: "favicon"; + //target: "webpage_title"; + //target: "webpage_url"; + target: "star_bg"; + //target: "star_icon"; + //target: "over"; + } + program { + name: "mouse_in_close_click"; + signal: "mouse,in"; + source: "close_click"; + script { + emit("mouse_in_close_click", ""); + } + } + program { + name: "mouse_out_close_click"; + signal: "mouse,out"; + source: "close_click"; + script { + emit("mouse_out_close_click", ""); + } + } + program { + name: "mouse_in_close"; + signal: "mouse_in_close_click"; + source: ""; + action: STATE_SET "highlight" 0.0; + //target: "item_background"; + //target: "favicon"; + //target: "webpage_title"; + //target: "webpage_url"; + //target: "star_bg"; + //target: "star_icon"; + //target: "over"; + target: "close_over"; + target: "close_bg"; + target: "close_icon"; + } + program { + name: "mouse_out_close"; + signal: "mouse_out_close_click"; + source: ""; + action: STATE_SET "default" 0.0; + //target: "item_background"; + //target: "favicon"; + //target: "webpage_title"; + //target: "webpage_url"; + //target: "star_bg"; + //target: "star_icon"; + //target: "over"; + target: "close_over"; + target: "close_bg"; + target: "close_icon"; + } + } + } + + group{ + name: "elm/button/base/hidden_button"; + parts{ + part{ + name: "button"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 0 0 0 0; + } + } + part{ + name: "over"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "button";} + rel2 { relative: 1.0 1.0;to: "button";} + color: 0 0 0 0; + } + } + } + programs{ + program { + name: "mouse_click"; + signal: "mouse,clicked,1"; + source: "over"; + script { + emit("elm,action,click", ""); + } + } + } + } + +group { name: "elm/button/base/clickButton"; + images { + image: "ico_delete.png" COMP; + } + parts { + part { name: "elm.swallow.content"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + visible: 1; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + } + } + } + + programs { + program { name: "mouse,clicked"; + signal: "mouse,down,1"; + source: "elm.swallow.content"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + } +} + +group { + name: "moremenu-layout"; + data { + item: "highlight_focus" "off"; + } + + images { + image: "web_shadow.png" COMP; + } + parts { + part { name: "genlist_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1920 366; + max: 1920 366; + color: 70 143 254 255; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "gengrid_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1920 714; + max: 1920 714; + color: 231 231 231 255; + rel1 { + relative: 0 1; to: "genlist_bg"; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "elm.swallow.genlist"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1920 366; + max: 1920 366; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "genlist_bg";} + rel2 { relative: 1.0 1.0; } + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.swallow.grid"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1920 714; + max: 1920 714; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "gengrid_bg"; offset: 63 0;} + rel2 { relative: 1.0 1.0; } + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.swallow.empty"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 0.5; + rel1 { + relative: 0.5 0.5; + } + rel2 { + relative: 0.5 0.5; + } + } + } + part {name: "popup_bg"; + type: RECT; + scale: 1; + mouse_events: 1; + description {state: "default" 0.0; + visible: 0; + align: 0.0 0.0; + min: 1920 1080; + max: 1920 1080; + fixed: 1 1; + color: 0 0 0 102; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 1.0; } + } + description {state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + part { name: "popup"; + type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 740 658; + max: 740 884; + fixed: 1 1; + align: 0.5 0.5; + rel1 { relative: 0.0 0.0; to: "popup_bg";} + rel2 { relative: 1.0 1.0; to: "popup_bg";} + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + max: 1920 1080; + } + } + } + programs{ + program {name: "show_popup"; + signal: "elm,state,show"; source: "elm"; + action: STATE_SET "visible" 0.0; + transition: LINEAR 0.0; + target: "popup"; + target: "popup_bg"; + } + program {name: "hide_popup"; + signal: "elm,state,hide"; source: "elm"; + action: STATE_SET "default" 0.0; + transition: LINEAR 0.0; + target: "popup"; + target: "popup_bg"; + } + + } + + } +} + +group { name: "elm/gengrid/item/menu_item/default"; + data.item: "texts" "menu_label"; + data.item: "contents" "thumbnail_item thumbbutton_item"; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + styles { + style { name: "textblock_white"; + base: "font=Sans font_size="20" color=#5c5c5c"; + } + } + styles { + style { name: "textblock_white_bold"; + base: "font=Sans:style=Bold font_size="20" color=#5c5c5c"; + } + } + parts { + part { name: "thumbnail_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 338 294; + max: 338 294; + visible: 1; + color: 255 255 255 255; + rel1.offset: -26 -26; + } + description { state: "selected"; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "thumbnail_item"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.0; + //color : 255 255 255 255; + min: 338 207; + max: 338 207; + rel1 { + relative: 0.0 0.0; to: "thumbnail_bg"; + } + rel2 { + relative: 1.0 1.0; to: "thumbnail_bg"; + } + } + description { state: "selected"; + inherit: "default" 0.0; + } + } + + part { name: "highlight_focus"; + type: IMAGE; + description { state: "default" 0.0; + rel1 { + to: "thumbnail_item"; + relative: 0.0 0.0; + } + rel2 { + to: "thumbnail_item"; + relative: 1.0 1.0; + } + image.normal: "web_frame_selected.png"; + image.border: 8 8 8 0; + image.border_scale: 1; + image.middle: NONE; + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "menu_label_bg"; + type: RECT; + description { state: "default" 0.0; + min: 338 87; + max: 338 87; + align: 0.0 0.0; + color: 255 255 255 255; + rel1 { + to: "thumbnail_item"; + relative: 0.0 1.0; + } + rel2 { + relative: 1.0 1.0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "menu_label"; + type: TEXT; + description { state: "default" 0.0; + min: 338 87; + max: 338 87; + align: 0 0; + fixed: 0 0; + visible: 1; + rel1 { + to: "menu_label_bg"; + relative: 0.0 0.0; + } + rel2 { + to: "menu_label_bg"; + relative: 1.0 1.0; + } + color: 92 92 92 255; + text { + text: "Web page title"; + font: "Sans"; + size: 28; + align: 0.5 0.5; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + + part { name: "thumbbutton_item"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "thumbnail_bg"; + rel2.to: "thumbnail_bg"; + } + } + + part { name: "over2"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "thumbnail_bg"; + rel2.to: "menu_label_bg"; + } + } + part { name: "over3"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "menu_label_bg"; + rel2.to: "menu_label_bg"; + } + } + } + + programs{ + program { name: "mouse_in"; + signal: "mouse,in"; + source: "over2"; + action: STATE_SET "selected" 0.0; + target: "menu_label_bg"; + target: "highlight_focus"; + target: "thumbnail_bg"; + target: "menu_label"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "over2"; + action: STATE_SET "default" 0.0; + target: "menu_label_bg"; + target: "highlight_focus"; + target: "thumbnail_bg"; + target: "menu_label"; + } + } +} +} diff --git a/services/MoreMenuUI/edc/NewFolderPopup.edc b/services/MoreMenuUI/edc/NewFolderPopup.edc new file mode 100644 index 0000000..7be85ae --- /dev/null +++ b/services/MoreMenuUI/edc/NewFolderPopup.edc @@ -0,0 +1,463 @@ +#define CONTENT_HEIGHT 99; +#define POPUP_EDITFIELD_LAYOUT_MINMAX_HEIGHT_INC 40 +#define POPUP_CONTENT_DEFAULT_PADDING_LEFT_MIN_INC 65 +#define POPUP_CONTENT_DEFAULT_PADDING_RIGHT_MIN_INC 65 +#define CONTENT_BG_HEIGHT (CONTENT_HEIGHT+294); +#define DEBUG_RECT_OVER(over_part, r, g, b) \ + part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ + \ +scale:1; \ + type : RECT; \ + repeat_events: 1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + color: r g b 128; \ + rel1 { to: over_part; relative: 0 0; } \ + rel2 { to: over_part; relative: 1 1; } \ + } \ + } +#define SPACER_ITEM_BR(spacer_name, W, H, elem) \ + part { name: spacer_name; \ + type: RECT; \ + scale:1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + align: 0 0; \ + min: W H; \ + max: W H; \ + fixed: 1 1; \ + color: 227 227 227 255; \ + rel1 { relative: 0.0 1.0; to: elem;} \ + rel2 { relative: 1.0 1.0; } \ + } \ + description { \ + state: "focus" 0.0; \ + inherit: "default" 0.0; \ + color: 0 119 246 255; \ + } \ + } +#define SPACER_ITEM_HOR(spacer_name, W, H, elem) \ + part { name: spacer_name; \ + type: RECT; \ + scale:1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + align: 0 0; \ + min: W H; \ + max: W H; \ + fixed: 1 1; \ + color: 227 227 227 255; \ + rel1 { relative: 0.0 0.0; to: elem;} \ + rel2 { relative: 1.0 1.0; to: elem;} \ + } \ + description { \ + state: "focus" 0.0; \ + inherit: "default" 0.0; \ + color: 0 119 246 255; \ + } \ + } \ + +collections{ + group { name: "new_folder_popup"; + images{ + image: "modal_dialogs_bg.png" COMP; + image: "modal_dialogs_title_bg.png" COMP; + } + parts{ +part{ name: "content_bg"; + type: RECT; + scale: 1; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 255 255 255 255; + align: 0.5 0.5; + min: 740 378; + max: 740 378; + rel1 {relative: 0.0 0.0;} + rel2 {relative: 1.0 1.0;} + } + } + part{ name: "title_bg"; + type: RECT; + description{ + state: "default" 0.0; + visible: 1; + color: 255 255 255 255; + min: 740 144; + max: 740 144; + align: 0.0 0; + rel1 {relative: 0.0 0.0; to: "content_bg"; offset: 0 0;} + rel2 {relative: 1.0 1.0; to: "content_bg";} + } + } + part{ name: "title_text_bm"; + type: TEXT; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 {relative: 0.0 0.0; to: "title_bg"; offset: 40 46;} + rel2 {relative: 1.0 1.0; to: "title_bg"; offset: -40 0;} + color: 51 51 51 255; + text{ + text: "Add New Folder"; + font: "Sans"; + size: 42; + align: 0.5 0.0; + } + } + } + part{ name: "sub_title_text_bm"; + type: TEXT; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 {relative: 0.0 0.0; to: "title_bg"; offset: 40 112;} + rel2 {relative: 1.0 1.0; to: "title_bg"; offset: -40 0;} + color: 104 104 104 255; + text{ + text: "Add folder for adding to bookmark"; + font: "Sans"; + size: 32; + align: 0.5 0.0; + } + } + } + part{ name: "content"; + type: SWALLOW; + scale: 1; + description{ + state: "default" 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to: "title_bg"; offset: 100 0;} + rel2 {relative: 1.0 1.0;} + fixed: 1 1; + color: 0 0 0 255; + align: 0.0 0.0; + min: 540 144; + max: 540 144; + } + } + SPACER_ITEM_BR("horizontal_line", 740, 1, "content") + part{ + name: "buttons"; + type: SWALLOW; + scale: 1; + description{ + state: "default" 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to: "content"; offset: -100 1;} + rel2 {relative: 1.0 1.0;} + align: 0.0 0.0; + min: 740 90; + max: 740 90; + } + } + } + } + /*****************************************************************/ + group { + name: "elm/button/base/bookmark_button"; + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + align: 0.5 0.5; + fixed: 1 1; + color: 225 225 225 255; + min: 370 90; + max: 370 90; + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + color: 0 119 246 255; + } + description { state: "dim" 0.0; + inherit: "default" 0.0; + color: 225 225 225 102; + } + } + SPACER_ITEM_HOR("vertical_line", 1, 90,"bg") + part { + name: "elm.text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0.5 0.5; + min: 360 70; + rel1 { relative: 0.0 0.0; to: "bg"; offset: 30 0;} + rel2 { relative: 1.0 1.0; to: "bg"; offset: -30 0;} + color: 87 87 87 255; + text { + text: "dshfj"; + font: "font_name"; + size: 36; + align: 0.5 0.5; + min: 1 1; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + text.font: "Tizen:style=Bold"; + } + description { state: "dim" 0.0; + inherit: "default" 0.0; + color: 89 89 89 102; + } + } + part { + name: "over"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + rel1 { relative: 0.0 0.0; to: "bg";} + rel2 { relative: 1.0 1.0; to: "bg";} + color: 0 0 0 0; + } + } + } + programs{ + program { + name: "mouse_in"; + signal: "mouse,in"; + source: "over"; + action: STATE_SET "focus" 0.0; + target: "elm.text"; + target: "bg"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if(!strcmp(st, "default")) { + set_state(PART:"bg", "focus", 0.0); + set_state(PART:"elm.text", "focus", 0.0); + } + } + } + program { + name: "mouse_out"; + signal: "mouse,out"; + source: "over"; + action: STATE_SET "default" 0.0; + target: "elm.text"; + target: "bg"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if(!strcmp(st, "focus")) { + set_state(PART:"bg", "visible", 0.0); + set_state(PART:"elm.text", "visible", 0.0); + } + } + } + program { + name: "mouse_click"; + signal: "mouse,clicked,1"; + source: "over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "disable"; + signal: "elm,state,disabled"; + source: "elm"; + action: STATE_SET "dim" 0.0; + target: "elm.text"; + target: "bg"; + } + program { + name: "enable"; + signal: "elm,state,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.text"; + target: "bg"; + } + } + } +group { name: "elm/entry/selection/browser_entry"; + parts { + part { name: "bg"; + scale:1; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + } + } + } +} +group { name: "elm/entry/cursor/browser_entry"; + parts { + part { name: "bg"; + scale:1; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 22 120 237 255; + min: 2 36; + max: 2 36; + visible: 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { name: "focused"; + signal: "elm,action,focus"; + source: "elm"; + action: STATE_SET "focused" 0.0; + target: "bg"; + } + program { name: "unfocused"; + signal: "elm,action,unfocus"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + } + } +} + group { + name: "elm/entry/base-single/uri_entry_popup"; + styles { + style { + name: "browser-entry-uri-style-unselected"; + base: "font=Sans:style=SVD_Medium font_size="34" wrap=none color=#515151"; + } + style { + name: "browser-entry-uri-style-selected"; + base: "font=Sans:style=SVD_Medium font_size="34" wrap=none color=#dddddd"; + } + } + data { + item: focus_highlight "off"; + } + parts { + + part { name: "bg"; + scale:1; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + } + } + + part { + name: "elm.guide"; + scale:1; + type: TEXTBLOCK; + mouse_events: 0; + description { state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + text { + style: "browser-entry-uri-style-unselected"; + min: 0 1; + } + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "label.text.clip"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + } + } + part { + name: "elm.text"; + scale:1; + multiline: 0; + entry_mode: EDITABLE; + select_mode: DEFAULT; + cursor_mode: BEFORE; + type: TEXTBLOCK; + clip_to: "label.text.clip"; + source: "elm/entry/selection/browser_entry"; + source4: "elm/entry/cursor/browser_entry"; + description { state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + text { + style: "browser-entry-uri-style-unselected"; + min: 0 1; + } + } + } + } + programs { + program { name: "focus"; + signal: "load"; + source: ""; + action: FOCUS_SET; + target: "elm.text"; + } + program { name: "gdisabled"; + signal: "elm,guide,disabled"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "elm.guide"; + } + program { name: "genabled"; + signal: "elm,guide,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.guide"; + } + } +}//group + +group { + name: "popup_input_text"; + parts { + part { + name: "elm.swallow.content"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: 0 POPUP_EDITFIELD_LAYOUT_MINMAX_HEIGHT_INC; + max: -1 POPUP_EDITFIELD_LAYOUT_MINMAX_HEIGHT_INC; + align: 0.0 0.5; + min: 0 0 ; + max: 540 100 ; + rel1 { + relative: 0.0 0.0 ; + } + rel2 { + relative: 1.0 1.0; + } + } + } + } + } + + +} diff --git a/services/MoreMenuUI/edc/error.edc b/services/MoreMenuUI/edc/error.edc new file mode 100644 index 0000000..0291971 --- /dev/null +++ b/services/MoreMenuUI/edc/error.edc @@ -0,0 +1,144 @@ +collections { + images { + image: "web_browsing_icon_error.png" COMP; + } + group { name: "error_message"; + styles { + style { name: "mssage_style"; + base: "font=Sans font_size=35 color=#d3d3d3 wrap=word align=0.5"; + } + style { name: "mssage_hint_style"; + base: "font=Sans font_size=24 color=#868686 wrap=word align=0.5"; + } + } + parts { + part{ + name: "message_background"; + type: RECT; + description{ + state: "default" 0.0; + visible: 1; + rel1.relative: 0 0; + rel2.relative: 1 1; + color: 42 50 64 255; + } + } + part{ + name: "error_message_background"; + type:RECT; + description{ + state: "default" 0.0; + visible: 1; + min: 1582 730; + max: 1582 730; + fixed: 1 1; + align: 0.5 0.5; + color: 30 38 50 153; + } + } + part{ + name: "err_ico"; + type: IMAGE; + description{ + state: "default" 0.0; + visible: 1; + min: 140 140; + max:140 140; + fixed: 1 1; + align: 0.5 0; + rel1{ + relative: 0 0; + offset:0 163; + to: "error_message_background"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + image{ + normal: "web_browsing_icon_error.png"; + } + } + } + + part{ + name: "error_text"; + type: TEXTBLOCK; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1502 96; + max: 1502 96; + //color: 211 211 211 255; + align: 0.5 0; + rel1{ + relative: 0 1; + to_x: "error_message_background"; + to_y: "err_ico"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + text{ + style: "mssage_style"; + text: "Server not found.
sdf Please check the followings:"; + //min: 0 0; + //max: 1 1; + //align: 1 0; + //size: 35; + } + } + } + + + part{ + name: "error_hint"; + type: TEXTBLOCK; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1502 117; + max: 1502 117; + color: 134 134 134 255; + align: 0.5 0; + rel1{ + relative: 0 1; + to_x: "error_message_background"; + to_y: "error_text"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + text{ + max: 0 1; + style: "mssage_hint_style"; + text: "Check for any typing error in URL.
" + "Check your network settings.
" + "Try again later.
" + "Click refresh to reload."; + } + } + } + } +/* + programs { + program { name: "mouse_down"; + signal: "mouse,down,1"; + source: "logo"; + action: STATE_SET "hide" 0.0; + target: "logo"; + } + program { name: "mouse_up"; + signal: "mouse,up,1"; + source: "logo"; + action: STATE_SET "default" 0.0; + target: "logo"; + } + } +*/ + } +} diff --git a/services/MoreMenuUI/images/btn_bar_new_dis.png b/services/MoreMenuUI/images/btn_bar_new_dis.png new file mode 100644 index 0000000000000000000000000000000000000000..af49c5af52731fb146af572791cd28382e524afb GIT binary patch literal 2980 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 literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/btn_bar_stop_nor.png b/services/MoreMenuUI/images/btn_bar_stop_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..c5cdc11ca8ea537497a1a794d79d40362f8659a9 GIT binary patch literal 3255 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 PM;~=nZIv>mm#_a1)GRY* literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/ic_add_bookmark.png b/services/MoreMenuUI/images/ic_add_bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea3265455d6c20f2682df08e0690120fa1e3adb GIT binary patch literal 2036 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 literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/ic_more_desktopview_foc.png b/services/MoreMenuUI/images/ic_more_desktopview_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..21bcc68b5136282a2a51cfc0d5a9a0f79cf36103 GIT binary patch literal 4066 zcmbVP2{e>#`yUB|BxR|*6(eP7W(;PSVJu^YRQAyjVvL~?#w_-InHC}{Buhz_C?d#Zb zPR}mXihP8!H=0g%iMGd+qK}f0ejsx*HPc9xNI@`}NmPpr4hmtQBGI59dQqbJ>M|6h z_5;E^iU$33%FWJE&5BAVtHB`#V3HmTriMU3V1{r60=7p@Uk|1a)f3$aFw77IN1*hL z)P7wcku|!XKgt~kt7aoiLkaZ*0Vw&Fc?E)OKbRVS=$f>lNdrG|F%mJ+5II8`?s|9T zq|)(JYS8Zra6Cd~QW;06p=wqx2sJGNCB%;!!O&hko}bZT$#hCM+0U9z4OaV+UlipZ z>>KOB^ldr4G* ztJA+rU&Q>~Jme5j$IwNsQJ{L&2LM>N(H3iokL1sINuSCYRq8P4>bM6|vvR+yjI}t~ zST6y}c80m->9|(EZjeKOgRAUZO1gJpPc~*~gEJ6;8kKeXu4^^bC{>@-+L!K(SI(h1 zHf^!+u_zHAS)3?RU2i_$9@Q83Wl7VUP5rd8_!t0Gbr=qONV>QnCKx#+AzbN^36OyfR}GVDzbCk^`BKg5 zR52@eJvy;Qs6!hA21pwy^2YVNNK!c;3x+LAa`_uSo zmJ#r2-W`L16J_z@E~(SPHeMH}jI(8Og0tV8l!??S%o8p#mCO{DGd(ic6;~6@Pcy(9 zzTp%Jf8DqkeOfDARt5N_2RSu%ua04`kmZ28yZqrEY$3688ptEC_1`7`3Gc|~v>07rbZl5JABqm^ zo>UMZga0sh{p9rO^W$?daCaFM>DmVMcfQ4hJB?u>5dwS0cyLmUbWsW+<9UFKv6Sn_ z`g?JYWNjQhSps*?^+|HWk*+orcaaL4LI6#q+L~Z*8claqXx+aUNF6J+HO>^?hbo-q zlMZ8UE(i?==C8pZr=K9%-94wiO${4U0}Epcu(XNeM+~Vj`5jPS%mswM&6*3_=%GcW zr+6qcQrZ#lr_JKQ%9o1IW@maC< zTc7pPRuN@X0}B+hojv<*mdD z#X(iI!YiOf@wP_J1cmn}&v$EEDIDq84pu%~>*{#<*f$JgAO+bm894hP$}|6xy7>X| z$|cRsQjJ9^G51Rj?J2(oeC3HI)ysv;d}*W&nDt{UF7(B`nLr%DcqgDIF#-m%C11^K7_aB%{~U&1A%{%)_%dT9A>c$}pBWdnTVS=MtGTDSEj zZ{WOQh{D`M6}A_y1)4HF1Dd%CsvMohss2^X*+0?{=E!zFEBChaQ0=nM4? zN|pBB)B%b$u-`3iUc7Q1G35;xWDDzY5wSyUwWw~vnUA!4~QwGTLluSc6zY=1qKtrL`Z3}wHsE-gct z7=6q7+x7<8W=gm&A20i!ouTvYz}wvd`Gz*z1jFOnHSa?k7ZgS$kygAc78igy*8qm*f%?jKgJnlRrPc{qrnDJCTB2yB&- zn^))S4M?81Z9mvo;1%74E75aPU9xW<=ym5??G|jxsEwk2l0*~eo=0!-`^15L>3uId zC2rM9UKb{f^G*6C7bYDp42E4(e%c*Y-nKKVKfAoGCUNjl{8A<0<97XtzQ)fL?2P~` zO|vx_H8GWdk__E;!tH?19oq8pKJ&PjPrk6-c1dt^03&u=NP#8EDJgc#U2Dun`pZps zCbnxp5S!;a{OA(6~~P7kdf@YuDDNle6uI^mC2) z?zaQ@S>iNe;c&z>tnx*X5T#IR*L>@6>l1aKn;K0@pYr*N`QMX*5c!#yj3y85nw^5= zEHtX%M04xy!G@u8U)DCXj-Bgq^z7}Dm=@>HdSQiuh$6*TiD3^cq0F`1FpxcbB7>|0 zsYtGJ-Y(eFYwXFeKLxVR=d_k3ZPxxFdr%pX`v@k# zl(fZcuVu*aI0d;uL-u^pcnO|MK5lIDKN?y5^oK`FB0UpKuR(?!97ixxFRV6t6zv29|8C zh>d}?Eg1DrEw15z*m7wD5AZqTezkIvQhBVUDE^2zE$?7*S|4O4yiQi7;U;>B7~7bm zT?3!vwPEgFDVL~kHM1#_xSV>Ib*!}L^7rSU`I8$phdthZs!s>^Y^LX^^4?z^aT}^d z^q6n>sGR7l4 zHq*Hu*atK0Ss!i!5VOuXFPEcrZ}v~X_J6vR>r_Up4?vh$`{*invU{J-@$_?@F6ngB z1!z3a^|RID^0yVgg6j8N*HX|zduu1K^DGN}qST3-qT1@xwJm;I^g1KrOx<;_J5^dW z!zwCzaG|#IbD+%2lWyAqvQK^G(wsh1J2wonggWvxG2Z#x^My&Nm^}>&UeCAmNfM{e zX!DCX`=DM1U(K%INEe=pEu!NM#C^7MUCo5a&37=WW<&C-(F4r7j4Liq zsMbXV1b|5vF~#ZJ&aVe`cN8xtr=Ag2Ykt+=R}u8vT>2Ex!(9e8=5Pdou&S^Dt(qROWj<; z;&Spl-?Ro5mb(&j_!cKf8r+;0F*;3K9=jRN%0vVq_dk1uRoaJo+U#@Zxyq>wWad4S zw0=gE+Lc75Q{Vh#-_P9Wr=n!vU)ETN7>QRE*1zyRQCyvh&XXDrfEbpDVTTmH+}bIp z$}@>RD@}Ta^*-aRxQN-wyQT7Wm-+6xvmbZ4C`qFL;UD$7A^9GIfp3j{jsUL?g&$uR zv?o60U|w&cpsaD%o+O{y(QC@Ot%n*c9t0+v#IM}V-SHVn87S25;J4T5~6V|F~(plGt3NQt&~9uM@`nURb$`E zma=45gsiCuO+>OwA@4Znbbh}-&gcF8-uL-D&wbz5eP7?}y6$Uvp3nVUGdDBXEwW#P zkB@J+ks;QS*C%d2!aI4bY+%?h@K<{$eH9urf7rbp45RsWEX8P z9&QRX^}&$b$%a8R(zzfrD`Jo*QPTyia|)ytfaVGCCNT)00BFU6ypa6F8d2yB0)+;xV^iy=c^`jGN9=1-~_C-DcxYj|t_4+ggKp7yVTeSLi&7AI^))fsHwu}Ky&{9ajzd-R-VZunHJ_~xbb zdB3rAR+k7~c&oJ{Pov3N6;a_lWVppGkGf%QyeVW+`rLni32S4^&GsUj}esU zsvBR9n#`wuEJHF$`-%z06;UTw{E+Z+!sqh~=X1{jGwyyTN^l8M_@(;z24Hw%3Q^wO zlW*Wiz?{|CHCz1mv<`tn3t` zakwHm|F*Dqf2D{|{;Ghwplw=W2NR{({%wl2M*^bJYW8Y<+Sr#XB>cK{S~mRv3F3!*+~|#W_j~#y-QsGdDSVGWy`SLSyeRA8-Us=FyMJc zYeXddp0Rh1V51g3X%LC7n+OvQ(;{5xGO=JYr{Wam#ZS7wK(NQ3?}jFA1QUXn^5vyP z1b^KTM3S~0$>DS$T@Pf&`3uGA9#y;5=%B$DTs6;ZP&K!I%^XRTbpvWY+S|Y-4-oHe z1=(|3tB3e)B^P*vNC1j^Bys{ul6BZJudSb^?h1E5{xS#Jv@h*;7-PA4R z3+h=*bNTex0ilU_QN2m_Cvn%`E6z7!bU@i(!{pc78y+_pAA?*v9XGRoX+P%JUA;*s zo5_$Pm%VmkJNC*txP`?}v?J+@Oz8#DhF*<@pECZ}nYWpUvXV zJvOwb0-A4YqH`J@IK@DZE{WJpIZpm4V!76TIxa?drR_=(^mnZx+|I-?Evog!JQH9f zS@GWWloGRPh1WLy$aMnb-}<(nv!>X5TaJP#lmgFVBouQXtr8U8{guzTki29D+{XkcxXr8+|I#4 zgLmOiWGBxQ_g9Y`Ov%rTFmV#9bTp$;u0|Z2?yKA}+LtzYf?i8z|#om zBkEQA`i9tM%`3^o)toB;a+yeFU{3F;Zc<=XHaD$_TlQc$leFxwXlb8IOgY}gOcp}h z$?kh2LEE6S@Fsyy5q`5G$tz?jyvNbK3;CHX3u!Z%!?h4}FX!dPH2oUVg{y9k4|YNigbrKdWfSmS46+c}?=q+2*o3SLey zJ#?O=M}Gh8yl285(0R4vaaGf=;CD#bGF(Xy{&LB4_Ta~blc8_eO4@y2?~q@gtmZ#+ zqQl??yoC+pd{jaW^|H6(Tj%=Bnx?p!r|$dfcwb1@^=)p&>y0l8u7i*t7ETr}DMOrc zkH=+HIj1&Z^t97}+SV~4-(K44LznJpUCci42n4xtZs#smQrWA7akQ+gg6Pq!1N{R7 zlvS(Z&e)-wlXHEXHpYV0q<^o)>6RA0XeHmOdbhZjN5^N|mY5#dPyLo{=2AH!;O5&X z`;wQ$8tG0$`zNM~f|^c+54%NYjeUQ)F~Zp}i;sShoAI2zuGJrSD|cyKYVcW!(q@g_ zeb@N5TU7<(i>0kW-XF<3idoGYf&Kv!wYiF5{oHfdd7} zGRS0_e3y#z<;8<{ZMPIsQ8Lbo% zYEb;en(m&|I^z60Aljsp5>obHkOt^VT_hixDStd;u++nYeg1AYRM|Q>tx};l92r-k z(ac(rx)R8WGKyKWnyXg!lZn#Xo4Do>l|6KP8mO_9cFf|m3h?sgy#qJMpQkfl!Z~l_ z;wrGsM+$)*&LyY=E&SO*IWoOdOi#Hb!6!=#39c^$JJd-XuI&tKlCl!H@gU|~fHB^F z2tlezI9#Bl)kjXuJJ```mo+Zg8iya>Vk>J#QWr>28oBib8l`Van4hsTPzLe5P4|4d5HMX;aO6Q?R(d~ zg}{~_v#uY8*kqIaI${NDSKz~?>(lA>E;39}1qrWJM(L^{;b?Fb_%$U~1@BQ`lsj}+ zX^8AqTY(^B)K&Bi=V^xhSk{5xTc?k8^r&$v z`xY${lQ8nFTEll$q1ZATQx}7kM-t+8?9(>&LjWd3ZDH8_jJOGWF1?#7gq3 z*R_J8Um!3)`{xFxzM9elcn8L{BTcy_DZbUe<@*PG;!jLH?uJzd0xvHo_nNx%HDWIL z6prTR0w&kE2b?L4V!*74zyiSP4am1*N1zm^anDe`gcz{)3W z{>`~A78!%G9k;RdD~MCH=okF3{BxL^wnuQ~c&{AcM&sVjnWZ~*Wgc0=O@dC3Xkwck z@WT;l)A+-F*#=j>g1r{lfuVI1O}|Aeg$J#qwp6!VUx_`}i+s@>H|0n{3$@({cq{!r ztw##K8kTwI2Lx>;0CI4vxZYG*&|U;10)Uful2&g4Vp^066J`vE(;-N;o95DLG= zyA0}LMy)6kg8Bzo&iDS{1XmKKc)J*+J>5$V4!SpbQ;kHLO|b#9%~77FVR?hJGs zJoL%uOxSp|;QfB5Jlpc`j!KxVxq_n$hrN5CzQmeuI;%a;gzIM-Ji|w`ls7Vx&R^B- zUN+*kLmqyY*OM93jJNh3(W%E(rVvxq?TV`EZvu3D;vZj^UDLn+L$zqZ0;y*lA{GSICiRdj+D4!0S)i28b@zeHy3L~5uwn)$E G%D(^(M#QiH literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/ic_more_exit_foc.png b/services/MoreMenuUI/images/ic_more_exit_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..779fc486324ba4350b68c6f8f9f49d1077f9f089 GIT binary patch literal 1558 zcmbVMZ%i9y7_T+xfM6IHTKS;IEj3eUd)GhL-i?m6y{qk@&;UZ6NI2R9E^xi}dW=HI z9E(Iz=Z6I(PLVHW8nz)i6&8^3r^}pyu#G6$KtC`yW&%ON!ZH?(Z=r=@$Ubb`qe216)FIlhMpcNK<0AXo@D7TF%yt^P zdIyUe{fxSh3G(%V2h^i#UknVidvc(NBglp*5Li$Yx{l;M^&I099i#~cUsPV!OIS!u zr!nfyI8GTU9f}$aT8t#MW`o6`F;WIJ#<3gLXtC(c7-d8dtrn?;Y2ItzuN zIy{DT_<|zs^DwcvEQlM$8lH$HtO7%eyim;Zb+Ha`)$k%8tl|BTwFraum$E)D-w=Ey zQl8D-l8nF}WxO_l=b#OJ33iwGR$QYaahpvGGNAM*iraLES*x?+HjN%JAXYev_5L5t z)F2skq&XgImY4~2U}U=0`e3njco-izF#*n+*^E<5njRL)rM=`){< zB>%7|4Yv*)Dtj+6&@zxLo0kSMRN=UJ3ornCvJBWWRKRX2gH%z+@a3;=6L}Zx(;qgc zo#m9aj?qUKZ*>j7`O`n;XKtp>+-+Z5yV%p7bbcxH_M!ZHdv~MQ5i9-ds&00^@;Bd& zi5qj&b6NchX}O{A7Qg1Q53gQ(*xY?LYjUvTgW(sa=Z+riCf^zjcYOJ$T$u+f3G z^;voON1t9kS&}&u`o5)$$kM#C=E74;%X=y=XdkY>JJwA*yRJks5i2LCvj*2#%(a$D0Kf^3O@zkPNPPS0uUsO|bVZfUtR!2QZ( z9Qa!?NjU;{{+feJ{!^K4mYo&bwm)9l`)e5^k{sz5Q!dAxI`XG>Q2Au9rQ*cDFX1^0 literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/ic_more_exit_nor.png b/services/MoreMenuUI/images/ic_more_exit_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..b6dcd889bc6efa4962b1f43b02b21f093e04a136 GIT binary patch literal 1604 zcmeAS@N?(olHy`uVBq!ia0vp^(?OVn4M{( zJaZG%Q-e|yQz{EjrrIztFsEgPM3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcpk{1iHq`zbF$JDTz5Q`N^fZsd*)yF1AWQ8NHOu6e}keGZP~V zQ%6fnR|{7YLqiL5V>1^QV@Go*b0Z5^b3>RJ*z{T$I-58*DVb5UwyNq$jCetr%t1q5W|m*f{` zkk2Xf$O6-{>>&nPlIHs5ftw?$;v=Fj^o_siF;=smON@8`6;S2w==UB{SwVoL4ooi-LIQ3->Ut_0t!Xu#@ z@r}C1GJh^T-Y$BUomqO$T2?cOxK%%LpC|RmzFGF=tYgec=Iq;LntH3aePWn|#eXsh zPd{+Pb>D#_Q)8}|9%Z}s6g@OJN^?Y+a?*0Dv@|MJ#JKq46hV9#ML{+CS^jYwk=Wh}_SNqr}`GwoF zEa5%v-~IHL+-KuwhMzre>^${##$Oh^5djXrtiW6G|G&rySzlMP4c~Ha|B(Q(~_ctdz#}%)*#F69spxPb|0|sNUYU84BRck=yx~Hq3%Q~loCIDqOQbYg% literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/ic_more_focusmode_foc.png b/services/MoreMenuUI/images/ic_more_focusmode_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..f5fdac8488ea3b34dadac6f9e03d71b2326fa922 GIT binary patch literal 2053 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 literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/ic_more_history_foc.png b/services/MoreMenuUI/images/ic_more_history_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..a397ea056b2ad8e5d6971886c1f9b8a449bfa982 GIT binary patch literal 2892 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

;4pTXqLd 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 literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/ic_more_mobileview_nor.png b/services/MoreMenuUI/images/ic_more_mobileview_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..91aebfe29e531e5f9607b9b6995b2e94bb628e17 GIT binary patch literal 4205 zcmbVQXIN8Pv!;khvjmZ@Az(vD0g{kNkrIj$PyquRS_q+&4g{o#g7juXKt!Y{pb-!? zfD{!%3+*W7DAIBe1q2bL2*M4PbMKGye9ygiKYOpWXV%R7&YGFEf9!;l*5*>;3gQ9+ z0#cS1rl48Ri433z(c71#51OlO00DhH^+7l| z7K){q5Pf_t!e~U>Fl#$Pm_GsK2{JSQ>M_xLfIuPx4`c=gkmzWpKIjK7n*YA3hJb)S zOc?(9pr1iGU{3-~$TT7l4%XHrKw&T-0s)5Uz!3Lck%~U^2}c0z;utn;2SJntTgQdMJs3XKIq@ zs=pCTiF5+Zm%{KRlYpCucn@+ALm$MC^yd}=DOl`3z$E&wMDbGwVd5ze7#Io(4BXt; z4{JK(H1WT~_*ZMXT_}YJIZdRKgJ=YPJ-k$ZJM(k*pNTdN`O%$Pi-Anhs-mje;qA%Xa`rf&*u{yFk<6@7)$!^J)8?Av7GC?9W5kK%2y)gr1u1nY$}170 zqH*x;!HOYrNQD78H>g2(Ls`lOIBx5`l9CMe@fda9*%V$1!O;NPJ^lL9&bRXw8*^F) z{%g7Oc%C>fidgoi3M-nkkm9X)c2EAgaPo^b$12j2;@qwGF=zJB>pGa%<}G=2P6vJ4 zG?CXoSn(tosn{Y{+w1b&4dUAf3M_c@r4jC?Wk7KDy%7+gN`18bl+m{7%H{e=1SmQ@+Mb5-YRk$ zPjxXz)(k8wip!Cfop{r;dhzQjyzUfzHP&a&!Rrdw->0f*Lf#MVO7zg(VMB1mVF+j0^=*V)V=dU z9IxoQ>W-!Py}^HiNPHT`BkEJ^{Gzv&Y`#7Z7XKNTP^L#IoQLt6X9o>^q#9qFv2wk_ zcXYJcV72OP8|$7njT#D}#Sc#EhNu#1U{Ar%cQ5*#wQw%N?BhvuY~NN8Inut56kg;f z-vcU7V4L@-JTqv=3+t-I5%j7RBy-W_Xrs|urpZ}4>>^5XfEF^#Y z{FHUnWvnz^xopO4dWZ#&FB|g0a07vhOhftVC+3!tJ0EoHio()}O_)um)~*Kbs8YWu zFC)og(r#W<`%1r`-Hhn&Wz;9aK93vTYv-G;D)sQPXI%-~is&;+lGEYYTcA0D@^m$` zfj`^7_c2pz-_3$XkfzkMdG-36tqjqNMO#m6#229vr*;^San}s@X@%Bd0Jt&T8-gJ+ zZV<2TozdUTopBpIgFzqV(^68uw%!hdrt4{VZq3}KM+S|6a*{3#w!J?t+n)uy)NP+@ zgow?xdZ@?k>Oe<|+AeR1SlO<*jH^oy96b`tUG+YENlKD4x!`J3{D*uOyYvs?Ap2@9 zk4*oZR(&JSvåVi8Fk3zl%xu>xL1@oxdE-SWG$8F*Q>W@6viF{00S*N6VpKxB? z?r=?F$e$Y>_Aq(@cuvN13)i@Dt>jsklvKRfJs5-XAyrMV*8reJpT(WBdlc#%7d_h@ zV->k0Pf#0Xt-W3YXtuX+|GuZJtZa$E)rpClO=>>Ti9tHmA1k9^xUoUrr3DefV8p(e zTSafUOGY=UG6eNKO39z}nw-B&EGrpmxi)7XguA%9 z;z}^oaJv7(`S`o^^ej}(LC-rKK=%#xusYoV9TRP* z!@K<=-YRFe*qNw&y70zEhe}em-Tf%}V`D@4WOci8*+eK-3ia{!s{eb}Y>60=$ojwf zL^x+Z0A$bF^`6tY_Z%zs>Vx8!Hb8jsgjm9np3{MN`MS3YyL%?nPPl{`9n$Oli&H&V z<1jjM`ug6f$tm$?!Nor6d-hj2zXN16D2xfsg^Jl71$yRHl>{|}sSruj$`i60__VT< zlC+7*S5+Tm26p4D{nV55W-FbrImXni6HSZ}pPoH!oI*g1!Go$Z*c|H)`0!O&@wHca zWv;9>Bs>t^{5AhN`;svkH+-uYo5kkt2YrQcmBaM%OJQ#H5*-#^^{iq|eJ6BxEUfZ9 zzUOszcJ=_kX|1z6b#Tx)Pegt}(d2veH_g<+r8sAmt%?t-<`#3S68ukQgfSvPt|um* zkhW!+544LZhuU0!9by041DpqT$aJsEJq~0|ovdd=Q%DtQM;cC!jenkVv@hNI#g@dy z^usCSk_zX@q6XO`Lz?2m1K3ahZ^D2|h>@K?)w|xwg zjQ(2<=dJ!!5SMYU-jZ-)r@D>vI;yU#KZSLB_3)L*Gt(i`rM7pW)WEh~L$Zl3tnhO` zkjeyuEz5`XQD`aS#HO#MN0u}%VP@`nVehd0T&mqNn))m|v#qHsA6i=WJIwWinrX%& z2_1%4waYCkhBEy68Ho~fc5vm;otm1Ov&LUNKHjg>AUw0b^hex@k+MD<&`xW)3)R3L3O+I38C^RMlL<&E#NLad8e0Zs(%Gb%rKE^tBYsCaP3I%;D zQjaSMwN(exQ_6MdLn>CwM@t+1zGoMv?DrW=$Rtt&sh$*X@o)IP48aHeYb*DAzV`Nq33cJKj7#LC4L5^}-tHZ!O&sjvCob&{} z!C`FT*frQKeO1qE+v6XfekPfi>-X(Tyo6NRRmVuqfV7We_UpV!nc{uxa#}A#(=8$r zCU`3=z~W}VsV|8Vjf*dy#LQegPQ^b9#J{=H(ki1;D;R2`99ylytC&@Q2ek`*Q=09a z3y)U0UBt*Rhjtko1X!v*7n&9OYixg^%(s$~{a}qp%;I_Y08g>&dI{>y6ZdCtiLBJ5 zzE=R;t#SjU$`cwYHnCDKbB_A=?SSwb_hSb%41S6a&p*%7g;>TFqw{YVsT{T2 z;$G7=lio&lk)C>>pj?D3MwcO9GmjE7Uq`X0GvrJ*!C7K=G$M9M&o|=7R?0z*Eccg?9K0s8rVoM0wt{NS@0Hp z{MzOA3Kc)cnFY;`M{|cJy;Wq}Y4(V6^p4ZwQ00lwp1o%hBhR3Qtn6KK5f5em-Xro8 yU>v|l`2oitjDASt06zFX4F3m%o$(uDP=UC0a)>x0%4G8gfF;J-lx6IG{=WdHF?!Dc literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/ic_more_pointermode_foc.png b/services/MoreMenuUI/images/ic_more_pointermode_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..8785d75a32e56194cfad14a628c2d55bf920e36e GIT binary patch literal 3180 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 literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/ic_more_readermode_foc.png b/services/MoreMenuUI/images/ic_more_readermode_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..d257732fc053c20177ace08285da20d483e3a8f1 GIT binary patch literal 1943 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%0DrRk}1lz^~^m?n2h%Dr_fV`tEOTsZ!6`V9w zY(@F2zM_Zar$^n0#fWmt4ou8}MfiFHbhOEFK74$#_t8ZJ=8XDgs_lW^!9V!(5~nUu z@;2P>9L|<&*?TZdP`>xPq_k7$ab==TfRDanRguX2{i}?*BaTQOVL>SMIU_uFbsWmZ zu!#6jN4!7HlCL6=a-WESjeKR`B~84(2M=Ne-lJ2W*2>8T(yZV60j~NXQUkn0$C4jT z+$evj!T^Yi^@3D-dt5+PH)kIodhA`D)r5A-*maYZ#kW7fA99V?G(wEt_4biZdj`4D zQ|d&Ae`&L2%%!G l{a?cWOSdqekKD!2b=X+%5%rL~`_8`@TT2HEhM8B?zW}&QFVFx0 literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/ic_more_setting_nor.png b/services/MoreMenuUI/images/ic_more_setting_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..284d4237339ebbe4cc5aa8c24486c5d01a726fba GIT binary patch literal 4936 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 literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/ic_more_share_foc.png b/services/MoreMenuUI/images/ic_more_share_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..dadf09bd38e1a78fe7647a38af172a99a08caf5d GIT binary patch literal 2653 zcmbVOc~nzp7LQstD1r_yAW8^s)$C*;0YtJXFbJ|p2%$A3FAzc!cnOdoSO+%{M_D8Y z2ndLx)G(sri9)dzDiA?H7Fo1bf`ZGW3aBi~yr?+yhtoNoci(&8z2CdPyMO1r6rb%| z%}lIKU@(}O`!Mgm9`?hF?M z^aU*t38*v%iGX(`x=|=hMb0j;E7z_tDGL4LPWRh_+Hok-?&!!QK^>XFx=ZB>o|F&F_!U8ZKVeCKh^5j&fTxgw{xVtQ%mny^%M>zs zxGV}z_anhK1d5~rS)BYEV|zYk%K$)8EFfTkG70=ceW{`^`KREaU|B2&D0(Ilhoi6v zST_d(ox;Ksv1BYA@d+#Ve`s4k0i@800imN2STV2| z2AlVHcZQq4viEtuDmfs)=GL8imxl>VK-3z}vs9;Lp;(&`UW(AL$#mQ+2Kfbt!Juoyn3GS)T))Y8UM;_$uHcTcw)ZOkU z_qiBGS}1RjZ#rY*;^y!5!0t!D^t1J|x1f#mf&EhgOrO-R>x>j#Qe@65ZPwwJc9iPh zb2lDOukO;(t^>CEr+;&5%^FvE-E`gI{geJ+N6nVu);ZuTa29;IkzhvlPYIt8qdwk? zrzR0jH}LCTM!V{y>U`97jx{nwy+~(JyS^JZR)9h3rsQQjt>VE}&e0K@XNatQg{V}N zfwPRWxjaDIuJrEkxL*Z2>0YWwkYPcw746zYnX32Ik-?E8*>>R4i?xFuy78hnPOOSb zn_ZnvFl;1~smJKKLzbYFf>zg#(L%~AMnaJOMW+s-9 zYlb7P{DAg*;nC9Lk^m@a~#8v2?5Or2V)++5U6PdA`lv|^WmaEQTLB6Fw-e0Je zBmF!(BJ$N+kynGd5P|W7zP1r+Ah#Rt{@`LiUv;xmmDaK&F#ichQ)RPr^h9pI6H<;` znZ79m4B3?JgV+M-`raPK(GG6jpR*AV-$p3e{UDXgdm3tzc|h^jN8Mbp590 zlaF56W;k{YHcwpWW2f2$TA4l$udSACe0usjzG|)DP`qqor=fRkbam%sM0tAoH84b= zx>uR_=t;mnFY{=7S*sGW*>T0U3+TcV`Ac>yhjxEs4wjzYWsS-nx42Pe^3H5*zU_kOYr_T`wH=rhE|k7X zP5NcYvGVDzr{nE;HHA}eC+ZA7lFABlUIgvfMH`@}sLtR&qB?7yAIZ>6H4^K@=lkf~ zb(svh)t%jbulIzmIOW>hea=p^T)Ze6jcX*^q2GzzG*b=4-dBvb)6NB5J4MBB8%+qo zxs2L=43%Z+@;YsBUhRf0ny+=l`g#vE@7rOofh3=C@~U6kz>wt34zrYj+>w*kO-^r8 zxB5_zVPk)yf4XIrdK zcQuO+Z0jqkyh~LK$=kncRbwuE<#My~?#}nOskJ620~J}EkwmoqaJaj!#;(Qm^&5kD zS8QzZq`6bNsdoQko0yWcN0ZwUY#yPDkI`(hIZvkh9;oNgxrcvP{JM?ldbX6*d*#w> zZA7r95$yw>JEHa$=XJMVuzA|*ksOTt%aU8&>~#l~hgKd$L|DFv{5Hd)xJO)4+V}hZ z2&+mpOPn-;aeaSna6WaEka`W@p((ZkhSI!8*X{6(Aa(j!Ap%>9g7){$(!z|CW(v`! z?xDxF9OC&-3yIx!-(#oQ69=O;58Ch|$#KaBswU)KFYkUq@pM+S<_PZkel{(5Jj~a* zr(AnJ_MeH)n#Sj5HPx`%N}J!25k_C`2kXa5E61->0)^pR%GB{HDLjfM^jgn^I>VpoCmEBulOYkz_0pBgO*&l0v}(Br=5pY(o<800D=GPYMPg(a97#fr^|x zP_Q?pB!JFiJIwlmpBShh2vX2-IJH`hRTHstWgrfq(P#z@0s#XvFscX{B+_7Hstt1r zY)~auN)?b)E<+j=MgH<|h=GD5{Wyd$1(*A~uuL_ZC^%&}jYxq5uy|Zpm|tq^l{{Q2hUX(-!<;dkyT5j1Ai~kmcPgduq=-V5qZ zE0Id*Og4o?uqNBnXdG(}2>`6AL<*Ztw5Kwu1ZxfznA7+(TPnb2Gl|w5Jf27c01nxj zMYiWq>;Zs4CfalG%sE?UnF4Rb*7z2)^>PRHfgy z)}=agZ0vxug|AVy1^t}y@bQ*wqT<1;CDPdbGh|n962WM`_@Sx z5I0Hq#YcNyc2%T3hxgdmH?XcNuJA$bvbS6GBiiN_?|TnrX@C56e2mczrS=c9OSF%M zO!SRfM=mw%MbdF6oF$7f_%xFzPN1GWW4tRlt1o@G=C&p-=Gh6?bDPI1#!g)}-+xv* zzcs~nBBPdI_O@-~?g?a7O#heqt+kgcg-_1AJ+4aYzuaJZiT0~PKa^O>v%{w8H7{uT zWG!ZSH7T{L9y-~dY_WDisQ+|x&q!ZO!1R_3=A zKvQ74N7j^U{LvLvR_WzU-duUn)YzNy+X)^t+!vX({bqG=?F#>;`IgD2hTazqn@)SGmDQbrDd~mX z&qgA+`kh1!Iibz&QF+Q&OA0KX*yzt{SHba1*GHZoN8cIJdTJAy-b6w9q(Gm#!Z`WH z+mLs5U-KO&zA<09RdVGX#s?I_S z4)CL&CZCRq$lRp5WRtOH3gC0M*0+={10F|$8_YUZTU3ofX77e`0R9j0* z9f~>!Dg{4;*X%UuDhZfIEn_7Sro2)=JgC6A{uJH0sKQKV$u#XSnpmA5{-o?~eZhqN ztLTcXwE(8%Qd98?RoR>DfmHJrNmA?haEH@6r;;Fc9{ObU=1t`-3aev6oOYvZPj4~1 z@2Iwr>FxOWXTf>xg=ewrH(NQLS^f3n@SH>My@YFfjm2b(THiOr4=L+Ye`|Ff^uUcr zuXFsWHRXVyh5UfOve`2|DXE7MiYcs{_W9-fl@l?KpKTkuV?HA6fh)H?vM29K0mZj$ zcSYvD5ep{2`{u!nT=KrfI_8Dg_;&|m*F?0Y0MXS0%WG12OR2|%6L;>mF4Zx`cHggh zxUqqdb1;4Do>o^I58Wf*^{H1$)WjG~XS;gphbE1xu*189zUT8_hq&6Rx>1kgC%IPN z<~7=e^{MfbV zA3Jl=yEgfz4OBpNmtRKn?+8MFceQO_dWudL zQ*3j#cdav8s0@v-?Dl(^)?aqqy~ytNe}BR+Z=h!|A86cJecl`lPp$Q|jJENZ%yad! zy0N(gs}jWqzV2J{>H+Cf#=R<~S~v-wfY8(CnYjlCOul=u_tL+fD{p>d9&R>x&wnf_ zvi9)a7|l`%i}WF?<>g4Y6z|~`S-dSet#oWc6_hhg#B&p#^g*R@?*`YUF~$8WiSvz5 zJU7ix*&pH4&82SmvPKabkieMKdFsra?q%;1Bosse1s1uQkz2W}qTWo-h#=zj!X+;A rR5P2>>^AeaHl^A9BRKQWg4Kw{qkf;)m^~~q{JA=FcCd??ent$ zlG{(Yw8W(QZRt*gNd2Z$=luRSuk-r7&iD0vzn{zVyx-6Bc|OnQ_4<4>{CqqCiEqieW@bHeDr^)XZi-JebkPl)ZH zJ8Njni(my(1QhR$I2tDgOr5m>3uCxyw1$SWtB^~jMbQPoFgk<9#)Cdwz6t`e!to$7 z(i`f{CD56yb%{KBK%!3|EisCQ4F|cp0G)+6H9-trKm`h8qS<_$5D)s!i&OV!ry(HV zcN0Mr9`r|06mLHufy1K%kzlw34GMz+Q7AABfkdHTYk-bWm?H$L7L)@FfkUEjj%eVI z2c-7K3y;A06Fq+TQjhQ;ra-{OK_Kz*@!)tkn8Ra0U|1}6mc!A}L2co{PhbnELI*bA z>L&w{&ZqHMTmg&22F@~4!#Fzxc#t~MKb8=~_4fXgn9cu@D0RvpLMj&m14AJ(F|+IX zZp|0?)Bg(NZ>{-(30ykFpU&s(;L+6k5n=Tctj^s(JDN3AM}za_vDBMFjV5wvJ7VZ; z!FnPdq}G7LS>ZT$A`0P%LAqhFBn$}wgJIBc6p;vbL%X9LF(fqXC&%AmF$63Ei^d|M zP&ft#BOx*FaHJay=|+H)2p%Lf{3mujn=hcUY4o3dS!%yOu!w)e;s`uCRlwl|ayZdH zE5MJ*5peiS4i`uWKmk{iS?q95Jl}S9d;VB0koEYHu{Nh-DP;t_mI8Nz zKfw2W$iH$bGVao)`YG=Rn;%HdoaxZ@2h@fdEftGy1*fV-1wt5GB8*SU7j}`e!Z!9C^^0lifyurG1-6_EZ@+I3)UK*QV8u^ahtd z^vLi?$3;Jl&l9QAjWS-7ibajaRYq0*vduExcXqGAgPs?w%X=cEGlfHziWx~U)55iL zU+rzA6MD!%7+@QTk=bpyBZFDE%~o7#vkDm|WlKCso(4%@kL8*4q<_tkGj`Pv zMOL{uFuxR^PFrP*R)!+`YgHFYgElyCkC2hU&rEB}hYp!{UyBS@K86q5nvqX?PLyxn{Tz)@jN@Uc9MxQmJ zl)gJ>+QnGF)T-65Xbm4K*9qN|{mrW0Z;T6gX?y#CTR*p7WAx}QS(7inbwF5bhr402 z_|aEm=l>`z2ZwY3X-yAk#5WX&w&s*J3U?BF!sI5adL&H0eOC^x(B2&SSSZb)MKaDa z5=4+5Z<`$0IclX*#p3$6qrp(t+ly0}Ugeh^O&hN-?Hz6px&UEGUmrPA5dOYoq;=3M zdJJ=5#QHjSLwt5mT+@-f3I3s2vdAi{ravm9Zz#dMx_^3!=SLmmZP!rb7yHfFs1YYw zV%A}s63nrRW_`;`bziKN2=cMuD$RKmJonc&oG&`Fv6s8*UCX(y&2!@VJfiKhi|rC^ zlc!_sn9=QkwvjTXNmp`1@Hw|sYx1(-h^&2Qhw1s=&~KRS&6G_$b-kn?nN@vm18tbC zW0CF?g@TUxn)3VN>PND`30|+~3Tvfp8>M{t_V~M+UCGwVJsOu#WdliR;$dO_m$0j+ znr2+Xo;GiFKwY&w@S>yOS}Uf94ZaH~W0f1t=}&OzO-jBS7vD6F&I`8YN^VvyDNxn% zvA^J3mZ_E?H$bv29V01&<2?Uv?T6FA1ofY=15_7XfM+kVZvXAJ*{=eVz0})?3V?c0OWD#l5ZrC6`Lm zYCL0iEmLmb`(8NCTDgW0S$Rw5NSAKte)c(1y5VI\~q?AZkE8C<^8=}1$>cC9>Z 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 literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/modal_dialogs_bg.png b/services/MoreMenuUI/images/modal_dialogs_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..6ce45069dc7bbb227b25b6933ded0d229002daba GIT binary patch literal 18648 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 Mwux4ero+kq0-UcVr~m)} literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/modal_dialogs_title_bg.png b/services/MoreMenuUI/images/modal_dialogs_title_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..36aaab46b500605f4e162c0f3fe92a999493bd13 GIT binary patch literal 18226 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 gv42GTqd&s{nR>0AJ7j&G*sAP;h0FNNd*k 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 SOF&k3)ON6OvCgyFvg_YNdqf}r literal 0 HcmV?d00001 diff --git a/services/MoreMenuUI/images/web_shadow.png b/services/MoreMenuUI/images/web_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..f9018b0a6e15ae5670b67d580b890d1950636066 GIT binary patch literal 17700 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 literal 0 HcmV?d00001 diff --git a/services/SimpleUI/CMakeLists.txt b/services/SimpleUI/CMakeLists.txt index 6234cb8..4a5c6d7 100644 --- a/services/SimpleUI/CMakeLists.txt +++ b/services/SimpleUI/CMakeLists.txt @@ -79,8 +79,7 @@ add_dependencies(${PROJECT_NAME} SessionStorage) target_link_libraries(${PROJECT_NAME} SimpleURI) target_link_libraries(${PROJECT_NAME} StorageService) target_link_libraries(${PROJECT_NAME} HistoryService) -#MERGE_ME -#target_link_libraries(${PROJECT_NAME} MoreMenuUI) +target_link_libraries(${PROJECT_NAME} MoreMenuUI) target_link_libraries(${PROJECT_NAME} MainUI) #MERGE_ME #target_link_libraries(${PROJECT_NAME} HistoryUI) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index e585130..d5e6a6d 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -64,8 +64,8 @@ SimpleUI::SimpleUI() , m_popup(nullptr) #if MERGE_ME , m_settings() - , m_moreMenuUI() #endif + , m_moreMenuUI() , m_tabUI() , m_bookmarkManagerUI() , m_mainUI() @@ -1118,7 +1118,6 @@ void SimpleUI::closeSettingsUI(const std::string& str) void SimpleUI::showMoreMenu() { -#if MERGE_ME BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); bool current_tab_as_new_tab = isHomePageActive() || (m_historyService->getHistoryItemsCount() == 0); if(!m_moreMenuUI){ @@ -1140,15 +1139,12 @@ void SimpleUI::showMoreMenu() m_moreMenuUI->showCurrentTab(current_tab_as_new_tab ? nullptr : m_historyService->getHistoryItems().front()); BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); } -#endif } void SimpleUI::closeMoreMenu(const std::string& str) { -#if MERGE_ME BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_moreMenuUI.reset() ; -#endif } void SimpleUI::showBookmarkManagerMenu() diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index a6c4acc..9d64421 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -34,8 +34,8 @@ // components #include "AbstractWebEngine.h" -#if MERGE_ME #include "MoreMenuUI.h" +#if MERGE_ME #include "HistoryUI.h" #include "SettingsUI.h" #endif @@ -292,9 +292,7 @@ private: std::shared_ptr rightButtonBar; std::shared_ptr m_favoriteService; std::shared_ptr m_historyService; -#if MERGE_ME std::shared_ptr m_moreMenuUI; -#endif std::shared_ptr m_bookmarkManagerUI; std::shared_ptr m_mainUI; #if MERGE_ME -- 2.7.4 From b288c117c1eb97713006a0988809c844dc55e232 Mon Sep 17 00:00:00 2001 From: "k.lis2" Date: Tue, 4 Aug 2015 16:06:54 +0200 Subject: [PATCH 04/16] Task TT-80 Implement History view [Issue#] https://bugs.tizen.org/jira/browse/TT-80 [Task] TT-80 Implement History view [Cause] - [Solution] Add HistoryUI. Enable code referring to HistoryUI in SimpleUI [Verify] Perform basic sanity check. Change-Id: I87c20a27f825cda1ec7166e16133f2a5328c45a4 --- services/CMakeLists.txt | 3 +- services/HistoryUI/CMakeLists.txt | 29 + services/HistoryUI/HistoryUI.cpp | 384 ++++++++++++ services/HistoryUI/HistoryUI.h | 91 +++ services/HistoryUI/edc/History.edc | 827 +++++++++++++++++++++++++ services/HistoryUI/edc/error.edc | 144 +++++ services/HistoryUI/images/btn_bar_stop_nor.png | Bin 0 -> 3255 bytes services/HistoryUI/images/ico_delete.png | Bin 0 -> 18365 bytes services/SimpleUI/CMakeLists.txt | 7 +- services/SimpleUI/SimpleUI.cpp | 25 +- services/SimpleUI/SimpleUI.h | 4 +- 11 files changed, 1491 insertions(+), 23 deletions(-) create mode 100644 services/HistoryUI/CMakeLists.txt create mode 100644 services/HistoryUI/HistoryUI.cpp create mode 100644 services/HistoryUI/HistoryUI.h create mode 100644 services/HistoryUI/edc/History.edc create mode 100644 services/HistoryUI/edc/error.edc create mode 100644 services/HistoryUI/images/btn_bar_stop_nor.png create mode 100644 services/HistoryUI/images/ico_delete.png diff --git a/services/CMakeLists.txt b/services/CMakeLists.txt index 5515ac1..167a2f8 100644 --- a/services/CMakeLists.txt +++ b/services/CMakeLists.txt @@ -3,8 +3,7 @@ project(services) add_subdirectory(WebKitEngineService) add_subdirectory(MoreMenuUI) add_subdirectory(MainUI) -# MERGE_ME -#add_subdirectory(HistoryUI) +add_subdirectory(HistoryUI) add_subdirectory(TabUI) add_subdirectory(SimpleUI) # MERGE_ME diff --git a/services/HistoryUI/CMakeLists.txt b/services/HistoryUI/CMakeLists.txt new file mode 100644 index 0000000..9d3bd37 --- /dev/null +++ b/services/HistoryUI/CMakeLists.txt @@ -0,0 +1,29 @@ +project(HistoryUI) + +set(HistoryUI_SRCS + HistoryUI.cpp + ) + +set(HistoryUI_HEADERS + HistoryUI.h + ) + +include(Coreheaders) +include(EFLHelpers) + +include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) + +add_library(${PROJECT_NAME} SHARED ${HistoryUI_SRCS}) + +if(TIZEN_BUILD) + target_link_libraries(${PROJECT_NAME} ${pkgs_LDFLAGS}) +endif(TIZEN_BUILD) + +install(TARGETS ${PROJECT_NAME} + LIBRARY DESTINATION services + ARCHIVE DESTINATION services/static) + +include(EDCCompile) +EDJ_TARGET(History.edj + ${CMAKE_CURRENT_SOURCE_DIR}/edc/History.edc + ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/services/HistoryUI/HistoryUI.cpp b/services/HistoryUI/HistoryUI.cpp new file mode 100644 index 0000000..be63ad0 --- /dev/null +++ b/services/HistoryUI/HistoryUI.cpp @@ -0,0 +1,384 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "HistoryUI.h" +#include "ServiceManager.h" +#include "BrowserLogger.h" +#include "Tools/EflTools.h" +#include "../Tools/BrowserImage.h" + + +namespace tizen_browser{ +namespace base_ui{ + +EXPORT_SERVICE(HistoryUI, "org.tizen.browser.historyui") + +typedef struct _HistoryItemData +{ + std::shared_ptr item; + std::shared_ptr historyUI; +} HistoryItemData; + +struct ItemData{ + tizen_browser::base_ui::HistoryUI* historyUI; + Elm_Object_Item * e_item; +}; + +static std::vector m_history_item_data; + +#define efl_scale (elm_config_scale_get() / elm_app_base_scale_get()) +HistoryUI::HistoryUI() + : m_gengrid(NULL) + , m_parent(NULL) + , m_item_class(NULL) + , m_gengridSetup(false) + , m_history_layout(NULL) + , m_historyitem_layout(NULL) + , m_genListActionBar(NULL) + , m_genListToday(NULL) + , m_itemClassToday(NULL) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + edjFilePath = EDJE_DIR; + edjFilePath.append("HistoryUI/History.edj"); +} + +HistoryUI::~HistoryUI() +{ +} + +void HistoryUI::show(Evas_Object* parent) +{ + elm_theme_extension_add(NULL, edjFilePath.c_str()); + m_history_layout = elm_layout_add(parent); + elm_layout_file_set(m_history_layout, 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); + evas_object_show(m_history_layout); + + showActionBar(); + + m_gengrid = elm_gengrid_add(m_history_layout); + elm_object_part_content_set(m_history_layout, "history_gengird", m_gengrid); + + /*evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, NULL); + evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, NULL); + evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this);*/ + + if (!m_item_class) { + m_item_class = elm_gengrid_item_class_new(); + m_item_class->item_style = "history_item"; + m_item_class->func.text_get = _grid_text_get; + m_item_class->func.content_get = _history_grid_content_get; + m_item_class->func.state_get = NULL; + m_item_class->func.del = NULL; + } + + M_ASSERT(m_parent); + 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_TRUE); + elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE); + elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON); + elm_scroller_page_size_set(m_gengrid, 0, 580); + + 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, 580 * efl_scale, 580 * efl_scale); + + addItems(); + +} + +void HistoryUI::showActionBar() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(NULL, edjFilePath.c_str()); + m_genListActionBar = elm_genlist_add(m_history_layout); + elm_object_part_content_set(m_history_layout, "action_bar_history_genlist", m_genListActionBar); + elm_genlist_homogeneous_set(m_genListActionBar, EINA_FALSE); + elm_genlist_multi_select_set(m_genListActionBar, EINA_FALSE); + elm_genlist_select_mode_set(m_genListActionBar, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListActionBar, ELM_LIST_LIMIT); + elm_genlist_decorate_mode_set(m_genListActionBar, EINA_TRUE); + evas_object_size_hint_weight_set(m_genListActionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + m_itemClassActionBar = elm_genlist_item_class_new(); + m_itemClassActionBar->item_style = "action_bar_history_items"; + m_itemClassActionBar->func.text_get = NULL; // &listTopItemTextGet; + m_itemClassActionBar->func.content_get = &listActionBarContentGet; + m_itemClassActionBar->func.state_get = 0; + m_itemClassActionBar->func.del = 0; + + ItemData * id = new ItemData; + id->historyUI = this; + Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + id, + NULL, //parent item + ELM_GENLIST_ITEM_NONE,//item type + NULL, + NULL //data passed to above function + ); + id->e_item = elmItem; + ItemData * id2 = new ItemData; + id2->historyUI = this; + Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + id2, + NULL, //parent item + ELM_GENLIST_ITEM_NONE,//item type + NULL, + NULL //data passed to above function + ); + id2->e_item = elmItem2; +} + +Evas_Object* HistoryUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!strcmp(part, "clearhistory_click")) + { + Evas_Object *clearHistoryButton = elm_button_add(obj); + elm_object_style_set(clearHistoryButton, "history_button"); + evas_object_smart_callback_add(clearHistoryButton, "clicked", tizen_browser::base_ui::HistoryUI::_clearhistory_clicked, data); + return clearHistoryButton; + } + else if(!strcmp(part, "close_click")) + { + Evas_Object *close_click = elm_button_add(obj); + elm_object_style_set(close_click, "history_button"); + evas_object_smart_callback_add(close_click, "clicked", HistoryUI::close_clicked_cb, data); + return close_click; + } + + return NULL; +} + +void HistoryUI::close_clicked_cb(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData * id = static_cast(data); + id->historyUI->closeHistoryUIClicked(std::string()); + id->historyUI->clearItems(); +} + +char* HistoryUI::listTodayTextGet(void* data, Evas_Object* obj , const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + HistoryItemData * id = static_cast(data); + if(!strcmp(part, "history_url_text")) + { + if(!id->item->getUrl().empty()){ + std::string str = id->item->getTitle() + " - " + id->item->getUrl(); + return strdup(str.c_str()); + } + } + return NULL; +} + +void HistoryUI::_clearhistory_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + /* + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->tabUI->clearItems(); + itemData->tabUI->newTabClicked(std::string()); + */ +} + +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, NULL, 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__); + HistoryItemData *itemData = new HistoryItemData(); + itemData->item = hi; + itemData->historyUI = std::shared_ptr(this); + m_history_item_data.push_back(itemData); + setEmptyGengrid(false); +} + +void HistoryUI::addHistoryItems(std::vector > items) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + m_history_item_data.clear(); + for (auto it = items.begin(); it != items.end(); ++it) + addHistoryItem(*it); +} + +char* HistoryUI::_grid_text_get(void *data, Evas_Object *obj, const char *part) +{ + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + HistoryItemData *itemData = reinterpret_cast(data); + const char* item_name = NULL; + if (!strcmp(part, "menu_label")) { + item_name = "Today"; + return strdup(item_name); + } + return NULL; +} + +Evas_Object * HistoryUI::_history_grid_content_get(void *data, Evas_Object *obj, const char *part) +{ + BROWSER_LOGD("[%s:%d] part : %s", __PRETTY_FUNCTION__, __LINE__, part); + HistoryItemData * id = static_cast(data); + if(!strcmp(part, "history_genlist")) + { + 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 = NULL; + id->historyUI->m_itemClassToday->func.state_get = 0; + id->historyUI->m_itemClassToday->func.del = 0; + + for(auto it = m_history_item_data.begin(); it != m_history_item_data.end(); it++) { + Elm_Object_Item* historyView = elm_genlist_item_append(id->historyUI->m_genListToday, id->historyUI->m_itemClassToday, *it, NULL, ELM_GENLIST_ITEM_NONE, NULL, id->historyUI.get()); + id->historyUI->m_map_history_views.insert(std::pair((*it)->item->getUrl(), historyView)); + } + + return id->historyUI->m_genListToday; + } + return NULL; +} + +void HistoryUI::removeHistoryItem(const std::string& uri) +{ + BROWSER_LOGD("[%s] uri=%s", __func__, uri.c_str()); + if(m_map_history_views.find(uri) == m_map_history_views.end()) { + return; + } + + Elm_Object_Item* historyView = m_map_history_views.at(uri); + elm_object_item_del(historyView); + m_map_history_views.erase(uri); + + setEmptyGengrid(0 == m_map_history_views.size()); +} + +void HistoryUI::_item_deleted(void * /* data */, Evas_Object * /* obj */) +{ + +} + +void HistoryUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) +{ + Elm_Object_Item * selected = reinterpret_cast(event_info); + HistoryItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); + HistoryUI * self = reinterpret_cast(data); + + self->historyItemClicked(itemData->item); +} + +void HistoryUI::_deleteHistory(void *data, Evas_Object * /* obj */, void * /* event_info */) +{ + HistoryItemData * itemData = reinterpret_cast(data); + //itemData->historysUI->historyDeleteClicked(itemData->item); +} + +void HistoryUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) +{ + HistoryItemData * itemData = reinterpret_cast(data); + // itemData->historysUI->historyClicked(itemData->item); +} + +Evas_Object* HistoryUI::createNoHistorysLabel() +{ + Evas_Object *label = elm_label_add(m_parent); + elm_object_text_set(label, "No favorite websites."); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + return label; +} + +void HistoryUI::setEmptyGengrid(bool setEmpty) +{ + if(setEmpty) { + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoHistorysLabel()); + } else { + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", NULL); + } +} + +void HistoryUI::hide() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + evas_object_hide(elm_layout_content_get(m_history_layout, "m_genListToday")); + evas_object_hide(elm_layout_content_get(m_history_layout, "m_gengrid")); + evas_object_hide(elm_layout_content_get(m_history_layout, "m_genListActionBar")); + evas_object_hide(m_history_layout); +} + +void HistoryUI::clearItems() +{ + hide(); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_genlist_clear(m_genListToday); + elm_gengrid_clear(m_gengrid); + elm_genlist_clear(m_genListActionBar); + m_map_history_views.clear(); + m_history_item_data.clear(); + setEmptyGengrid(true); +} + +void HistoryUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,in", "over2"); + + // selected manually + elm_gengrid_item_selected_set(item, EINA_TRUE); +} + +void HistoryUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,out", "over2"); + + // unselected manually + elm_gengrid_item_selected_set(item, EINA_FALSE); +} + +} +} diff --git a/services/HistoryUI/HistoryUI.h b/services/HistoryUI/HistoryUI.h new file mode 100644 index 0000000..89c26a3 --- /dev/null +++ b/services/HistoryUI/HistoryUI.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef HISTORYUI_H +#define HISTORYUI_H + +#include +#include + +#include "AbstractUIComponent.h" +#include "AbstractService.h" +#include "ServiceFactory.h" +#include "service_macros.h" +#include "services/HistoryService/HistoryItem.h" + +namespace tizen_browser{ +namespace base_ui{ + +class BROWSER_EXPORT HistoryUI + : public tizen_browser::interfaces::AbstractUIComponent + , public tizen_browser::core::AbstractService +{ +public: + HistoryUI(); + ~HistoryUI(); + void init(Evas_Object *main_layout); + virtual std::string getName(); + void addHistoryItem(std::shared_ptr); + void addHistoryItems(std::vector >); + void removeHistoryItem(const std::string& uri); + void clearItems(); + void hide(); + void showActionBar(); + void show(Evas_Object *main_layout); + void addItems(); + boost::signals2::signal closeHistoryUIClicked; + boost::signals2::signal)> historyItemClicked; + boost::signals2::signal)> historyDeleteClicked; +private: + static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); + static Evas_Object * _history_grid_content_get(void *data, Evas_Object *obj, const char *part); + static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); + static Evas_Object* listActionBarContentGet(void *data, Evas_Object *obj, const char *part); + static Evas_Object* listTodayContentGet(void *data, Evas_Object *obj, const char *part); + static void _itemSelected(void * data, Evas_Object * obj, void * event_info); + static void _item_deleted(void *data, Evas_Object *obj); + static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); + static void _deleteHistory(void *data, Evas_Object *obj, void *event_info); + static void _clearhistory_clicked(void *data, Evas_Object *obj, void *event_info); + void setEmptyGengrid(bool setEmpty); + static char* listTodayTextGet(void* data, Evas_Object* obj , const char* part); + static void close_clicked_cb(void *data, Evas_Object *obj, void *event_info); + +private: + + Evas_Object *m_history_layout; + Evas_Object *m_historyitem_layout; + Evas_Object *m_genListActionBar; + Evas_Object *m_genListToday; + Elm_Genlist_Item_Class *m_itemClassActionBar; + Elm_Genlist_Item_Class *m_itemClassToday; + Evas_Object *m_gengrid; + Evas_Object *m_parent; + Elm_Gengrid_Item_Class * m_item_class; + std::map m_map_history_views; + bool m_gengridSetup; + std::string edjFilePath; + Evas_Object *createNoHistorysLabel(); + + static void focusItem(void* data, Evas_Object* obj, void* event_info); + static void unFocusItem(void* data, Evas_Object* obj, void* event_info); +}; + + +} +} + +#endif // BOOKMARKSUI_H diff --git a/services/HistoryUI/edc/History.edc b/services/HistoryUI/edc/History.edc new file mode 100644 index 0000000..4f36aef --- /dev/null +++ b/services/HistoryUI/edc/History.edc @@ -0,0 +1,827 @@ + +#define DEBUG_RECT_OVER(over_part, r, g, b) \ + part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ + \ +scale:1; \ + type : RECT; \ + repeat_events: 1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + color: r g b 128; \ + rel1 { to: over_part; relative: 0 0; } \ + rel2 { to: over_part; relative: 1 1; } \ + } \ + } + +collections { + +group{ + name: "elm/button/base/history_button"; + parts{ + part{ + name: "button"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 0 0 0 0; + } + } + part{ + name: "over"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "button";} + rel2 { relative: 1.0 1.0;to: "button";} + color: 0 0 0 0; + } + } + } + programs{ + program { + name: "mouse_click"; + signal: "mouse,clicked,1"; + source: "over"; + script { + emit("elm,action,click", ""); + } + } + } + } + +group { + name: "history-layout"; + data { + item: "highlight_focus" "off"; + } + images { + image: "btn_bar_stop_nor.png" COMP; + } + color_classes{ + color_class{ + name: "defaultBgColor"; + color: 18 22 34 255; + } + color_class{ + name: "focusBgColor"; + color: 69 143 255 255; + } + color_class{ + name: "highlightBgColor"; + color: 69 143 255 102; + } + color_class{ + name: "imageHighlight"; + color: 255 255 255 102; + } + color_class{ + name: "focusbtBgColor"; + color: 22 120 224 255; + } + color_class{ + name: "titleTextColor"; + color: 74 74 74 255; + } + color_class{ + name: "focusTextColor"; + color: 255 255 255 255; + } + color_class{ + name: "highlightTextColor"; + color: 255 255 255 51; + } + color_class{ + name: "urlTextColor"; + color: 116 116 116 204; + } + color_class{ + name: "transparent"; + color: 0 0 0 0; + } + } + + images { + image: "web_shadow.png" COMP; + } + parts { + part { name: "action_bar_history_genlist_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1920 104; + max: 1920 104; + color: 70 143 254 255; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "gengrid_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1920 976; + max: 1920 976; + color: 231 231 231 255; + rel1 { + relative: 0 1; to: "action_bar_history_genlist_bg"; + } + + rel2{ + relative: 1 1; + } + } + } + part { name: "action_bar_history_genlist"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1920 104; + max: 1920 104; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "action_bar_history_genlist_bg";} + rel2 { relative: 1.0 1.0; } + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "history_gengird"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1920 976; + max: 1920 976; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "gengrid_bg"; offset: 63 63;} + rel2 { relative: 1.0 1.0; } + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } +} + + + group { name: "elm/genlist/item/history_url_items/default"; + min: 500 600; + max: 500 600; + data.item: "texts" "history_url_text"; + //data.item: "contents" "clearhistory_click"; + parts{ + part { + name: "bg_clipper"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + color: 255 255 255 255; + align: 0 0; + min: 1004 60; + max: 1004 60; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + } + } + part { + name: "history_url_text"; + scale:1; + mouse_events: 1; + type: TEXT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 1004 55; + max: 1004 55; + color: 116 116 116 255; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; } + rel2 { relative: 1.0 1.0; to: "bg_clipper"; } + text { + text: "Title - url"; + font: "Sans"; + size: 28; + align: 0.0 0.0; + } + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor1; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor1; + visible: 1; + } + } + } + +} + group { name: "elm/genlist/item/action_bar_history_items/default"; + min: 1920 104; + max: 1920 104; + data.item: "texts" "clearhistory_text"; + data.item: "contents" "clearhistory_click close_click"; + parts{ + part { + name: "bg_clipper"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + color: 255 255 255 255; + align: 0 0; + min: 1920 104; + max: 1920 104; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + } + } + + + part { + name: "item3_bg"; + type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 348 65; + max: 348 65; + align: 0.5 0.5; + rel1 { relative: 0.0 0.0;to: "bg_clipper";} + rel2 { relative: 1.0 1.0;to: "bg_clipper";} + color : 255 255 255 255; + + } + } + + part { + name: "HistoryManager"; + scale:1; + mouse_events: 1; + type: TEXT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 .3; + min: 348 65; + max: 348 65; + color: 116 116 116 255; + rel1 { relative: 0.0 0.0; to: "item3_bg"; } + rel2 { relative: 1.0 1.0; to: "item3_bg"; } + text { + text: "History Manager"; + font: "Sans"; + size: 40; + align: 0.5 0.5; + } + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor1; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor1; + visible: 1; + } + } + part { + name: "clearhistory_button_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 192 192 192 255; + align: 0 0; + min: 220 65; + max: 220 65; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 1500 20;} + rel2 { relative: 1.0 1.0; to: "bg_clipper"; } + } + } + part { + name: "clearhistory_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + + min: 220 65; + max: 220 65; + rel1 { relative: 0.0 0.0; to: "clearhistory_button_bg"; } + rel2 { relative: 1.0 1.0; to: "clearhistory_button_bg"; } + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part{ + name: "clearhistory_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "clearhistory_button";} + rel2 { relative: 1.0 1.0;to: "clearhistory_button";} + color: 0 0 0 255; + text { + text: "Clear History"; + font: "Sans"; + size: 27; + align: 0.5 0.5; + } + } + } + + part { + name: "clearhistory_over"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + + min: 220 65; + max: 220 65; + rel1 { relative: 0.0 0.0; to: "clearhistory_button";} + rel2 { relative: 1.0 1.0; to: "clearhistory_button";} + color_class: transparent; + } + } + + part { + name: "clearhistory_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 220 65; + max: 220 65; + rel1 { relative: 0.0 0.0; to: "clearhistory_over";} + rel2 { relative: 1.0 1.0; to: "clearhistory_over";} + color_class: transparent; + } + } + + part { + name: "close_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0.5; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 1758 0;} + rel2 { relative: 1.0 1.0; to: "bg_clipper";} + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusDelBgColor; + visible: 1; + } + } + part { + name: "close_icon"; + type: IMAGE; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_bg";} + rel2 { relative: 1.0 1.0; to: "close_bg";} + image.normal: "btn_bar_stop_nor.png"; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "focus" 0.0; + inherit: "highlight" 0.0; + } + } + part { + name: "close_over"; + scale:1; + + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_bg";} + rel2 { relative: 1.0 1.0; to: "close_bg";} + color_class: transparent; + } + } + part { + name: "close_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_over";} + rel2 { relative: 1.0 1.0; to: "close_over";} + color_class: transparent; + } + } + + } + programs{ + + program { + name: "mouse_click_clearhistory"; + signal: "mouse,clicked,1"; + source: "clearhistory_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_clearhistory_click"; + signal: "mouse,in"; + source: "clearhistory_*"; + action: STATE_SET "highlight" 0.0; + target: "clearhistory_button"; + target: "clearhistory_over"; + target: "clearhistory_text"; + } + program { + name: "mouse_out_clearhistory_click"; + signal: "mouse,out"; + source: "clearhistory_*"; + action: STATE_SET "default" 0.0; + target: "clearhistory_button"; + target: "clearhistory_over"; + target: "clearhistory_text"; + } + program { + name: "mouse_in_close_click"; + signal: "mouse,in"; + source: "close_click"; + script { + emit("mouse_in_close_click", ""); + } + } + program { + name: "mouse_out_close_click"; + signal: "mouse,out"; + source: "close_click"; + script { + emit("mouse_out_close_click", ""); + } + } + program { + name: "mouse_in_close"; + signal: "mouse_in_close_click"; + source: ""; + action: STATE_SET "highlight" 0.0; + target: "close_over"; + target: "close_bg"; + target: "close_icon"; + } + program { + + name: "mouse_out_close"; + signal: "mouse_out_close_click"; + source: ""; + action: STATE_SET "default" 0.0; + target: "close_over"; + target: "close_bg"; + target: "close_icon"; + } + } + } + +group { name: "elm/gengrid/item/history_item/default"; + +data.item: "texts" "menu_label"; + data.item: "contents" "history_genlist"; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + styles { + style { name: "textblock_white"; + base: "font=Sans font_size="20" color=#5c5c5c"; + } + } + +styles { + style { name: "textblock_white_bold"; + base: "font=Sans:style=Bold font_size="20" color=#5c5c5c"; + } + } + parts { + + part { name: "menu_label_bg"; + type: RECT; + description { state: "default" 0.0; + min: 1004 80; + max: 1004 80; + align: 0.0 0.0; + color: 0 0 0 0; + + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 70 143 254 255; + } + } + + part { name: "menu_label"; + type: TEXT; + description { state: "default" 0.0; + min: 1004 80; + max: 1004 80; + align: 0.5 0.5; + fixed: 0 0; + visible: 1; + rel1 { relative: 0.0 0.0;to: "menu_label_bg";} + rel2 { relative: 1.0 1.0;to: "menu_label_bg";} + + color: 92 92 92 255; + text { + text: "Web page title"; + font: "Sans"; + size: 28; + align: 0.0 0.0; + } + } + } + + + part { name: "genlist_bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + min: 1004 600; + max: 1004 600; + color: 255 255 255 255; + rel1 { + relative: 0 1; to: "menu_label_bg"; + } + rel2{ + relative: 1 1; + } + } + } + + part { name: "history_genlist"; + type : SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1004 600; + max: 1004 600; + align: 0.0 0.0; + fixed: 0 0; + rel1 { relative: 0.0 0.0; to: "genlist_bg";} + rel2 { relative: 1.0 1.0; } + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + +} +} + +group { name: "elm/button/base/thumbButton"; + images { + image: "ico_delete.png" COMP; + } + parts { + part { name: "elm.swallow.content"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + visible: 1; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + } + } + } + + programs { + program { name: "mouse,clicked"; + signal: "mouse,down,1"; + source: "elm.swallow.content"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + } +} + +group { name: "elm/button/base/deleteButton"; + parts { + part { name: "delete_x"; + type: IMAGE; + description { state: "default" 0.0; + min: 27 27; + max: 27 27; + image.normal: "ico_delete.png"; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.5 0.5; + visible: 0; + } + description { state: "over" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "elm.swallow.content"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + visible: 1; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + } + } + } + programs { + program { name: "mouse,clicked"; + signal: "mouse,down,1"; + source: "elm.swallow.content"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { name: "mouse_in"; + signal: "mouse,in"; + source: "elm.swallow.content"; + action: STATE_SET "over" 0.0; + target: "delete_x"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "elm.swallow.content"; + action: STATE_SET "default" 0.0; + target: "delete_x"; + } + } +} + +group { name: "elm/gengrid/base/bookmarks"; + data { + item: "focus_highlight" "off"; + } + + parts { + part { name: "clipper"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "background"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 42 50 64 255; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + clip_to: "clipper"; + description { state: "default" 0.0; + rel1 { + relative: 0 0; + offset: 169 110; + } + rel2 { + relative: 1 1; + offset: -169 0; + } + } + } + part { name: "elm.swallow.empty"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 0.5; + rel1 { + relative: 0.5 0.5; + } + rel2 { + relative: 0.5 0.5; + } + } + } + } +} +} diff --git a/services/HistoryUI/edc/error.edc b/services/HistoryUI/edc/error.edc new file mode 100644 index 0000000..0291971 --- /dev/null +++ b/services/HistoryUI/edc/error.edc @@ -0,0 +1,144 @@ +collections { + images { + image: "web_browsing_icon_error.png" COMP; + } + group { name: "error_message"; + styles { + style { name: "mssage_style"; + base: "font=Sans font_size=35 color=#d3d3d3 wrap=word align=0.5"; + } + style { name: "mssage_hint_style"; + base: "font=Sans font_size=24 color=#868686 wrap=word align=0.5"; + } + } + parts { + part{ + name: "message_background"; + type: RECT; + description{ + state: "default" 0.0; + visible: 1; + rel1.relative: 0 0; + rel2.relative: 1 1; + color: 42 50 64 255; + } + } + part{ + name: "error_message_background"; + type:RECT; + description{ + state: "default" 0.0; + visible: 1; + min: 1582 730; + max: 1582 730; + fixed: 1 1; + align: 0.5 0.5; + color: 30 38 50 153; + } + } + part{ + name: "err_ico"; + type: IMAGE; + description{ + state: "default" 0.0; + visible: 1; + min: 140 140; + max:140 140; + fixed: 1 1; + align: 0.5 0; + rel1{ + relative: 0 0; + offset:0 163; + to: "error_message_background"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + image{ + normal: "web_browsing_icon_error.png"; + } + } + } + + part{ + name: "error_text"; + type: TEXTBLOCK; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1502 96; + max: 1502 96; + //color: 211 211 211 255; + align: 0.5 0; + rel1{ + relative: 0 1; + to_x: "error_message_background"; + to_y: "err_ico"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + text{ + style: "mssage_style"; + text: "Server not found.
sdf Please check the followings:"; + //min: 0 0; + //max: 1 1; + //align: 1 0; + //size: 35; + } + } + } + + + part{ + name: "error_hint"; + type: TEXTBLOCK; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1502 117; + max: 1502 117; + color: 134 134 134 255; + align: 0.5 0; + rel1{ + relative: 0 1; + to_x: "error_message_background"; + to_y: "error_text"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + text{ + max: 0 1; + style: "mssage_hint_style"; + text: "Check for any typing error in URL.
" + "Check your network settings.
" + "Try again later.
" + "Click refresh to reload."; + } + } + } + } +/* + programs { + program { name: "mouse_down"; + signal: "mouse,down,1"; + source: "logo"; + action: STATE_SET "hide" 0.0; + target: "logo"; + } + program { name: "mouse_up"; + signal: "mouse,up,1"; + source: "logo"; + action: STATE_SET "default" 0.0; + target: "logo"; + } + } +*/ + } +} diff --git a/services/HistoryUI/images/btn_bar_stop_nor.png b/services/HistoryUI/images/btn_bar_stop_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..c5cdc11ca8ea537497a1a794d79d40362f8659a9 GIT binary patch literal 3255 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 literal 0 HcmV?d00001 diff --git a/services/SimpleUI/CMakeLists.txt b/services/SimpleUI/CMakeLists.txt index 4a5c6d7..96ceae1 100644 --- a/services/SimpleUI/CMakeLists.txt +++ b/services/SimpleUI/CMakeLists.txt @@ -48,8 +48,7 @@ include_directories(${CMAKE_SOURCE_DIR}/services/StorageService/Storage/include) include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) include_directories(${CMAKE_SOURCE_DIR}/services/HistoryService) include_directories(${CMAKE_SOURCE_DIR}/services/MoreMenuUI) -#MERGE_ME -#include_directories(${CMAKE_SOURCE_DIR}/services/HistoryUI) +include_directories(${CMAKE_SOURCE_DIR}/services/HistoryUI) include_directories(${CMAKE_SOURCE_DIR}/services/MainUI) #MERGE_ME #include_directories(${CMAKE_SOURCE_DIR}/services/SettingsUI) @@ -70,8 +69,8 @@ add_dependencies(${PROJECT_NAME} HistoryService) #add_dependencies(${PROJECT_NAME} MoreMenuUI) add_dependencies(${PROJECT_NAME} BookmarkManagerUI) add_dependencies(${PROJECT_NAME} MainUI) +add_dependencies(${PROJECT_NAME} HistoryUI) #MERGE_ME -#add_dependencies(${PROJECT_NAME} HistoryUI) #add_dependencies(${PROJECT_NAME} SettingsUI) add_dependencies(${PROJECT_NAME} TabUI) add_dependencies(${PROJECT_NAME} PlatformInputManager) @@ -81,8 +80,8 @@ target_link_libraries(${PROJECT_NAME} StorageService) target_link_libraries(${PROJECT_NAME} HistoryService) target_link_libraries(${PROJECT_NAME} MoreMenuUI) target_link_libraries(${PROJECT_NAME} MainUI) +target_link_libraries(${PROJECT_NAME} HistoryUI) #MERGE_ME -#target_link_libraries(${PROJECT_NAME} HistoryUI) #target_link_libraries(${PROJECT_NAME} SettingsUI) target_link_libraries(${PROJECT_NAME} TabUI) target_link_libraries(${PROJECT_NAME} BookmarkManagerUI) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index d5e6a6d..0862b66 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -1062,26 +1062,21 @@ void SimpleUI::showMainUI() void SimpleUI::showHistoryUI(const std::string& str) { -#if MERGE_ME BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_historyUI = - std::dynamic_pointer_cast - - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyui")); - M_ASSERT(m_historyUI); - m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this,_1)); - m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onHistoryClicked, this,_1)); - m_historyUI->addHistoryItems(getHistory()); - m_historyUI->show(m_window.get()); -#endif + m_historyUI = + std::dynamic_pointer_cast + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyui")); + M_ASSERT(m_historyUI); + m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this,_1)); + m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onHistoryClicked, this,_1)); + m_historyUI->addHistoryItems(getHistory()); + m_historyUI->show(m_window.get()); } void SimpleUI::closeHistoryUI(const std::string& str) { -#if MERGE_ME - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_historyUI = nullptr; -#endif + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_historyUI = nullptr; } void SimpleUI::showSettingsUI(const std::string& str) diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index 9d64421..713beda 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -35,8 +35,8 @@ // components #include "AbstractWebEngine.h" #include "MoreMenuUI.h" -#if MERGE_ME #include "HistoryUI.h" +#if MERGE_ME #include "SettingsUI.h" #endif #include "MainUI.h" @@ -295,8 +295,8 @@ private: std::shared_ptr m_moreMenuUI; std::shared_ptr m_bookmarkManagerUI; std::shared_ptr m_mainUI; -#if MERGE_ME std::shared_ptr m_historyUI; +#if MERGE_ME std::shared_ptr m_settingsUI; #endif std::shared_ptr m_tabUI; -- 2.7.4 From 16bffc37fb50e6f3c7536f79d3a0c22874f9c64c Mon Sep 17 00:00:00 2001 From: "k.lis2" Date: Tue, 4 Aug 2015 10:31:47 +0200 Subject: [PATCH 05/16] Task TT-79 Implement Setting view [Issue#] https://bugs.tizen.org/jira/browse/TT-79 [Problem] Task TT-79 Implement Setting view [Cause] - [Solution] Add SettingsUI. Enable code referring to SettingsUI in SimpleUI. [Verify] Perform basic sanity check. Change-Id: Ia1c25f3ac47e25a8b0707b1679671ea6325d8fd4 --- services/CMakeLists.txt | 3 +- services/SettingsUI/CMakeLists.txt | 27 + services/SettingsUI/SettingsUI.cpp | 279 ++++ services/SettingsUI/SettingsUI.h | 86 ++ services/SettingsUI/edc/Settings.edc | 1398 ++++++++++++++++++++ services/SettingsUI/edc/error.edc | 144 ++ .../SettingsUI/images/btn_bar_incognito_dis.png | Bin 0 -> 3046 bytes .../SettingsUI/images/btn_bar_incognito_foc.png | Bin 0 -> 3029 bytes .../SettingsUI/images/btn_bar_incognito_nor.png | Bin 0 -> 3043 bytes services/SettingsUI/images/btn_bar_new_dis.png | Bin 0 -> 2980 bytes services/SettingsUI/images/btn_bar_new_foc.png | Bin 0 -> 2963 bytes services/SettingsUI/images/btn_bar_new_nor.png | Bin 0 -> 2977 bytes services/SettingsUI/images/btn_bar_stop_nor.png | Bin 0 -> 3255 bytes services/SettingsUI/images/ico_delete.png | Bin 0 -> 18365 bytes services/SettingsUI/images/web_frame_selected.png | Bin 0 -> 17687 bytes services/SettingsUI/images/web_shadow.png | Bin 0 -> 17700 bytes services/SimpleUI/CMakeLists.txt | 12 +- services/SimpleUI/SimpleUI.cpp | 24 +- services/SimpleUI/SimpleUI.h | 4 - 19 files changed, 1944 insertions(+), 33 deletions(-) create mode 100644 services/SettingsUI/CMakeLists.txt create mode 100644 services/SettingsUI/SettingsUI.cpp create mode 100644 services/SettingsUI/SettingsUI.h create mode 100644 services/SettingsUI/edc/Settings.edc create mode 100644 services/SettingsUI/edc/error.edc create mode 100644 services/SettingsUI/images/btn_bar_incognito_dis.png create mode 100644 services/SettingsUI/images/btn_bar_incognito_foc.png create mode 100644 services/SettingsUI/images/btn_bar_incognito_nor.png create mode 100644 services/SettingsUI/images/btn_bar_new_dis.png create mode 100644 services/SettingsUI/images/btn_bar_new_foc.png create mode 100644 services/SettingsUI/images/btn_bar_new_nor.png create mode 100644 services/SettingsUI/images/btn_bar_stop_nor.png create mode 100644 services/SettingsUI/images/ico_delete.png create mode 100644 services/SettingsUI/images/web_frame_selected.png create mode 100644 services/SettingsUI/images/web_shadow.png diff --git a/services/CMakeLists.txt b/services/CMakeLists.txt index 167a2f8..b4944bf 100644 --- a/services/CMakeLists.txt +++ b/services/CMakeLists.txt @@ -6,8 +6,7 @@ add_subdirectory(MainUI) add_subdirectory(HistoryUI) add_subdirectory(TabUI) add_subdirectory(SimpleUI) -# MERGE_ME -#add_subdirectory(SettingsUI) +add_subdirectory(SettingsUI) add_subdirectory(SimpleURI) add_subdirectory(BookmarkManagerUI) add_subdirectory(StorageService) diff --git a/services/SettingsUI/CMakeLists.txt b/services/SettingsUI/CMakeLists.txt new file mode 100644 index 0000000..a018161 --- /dev/null +++ b/services/SettingsUI/CMakeLists.txt @@ -0,0 +1,27 @@ +project(SettingsUI) + +set(SettingsUI_SRCS + SettingsUI.cpp + ) + +set(SettingsUI_HEADERS + SettingsUI.h + ) + +include(Coreheaders) +include(EFLHelpers) + +add_library(${PROJECT_NAME} SHARED ${SettingsUI_SRCS}) + +if(TIZEN_BUILD) + target_link_libraries(${PROJECT_NAME} ${pkgs_LDFLAGS}) +endif(TIZEN_BUILD) + +install(TARGETS ${PROJECT_NAME} + LIBRARY DESTINATION services + ARCHIVE DESTINATION services/static) + +include(EDCCompile) +EDJ_TARGET(SettingsUI.edj + ${CMAKE_CURRENT_SOURCE_DIR}/edc/Settings.edc + ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/services/SettingsUI/SettingsUI.cpp b/services/SettingsUI/SettingsUI.cpp new file mode 100644 index 0000000..9fe988b --- /dev/null +++ b/services/SettingsUI/SettingsUI.cpp @@ -0,0 +1,279 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "SettingsUI.h" +#include "ServiceManager.h" +#include "BrowserLogger.h" +#include "Tools/EflTools.h" + +#define efl_scale (elm_config_scale_get() / elm_app_base_scale_get()) + +namespace tizen_browser{ +namespace base_ui{ + +EXPORT_SERVICE(SettingsUI, "org.tizen.browser.settingsui") + +struct ItemData{ + tizen_browser::base_ui::SettingsUI* settingsUI; + Elm_Object_Item * e_item; +}; + +SettingsUI::SettingsUI() + : m_settings_layout(NULL) + , m_genListActionBar(NULL) + , m_parent(NULL) + , m_itemClassActionBar(NULL) + , m_item_class(NULL) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + edjFilePath = EDJE_DIR; + edjFilePath.append("SettingsUI/SettingsUI.edj"); +} + +SettingsUI::~SettingsUI() +{ + +} + +void SettingsUI::show(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + //m_parent = p; + elm_theme_extension_add(NULL, edjFilePath.c_str()); + m_settings_layout = elm_layout_add(parent); + elm_layout_file_set(m_settings_layout, edjFilePath.c_str(), "settings-layout"); + evas_object_size_hint_weight_set(m_settings_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_settings_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(m_settings_layout); + + showActionBar(); + showSettingsGenlist(); +} + + +void SettingsUI::showActionBar() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(NULL, edjFilePath.c_str()); + m_genListActionBar = elm_genlist_add(m_settings_layout); + elm_object_part_content_set(m_settings_layout, "actionbar_swallow", m_genListActionBar); + elm_genlist_homogeneous_set(m_genListActionBar, EINA_FALSE); + elm_genlist_multi_select_set(m_genListActionBar, EINA_FALSE); + elm_genlist_select_mode_set(m_genListActionBar, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListActionBar, ELM_LIST_LIMIT); + elm_genlist_decorate_mode_set(m_genListActionBar, EINA_TRUE); + evas_object_size_hint_weight_set(m_genListActionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + m_itemClassActionBar = elm_genlist_item_class_new(); + m_itemClassActionBar->item_style = "settings_action_bar_items"; + m_itemClassActionBar->func.text_get = NULL; + m_itemClassActionBar->func.content_get = &listActionBarContentGet; + m_itemClassActionBar->func.state_get = 0; + m_itemClassActionBar->func.del = 0; + + ItemData * id = new ItemData; + id->settingsUI = this; + Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + id, + NULL, //parent item + ELM_GENLIST_ITEM_NONE,//item type + NULL, + NULL //data passed to above function + ); + id->e_item = elmItem; + + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + +} + +void SettingsUI::showSettingsGenlist() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(NULL, edjFilePath.c_str()); + m_genList = elm_genlist_add(m_settings_layout); + elm_object_part_content_set(m_settings_layout, "settings_genlist_swallow", m_genList); + elm_genlist_homogeneous_set(m_genList, EINA_FALSE); + elm_genlist_multi_select_set(m_genList, EINA_FALSE); + elm_genlist_select_mode_set(m_genList, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genList, ELM_LIST_SCROLL); + elm_genlist_decorate_mode_set(m_genList, EINA_TRUE); + evas_object_size_hint_weight_set(m_genList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_genlist_scroller_policy_set(m_genList, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_AUTO); + + m_item_class = elm_genlist_item_class_new(); + m_item_class->item_style = "settings_items"; + m_item_class->func.text_get = NULL; + m_item_class->func.content_get = &listSettingsGenlistContentGet; + m_item_class->func.state_get = 0; + m_item_class->func.del = 0; + + ItemData * id = new ItemData; + id->settingsUI = this; + Elm_Object_Item* elmItem = elm_genlist_item_append(m_genList, //genlist + m_item_class, //item Class + id, + NULL, //parent item + ELM_GENLIST_ITEM_NONE,//item type + NULL, + NULL //data passed to above function + ); + id->e_item = elmItem; + + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + +} + +Evas_Object* SettingsUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!strcmp(part, "close_click")) + { + Evas_Object *close_click = elm_button_add(obj); + elm_object_style_set(close_click, "basic_button"); + evas_object_smart_callback_add(close_click, "clicked", SettingsUI::close_clicked_cb, data); + return close_click; + } + return NULL; +} + +Evas_Object* SettingsUI::listSettingsGenlistContentGet(void* data, Evas_Object* obj , const char* part) +{ + BROWSER_LOGD("[%s:%d] Part %s", __PRETTY_FUNCTION__, __LINE__, part); + if(!strcmp(part, "del_selected_data_click")) + { + Evas_Object *button = elm_button_add(obj); + elm_object_style_set(button, "basic_button"); + evas_object_smart_callback_add(button, "clicked", SettingsUI::_del_selected_data_clicked_cb, data); + return button; + } + else if(!strcmp(part, "reset_mv_click")) + { + Evas_Object *button = elm_button_add(obj); + elm_object_style_set(button, "basic_button"); + evas_object_smart_callback_add(button, "clicked", SettingsUI::_reset_mv_clicked_cb, data); + return button; + } + else if(!strcmp(part, "reset_browser_click")) + { + Evas_Object *button = elm_button_add(obj); + elm_object_style_set(button, "basic_button"); + evas_object_smart_callback_add(button, "clicked", SettingsUI::_reset_browser_clicked_cb, data); + return button; + } + else if(!strcmp(part, "cache_cb") || !strcmp(part, "cookies_cb") || !strcmp(part, "history_cb")) + { + Evas_Object *checkbox = elm_check_add(obj); + elm_object_style_set(checkbox, "on&off"); + evas_object_smart_callback_add(checkbox, "changed", __check_changed_cb, data); + elm_check_state_set(checkbox, EINA_TRUE); + return checkbox; + } + else if(!strcmp(part, "accept_all_rb") || !strcmp(part, "ask_rb") || !strcmp(part, "sr_disable_rb") || !strcmp(part, "bs_enable_rb") + || !strcmp(part, "bs_disable_rb") || !strcmp(part, "ts_enable_rb") || !strcmp(part, "ts_disable_rb")) + { + Evas_Object *rb = elm_radio_add(obj); + elm_object_style_set(rb, "on&off"); + //evas_object_smart_callback_add(rb, "changed", __radio_changed_cb, data); + return rb; + } + return NULL; +} + +void SettingsUI::__check_changed_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + //ItemData * id = static_cast(data); +} + +void SettingsUI::close_clicked_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData * id = static_cast(data); + id->settingsUI->closeSettingsUIClicked(std::string()); + id->settingsUI->clearItems(); +} + +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_genlist_swallow")); + evas_object_hide(m_settings_layout); +} + +void SettingsUI::_del_selected_data_clicked_cb(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + Evas_Object *cb1 = elm_object_item_part_content_get(itemData->e_item, "cache_cb"); + Evas_Object *cb2 = elm_object_item_part_content_get(itemData->e_item, "cookies_cb"); + Evas_Object *cb3 = elm_object_item_part_content_get(itemData->e_item, "history_cb"); + std::string type; + elm_check_state_get(cb1) ? type += "_CACHE" : ""; + elm_check_state_get(cb2) ? type += "_COOKIES" : ""; + elm_check_state_get(cb3) ? type += "_HISTORY" : ""; + itemData->settingsUI->deleteSelectedDataClicked(type); +} + +void SettingsUI::_reset_mv_clicked_cb(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->settingsUI->resetMostVisitedClicked(std::string()); +} + +void SettingsUI::_reset_browser_clicked_cb(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->settingsUI->resetBrowserClicked(std::string()); +} + +void SettingsUI::clearItems() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + hide(); + elm_genlist_clear(m_genListActionBar); + elm_genlist_clear(m_genList); +} + +void SettingsUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,in", "over2"); + + // selected manually + elm_gengrid_item_selected_set(item, EINA_TRUE); +} + +void SettingsUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Elm_Object_Item *item = reinterpret_cast(event_info); + elm_object_item_signal_emit( item, "mouse,out", "over2"); + + // unselected manually + elm_gengrid_item_selected_set(item, EINA_FALSE); +} + +} +} diff --git a/services/SettingsUI/SettingsUI.h b/services/SettingsUI/SettingsUI.h new file mode 100644 index 0000000..43bf8d2 --- /dev/null +++ b/services/SettingsUI/SettingsUI.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SETTINGSUI_H +#define SETTINGSUI_H + +#include +#include + +#include "AbstractUIComponent.h" +#include "AbstractService.h" +#include "ServiceFactory.h" +#include "service_macros.h" + +namespace tizen_browser{ +namespace base_ui{ + +class BROWSER_EXPORT SettingsUI + : public tizen_browser::interfaces::AbstractUIComponent + , public tizen_browser::core::AbstractService +{ +public: + SettingsUI(); + ~SettingsUI(); + void show(Evas_Object *main_layout); + virtual std::string getName(); + void showActionBar(); + void showSettingsGenlist(); + void clearItems(); + void hide(); + + /*boost::signals2::signal tabClicked; + boost::signals2::signal newTabClicked; + boost::signals2::signal newIncognitoTabClicked;*/ + boost::signals2::signal resetBrowserClicked; + boost::signals2::signal resetMostVisitedClicked; + boost::signals2::signal deleteSelectedDataClicked; + boost::signals2::signal closeSettingsUIClicked; + +private: + static Evas_Object* listActionBarContentGet(void *data, Evas_Object *obj, const char *part); + static Evas_Object* listSettingsGenlistContentGet(void *data, Evas_Object *obj, const char *part); + + static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); + static Evas_Object * _tab_grid_content_get(void *data, Evas_Object *obj, const char *part); + static void _itemSelected(void * data, Evas_Object * obj, void * event_info); + static void close_clicked_cb(void *data, Evas_Object *obj, void *event_info); + static void __check_changed_cb(void *data, Evas_Object *obj, void *event_info); + + static void _del_selected_data_clicked_cb(void * data, Evas_Object * obj, void * event_info); + static void _reset_mv_clicked_cb(void * data, Evas_Object * obj, void * event_info); + static void _reset_browser_clicked_cb(void * data, Evas_Object * obj, void * event_info); + static void _closetabs_clicked(void * data, Evas_Object * obj, void * event_info); + static void _onotherdevices_clicked(void * data, Evas_Object * obj, void * event_info); + +private: + Evas_Object *m_settings_layout; + Evas_Object *m_genListActionBar; + Evas_Object *m_genList; + Elm_Genlist_Item_Class *m_itemClassActionBar; + Evas_Object *m_parent; + + Elm_Gengrid_Item_Class * m_item_class; + std::string edjFilePath; + + static void focusItem(void* data, Evas_Object* obj, void* event_info); + static void unFocusItem(void* data, Evas_Object* obj, void* event_info); +}; + +} +} + +#endif // BOOKMARKSUI_H diff --git a/services/SettingsUI/edc/Settings.edc b/services/SettingsUI/edc/Settings.edc new file mode 100644 index 0000000..76e5dc2 --- /dev/null +++ b/services/SettingsUI/edc/Settings.edc @@ -0,0 +1,1398 @@ +#define DEBUG_RECT_OVER(over_part, r, g, b) \ + part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ + \ +scale:1; \ + type : RECT; \ + repeat_events: 1; \ + description { \ + state: "default" 0.0; \ + visible: 1; \ + color: r g b 128; \ + rel1 { to: over_part; relative: 0 0; } \ + rel2 { to: over_part; relative: 1 1; } \ + } \ + } + +#define STYLE_TAGS \ + tag: "br" "\n";\ + tag: "ps" "ps";\ + tag: "tab" "\t";\ + tag: "b" "+ font_weight=Bold"; + +collections +{ + group{ + name: "elm/button/base/basic_button"; + parts{ + part{ + name: "button"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 0 0 0 0; + } + } + part{ + name: "over"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "button";} + rel2 { relative: 1.0 1.0;to: "button";} + color: 0 0 0 0; + } + } + } + programs{ + program { + name: "mouse_click"; + signal: "mouse,clicked,1"; + source: "over"; + script { + emit("elm,action,click", ""); + } + } + } + } + +group { name: "settings-layout"; + data { + item: "focus_highlight" "off"; + } + images { + image: "btn_bar_stop_nor.png" COMP; + } + color_classes{ + color_class{ + name: "defaultBgColor"; + color: 18 22 34 255; + } + color_class{ + name: "focusBgColor"; + color: 69 143 255 255; + } + color_class{ + name: "highlightBgColor"; + color: 69 143 255 102; + } + color_class{ + name: "imageHighlight"; + color: 255 255 255 102; + } + color_class{ + name: "focusbtBgColor"; + color: 22 120 224 255; + } + color_class{ + name: "subTitleTextColor"; + color: 128 128 128 255; + } + color_class{ + name: "focusTextColor"; + color: 255 255 255 255; + } + color_class{ + name: "highlightTextColor"; + color: 255 255 255 51; + } + color_class{ + name: "urlTextColor"; + color: 116 116 116 204; + } + color_class{ + name: "transparent"; + color: 0 0 0 0; + } + } + + images { + image: "web_shadow.png" COMP; + } + min: 2957 1080; + max: 2957 1080; + parts { + part { name: "background"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + align: 0.0 0.0; + color: 231 231 231 255; + min: 2957 1080; + max: 2957 1080; + rel1 { + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "actionbar_swallow"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.0 0.0; + min: 1920 104; + max: 1920 104; + rel1 { + relative: 0 0; to: "background"; + } + rel2 { + relative: 1 1; + } + } + } + part { name: "uri_bar_shadow"; + type: IMAGE; + scale: 1; + repeat_events: 1; + description { + state: "default" 0.0; + visible: 1; + align: 0.0 0.0; + fixed: 0 0; + min: 1920 14; + max: 1920 14; + image.normal: "web_shadow.png"; + rel1 { relative: 0.0 0.0; offset: 0 104; } + rel2 { relative: 1.0 1.0; } + } + } + part { name: "settings_genlist_swallow"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.0 0.0; + color: 231 231 231 255; + min: 1920 962; + max: 1920 962; + rel1 { + relative: 0 0; to: "background"; offset: 0 118; + } + rel2 { + relative: 1 1; + } + } + } + } +} + +group { name: "elm/genlist/item/settings_items/default"; + data.item: "contents" "del_selected_data_click reset_mv_click reset_browser_click cache_cb cookies_cb history_cb accept_all_rb ask_rb sr_disable_rb bs_enable_rb bs_disable_rb ts_enable_rb ts_disable_rb"; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + styles { + style { name: "sub_title_text"; + base: "font=Sans:style=Regular font_size="28" color=#808080 color_class=T024D text_class=T024D wrap=mixed"; + STYLE_TAGS + } + } + + min: 2957 962; + max: 2957 962; + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 2597 626; + max: 2597 626; + visible: 1; + color: 231 231 231 255; + rel1.offset: 0 160; + } + } + part { name: "del_web_browsing_text_bg"; + type: RECT; + description { state: "default" 0.0; + min: 420 152; + max: 420 152; + align: 0.0 0.0; + color: 231 231 231 255; + rel1 { + to: "bg"; offset: 86 0; + relative: 0.0 0.0; + } + rel2 { + relative: 1.0 1.0; + } + } + } + part { name: "del_web_browsing_text"; + type: TEXT; + description { state: "default" 0.0; + min: 420 36; + max: 420 36; + align: 0.0 0.0; + rel1 { + to: "del_web_browsing_text_bg"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + relative: 1.0 1.0; + } + color: 51 51 51 255; + text { + text: "Delete web browsing data"; + font: "Sans"; + size: 32; + align: 0 0.5; + } + } + } + part { name: "del_web_browsing_sub_text"; + type: TEXTBLOCK; + description { state: "default" 0.0; + min: 420 116; + max: 420 116; + align: 0.0 0.0; + rel1 { + to: "del_web_browsing_text_bg"; + relative: 0.0 0.0; + offset: 0 42; + } + rel2 { + relative: 1.0 1.0; + } + color: 128 128 128 255; + text { + text: "You can delete web browsing data optionally"; + style: "sub_title_text"; + align: 0 0; + } + } + } + part { + name: "del_selected_data_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + + min: 348 64; + max: 348 64; + rel1 { relative: 0.0 1.0; to: "del_web_browsing_text_bg"; } + rel2 { relative: 1.0 1.0; to: "del_web_browsing_text_bg"; } + color_class: focusBgColor; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part{ + name: "del_selected_data_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "del_selected_data_button";} + rel2 { relative: 1.0 1.0;to: "del_selected_data_button";} + color: 255 255 255 255; + text { + text: "Delete selected data"; + font: "Sans"; + size: 24; + align: 0.5 0.5; + } + } + } + part { + name: "del_selected_data_over"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + + min: 348 64; + max: 348 64; + rel1 { relative: 0.0 0.0; to: "del_selected_data_button";} + rel2 { relative: 1.0 1.0; to: "del_selected_data_button";} + color_class: transparent; + } + } + + part { + name: "del_selected_data_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 348 64; + max: 348 64; + rel1 { relative: 0.0 0.0; to: "del_selected_data_over";} + rel2 { relative: 1.0 1.0; to: "del_selected_data_over";} + color_class: transparent; + } + } + part { + name: "cache_cb"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 420 42; + max: 420 42; + rel1 { relative: 0.0 1.0; to: "del_selected_data_button"; offset: 0 74;} + rel2 { relative: 1.0 1.0; to: "del_selected_data_button";} + color_class: transparent; + } + } + part{ + name: "cache_cb_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "cache_cb"; offset: 80 0;} + rel2 { relative: 1.0 1.0;to: "cache_cb";} + color: 0 0 0 255; + text { + text: "Cache"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + } + part { + name: "cookies_cb"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 420 42; + max: 420 42; + rel1 { relative: 0.0 1.0; to: "cache_cb"; offset: 0 40;} + rel2 { relative: 1.0 1.0; to: "cache_cb";} + color_class: transparent; + } + } + part{ + name: "cookies_cb_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "cookies_cb"; offset: 80 0;} + rel2 { relative: 1.0 1.0;to: "cookies_cb";} + color: 0 0 0 255; + text { + text: "Cookies"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + } + part { + name: "history_cb"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 420 42; + max: 420 42; + rel1 { relative: 0.0 1.0; to: "cookies_cb"; offset: 0 40;} + rel2 { relative: 1.0 1.0; to: "cookies_cb";} + color_class: transparent; + } + } + part{ + name: "history_cb_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "history_cb"; offset: 80 0;} + rel2 { relative: 1.0 1.0;to: "history_cb";} + color: 0 0 0 255; + text { + text: "History"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + } + part { name: "reset_mv_text_bg"; + type: RECT; + description { state: "default" 0.0; + min: 420 152; + max: 420 152; + align: 0.0 0.0; + color: 231 231 231 255; + rel1 { + to: "bg"; offset: 605 0; + relative: 0.0 0.0; + } + rel2 { + relative: 1.0 1.0; + } + } + } + part { name: "reset_mv_text"; + type: TEXT; + description { state: "default" 0.0; + min: 420 36; + max: 420 36; + align: 0.0 0.0; + rel1 { + to: "reset_mv_text_bg"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + relative: 1.0 1.0; + } + color: 51 51 51 255; + text { + text: "Reset most visited site"; + font: "Sans"; + size: 32; + align: 0 0.5; + } + } + } + part { name: "reset_mv_text_sub_text"; + type: TEXTBLOCK; + description { state: "default" 0.0; + min: 420 116; + max: 420 116; + align: 0.0 0.0; + rel1 { + to: "reset_mv_text_bg"; + relative: 0.0 0.0; + offset: 0 42; + } + rel2 { + relative: 1.0 1.0; + } + color: 128 128 128 255; + text { + text: "You can delete all items of most visited site."; + style: "sub_title_text"; + align: 0 0.0; + } + } + } + part { + name: "reset_mv_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + + min: 348 64; + max: 348 64; + rel1 { relative: 0.0 1.0; to: "reset_mv_text_bg"; } + rel2 { relative: 1.0 1.0; to: "reset_mv_text_bg"; } + color_class: focusBgColor; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part{ + name: "reset_mv_button_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "reset_mv_button";} + rel2 { relative: 1.0 1.0;to: "reset_mv_button";} + color: 255 255 255 255; + text { + text: "Reset most visited site"; + font: "Sans"; + size: 24; + align: 0.5 0.5; + } + } + } + part { + name: "reset_mv_over"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + + min: 348 64; + max: 348 64; + rel1 { relative: 0.0 0.0; to: "reset_mv_button";} + rel2 { relative: 1.0 1.0; to: "reset_mv_button";} + color_class: transparent; + } + } + + part { + name: "reset_mv_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 348 64; + max: 348 64; + rel1 { relative: 0.0 0.0; to: "reset_mv_over";} + rel2 { relative: 1.0 1.0; to: "reset_mv_over";} + color_class: transparent; + } + } + + part { name: "webcontents_sharing_text_bg"; + type: RECT; + description { state: "default" 0.0; + min: 942 166; + max: 942 166; + align: 0.0 0.0; + color: 231 231 231 255; + rel1 { + to: "bg"; offset: 1124 0; + relative: 0.0 0.0; + } + rel2 { + relative: 1.0 1.0; + } + } + } + part { name: "webcontents_sharing_text"; + type: TEXT; + description { state: "default" 0.0; + min: 942 32; + max: 942 32; + align: 0.0 0.0; + rel1 { + to: "webcontents_sharing_text_bg"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + to: "webcontents_sharing_text_bg"; + relative: 1.0 1.0; + } + color: 51 51 51 255; + text { + text: "Web contents Sharing"; + font: "Sans"; + size: 32; + align: 0 0.5; + } + } + } + part { name: "webcontents_sharing_sub_text"; + type: TEXTBLOCK; + description { state: "default" 0.0; + min: 942 126; + max: 942 126; + align: 0.0 0.0; + rel1 { + to: "webcontents_sharing_text_bg"; + relative: 0.0 0.0; + offset: 0 42; + } + rel2 { + relative: 1.0 1.0; + } + color: 128 128 128 255; + text { + text: "You can set option about web contents sharing."; + style: "sub_title_text"; + align: 0 0.0; + } + } + } + part{ + name: "webcontents_sharing_header_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 1.0;to: "webcontents_sharing_text_bg"; offset: 0 10;} + rel2 { relative: 1.0 1.0;to: "webcontents_sharing_text_bg";} + color: 51 51 51 255; + text { + text: "Sharing request Bookmark Sync Tab Sync"; + font: "Sans"; + size: 32; + align: 0 0.5; + } + } + } + part { + name: "accept_all_rb"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 266 48; + max: 266 48; + rel1 { relative: 0.0 1.0; to: "webcontents_sharing_text_bg"; offset: 0 72;} + rel2 { relative: 1.0 1.0; to: "webcontents_sharing_text_bg";} + color_class: transparent; + } + } + part{ + name: "accept_all_rb_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "accept_all_rb"; offset: 70 0;} + rel2 { relative: 1.0 1.0;to: "accept_all_rb";} + color: 0 0 0 255; + text { + text: "Accept all"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + } + part { + name: "ask_rb"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 266 48; + max: 266 48; + rel1 { relative: 0.0 1.0; to: "accept_all_rb"; offset: 0 34;} + rel2 { relative: 1.0 1.0; to: "accept_all_rb";} + color_class: transparent; + } + } + part{ + name: "ask_rb_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "ask_rb"; offset: 70 0;} + rel2 { relative: 1.0 1.0;to: "ask_rb";} + color: 0 0 0 255; + text { + text: "Ask"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + } + part { + name: "sr_disable_rb"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 266 48; + max: 266 48; + rel1 { relative: 0.0 1.0; to: "ask_rb"; offset: 0 34;} + rel2 { relative: 1.0 1.0; to: "ask_rb";} + color_class: transparent; + } + } + part{ + name: "sr_disable_rb_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "sr_disable_rb"; offset: 70 0;} + rel2 { relative: 1.0 1.0;to: "sr_disable_rb";} + color: 0 0 0 255; + text { + text: "Disable"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + } + part { + name: "bs_enable_rb"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 266 48; + max: 266 48; + rel1 { relative: 0.0 1.0; to: "webcontents_sharing_text_bg"; offset: 338 72;} + rel2 { relative: 1.0 1.0; to: "webcontents_sharing_text_bg";} + color_class: transparent; + } + } + part{ + name: "bs_enable_rb_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "bs_enable_rb"; offset: 70 0;} + rel2 { relative: 1.0 1.0;to: "bs_enable_rb";} + color: 0 0 0 255; + text { + text: "Enable"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + } + part { + name: "bs_disable_rb"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 266 48; + max: 266 48; + rel1 { relative: 0.0 1.0; to: "bs_enable_rb"; offset: 0 34;} + rel2 { relative: 1.0 1.0; to: "bs_enable_rb";} + color_class: transparent; + } + } + part{ + name: "bs_disable_rb_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "bs_disable_rb"; offset: 70 0;} + rel2 { relative: 1.0 1.0;to: "bs_disable_rb";} + color: 0 0 0 255; + text { + text: "Disable"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + } + part { + name: "ts_enable_rb"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 266 48; + max: 266 48; + rel1 { relative: 0.0 1.0; to: "webcontents_sharing_text_bg"; offset: 676 72;} + rel2 { relative: 1.0 1.0; to: "webcontents_sharing_text_bg";} + color_class: transparent; + } + } + part{ + name: "ts_enable_rb_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "ts_enable_rb"; offset: 70 0;} + rel2 { relative: 1.0 1.0;to: "ts_enable_rb";} + color: 0 0 0 255; + text { + text: "Enable"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + } + part { + name: "ts_disable_rb"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 266 48; + max: 266 48; + rel1 { relative: 0.0 1.0; to: "ts_enable_rb"; offset: 0 34;} + rel2 { relative: 1.0 1.0; to: "ts_enable_rb";} + color_class: transparent; + } + } + part{ + name: "ts_disable_rb_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "ts_disable_rb"; offset: 70 0;} + rel2 { relative: 1.0 1.0;to: "ts_disable_rb";} + color: 0 0 0 255; + text { + text: "Disable"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + } + + + part { name: "reset_browser_text_bg"; + type: RECT; + description { state: "default" 0.0; + min: 420 152; + max: 420 152; + align: 0.0 0.0; + color: 231 231 231 255; + rel1 { + to: "bg"; offset: 2165 0; + relative: 0.0 0.0; + } + rel2 { + relative: 1.0 1.0; + } + } + } + part { name: "reset_browser_text"; + type: TEXT; + description { state: "default" 0.0; + min: 420 36; + max: 420 36; + align: 0.0 0.0; + rel1 { + to: "reset_browser_text_bg"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + to: "reset_browser_text_bg"; + relative: 1.0 1.0; + } + color: 51 51 51 255; + text { + text: "Reset Browser"; + font: "Sans"; + size: 32; + align: 0 0.5; + } + } + } + part { name: "reset_browser_sub_text"; + type: TEXTBLOCK; + description { state: "default" 0.0; + min: 420 116; + max: 420 116; + align: 0.0 0.0; + rel1 { + to: "reset_browser_text_bg"; + relative: 0.0 0.0; + offset: 0 42; + } + rel2 { + relative: 1.0 1.0; + } + color: 128 128 128 255; + text { + text: "You can delete all data and return to initial settings."; + style: "sub_title_text"; + align: 0 0.0; + } + } + } + part { + name: "reset_browser_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + + min: 348 64; + max: 348 64; + rel1 { relative: 0.0 1.0; to: "reset_browser_text_bg"; } + rel2 { relative: 1.0 1.0; to: "reset_browser_text_bg"; } + color_class: focusBgColor; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor; + visible: 1; + } + } + part{ + name: "reset_browser_button_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + rel1 { relative: 0.0 0.0;to: "reset_browser_button";} + rel2 { relative: 1.0 1.0;to: "reset_browser_button";} + color: 255 255 255 255; + text { + text: "Reset browser"; + font: "Sans"; + size: 24; + align: 0.5 0.5; + } + } + } + part { + name: "reset_browser_over"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + + min: 348 64; + max: 348 64; + rel1 { relative: 0.0 0.0; to: "reset_browser_button";} + rel2 { relative: 1.0 1.0; to: "reset_browser_button";} + color_class: transparent; + } + } + + part { + name: "reset_browser_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 348 64; + max: 348 64; + rel1 { relative: 0.0 0.0; to: "reset_browser_over";} + rel2 { relative: 1.0 1.0; to: "reset_browser_over";} + color_class: transparent; + } + } + + part { + name: "line1"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + + min: 1 626; + max: 1 626; + rel1 { relative: 0.0 0.0; to: "bg"; offset: 518 0; } + rel2 { relative: 1.0 1.0; } + color: 128 128 128 255; + } + } + part { + name: "line2"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + + min: 1 626; + max: 1 626; + rel1 { relative: 0.0 0.0; to: "bg"; offset: 1037 0; } + rel2 { relative: 1.0 1.0; } + color: 128 128 128 255; + } + } + part { + name: "line3"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + + min: 1 626; + max: 1 626; + rel1 { relative: 0.0 0.0; to: "bg"; offset: 2078 0; } + rel2 { relative: 1.0 1.0; } + color: 128 128 128 255; + } + } + } + programs{ + program { + name: "mouse_click_del_selected_data"; + signal: "mouse,clicked,1"; + source: "del_selected_data_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_del_selected_data_click"; + signal: "mouse,in"; + source: "del_selected_data_*"; + action: STATE_SET "highlight" 0.0; + target: "del_selected_data_button"; + target: "del_selected_data_over"; + target: "del_selected_data_text"; + } + program { + name: "mouse_out_del_selected_data_click"; + signal: "mouse,out"; + source: "del_selected_data_*"; + action: STATE_SET "default" 0.0; + target: "del_selected_data_button"; + target: "del_selected_data_over"; + target: "del_selected_data_text"; + } + + program { + name: "mouse_click_reset_mv"; + signal: "mouse,clicked,1"; + source: "reset_mv_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_reset_mv_click"; + signal: "mouse,in"; + source: "reset_mv_*"; + action: STATE_SET "highlight" 0.0; + target: "reset_mv_button"; + target: "reset_mv_over"; + target: "reset_mv_text"; + } + program { + name: "mouse_out_reset_mv_click"; + signal: "mouse,out"; + source: "reset_mv_*"; + action: STATE_SET "default" 0.0; + target: "reset_mv_button"; + target: "reset_mv_over"; + target: "reset_mv_text"; + } + + program { + name: "mouse_click_reset_browser"; + signal: "mouse,clicked,1"; + source: "reset_browser_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_reset_browser_click"; + signal: "mouse,in"; + source: "reset_browser_*"; + action: STATE_SET "highlight" 0.0; + target: "reset_browser_button"; + target: "reset_browser_over"; + target: "reset_browser_text"; + } + program { + name: "mouse_out_reset_browser_click"; + signal: "mouse,out"; + source: "reset_browser_*"; + action: STATE_SET "default" 0.0; + target: "reset_browser_button"; + target: "reset_browser_over"; + target: "reset_browser_text"; + } + } +} + + +group { name: "elm/genlist/item/settings_action_bar_items/default"; + min: 1920 104; + max: 1920 104; + data.item: "texts" "settings_title"; + data.item: "contents" "close_click"; + images { + } + parts{ + part { + name: "bg_clipper"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + color: 255 255 255 255; + align: 0 0; + min: 1920 104; + max: 1920 104; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + } + } + + part { + name: "settings_bg"; + type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 348 65; + max: 348 65; + align: 0.5 0.5; + rel1 { relative: 0.0 0.0;to: "bg_clipper";} + rel2 { relative: 1.0 1.0;to: "bg_clipper";} + color : 255 255 255 255; + + } + } + + part { + name: "settings_title"; + scale:1; + mouse_events: 1; + type: TEXT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 .3; + min: 348 65; + max: 348 65; + color: 51 51 51 255; + rel1 { relative: 0.0 0.0; to: "settings_bg"; } + rel2 { relative: 1.0 1.0; to: "settings_bg"; } + text { + text: "Settings"; + font: "Sans"; + size: 58; + align: 0.5 0.5; + } + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor1; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusbtBgColor1; + visible: 1; + } + } + part { + name: "close_bg"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0.5; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 1758 0;} + rel2 { relative: 1.0 1.0; to: "bg_clipper";} + color_class: transparent; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color_class: focusBgColor; + visible: 1; + } + description { + state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusDelBgColor; + visible: 1; + } + } + part { + name: "close_icon"; + type: IMAGE; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + align: 0 0; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_bg";} + rel2 { relative: 1.0 1.0; to: "close_bg";} + image.normal: "btn_bar_stop_nor.png"; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "focus" 0.0; + inherit: "highlight" 0.0; + } + } + part { + name: "close_over"; + scale:1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_bg";} + rel2 { relative: 1.0 1.0; to: "close_bg";} + color_class: transparent; + } + } + part { + name: "close_click"; + scale:1; + type: SWALLOW; + description { + state: "default" 0.0; + visible: 1; + align: 0 0; + fixed: 1 1; + min: 82 102; + max: 82 102; + rel1 { relative: 0.0 0.0; to: "close_over";} + rel2 { relative: 1.0 1.0; to: "close_over";} + color_class: transparent; + } + } + + programs{ + + program { + name: "mouse_in_close_click"; + signal: "mouse,in"; + source: "close_click"; + script { + emit("mouse_in_close_click", ""); + } + } + program { + name: "mouse_out_close_click"; + signal: "mouse,out"; + source: "close_click"; + script { + emit("mouse_out_close_click", ""); + } + } + program { + name: "mouse_in_close"; + signal: "mouse_in_close_click"; + source: ""; + action: STATE_SET "highlight" 0.0; + target: "close_over"; + target: "close_bg"; + target: "close_icon"; + } + program { + name: "mouse_out_close"; + signal: "mouse_out_close_click"; + source: ""; + action: STATE_SET "default" 0.0; + target: "close_over"; + target: "close_bg"; + target: "close_icon"; + } + } + } +} + diff --git a/services/SettingsUI/edc/error.edc b/services/SettingsUI/edc/error.edc new file mode 100644 index 0000000..0291971 --- /dev/null +++ b/services/SettingsUI/edc/error.edc @@ -0,0 +1,144 @@ +collections { + images { + image: "web_browsing_icon_error.png" COMP; + } + group { name: "error_message"; + styles { + style { name: "mssage_style"; + base: "font=Sans font_size=35 color=#d3d3d3 wrap=word align=0.5"; + } + style { name: "mssage_hint_style"; + base: "font=Sans font_size=24 color=#868686 wrap=word align=0.5"; + } + } + parts { + part{ + name: "message_background"; + type: RECT; + description{ + state: "default" 0.0; + visible: 1; + rel1.relative: 0 0; + rel2.relative: 1 1; + color: 42 50 64 255; + } + } + part{ + name: "error_message_background"; + type:RECT; + description{ + state: "default" 0.0; + visible: 1; + min: 1582 730; + max: 1582 730; + fixed: 1 1; + align: 0.5 0.5; + color: 30 38 50 153; + } + } + part{ + name: "err_ico"; + type: IMAGE; + description{ + state: "default" 0.0; + visible: 1; + min: 140 140; + max:140 140; + fixed: 1 1; + align: 0.5 0; + rel1{ + relative: 0 0; + offset:0 163; + to: "error_message_background"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + image{ + normal: "web_browsing_icon_error.png"; + } + } + } + + part{ + name: "error_text"; + type: TEXTBLOCK; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1502 96; + max: 1502 96; + //color: 211 211 211 255; + align: 0.5 0; + rel1{ + relative: 0 1; + to_x: "error_message_background"; + to_y: "err_ico"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + text{ + style: "mssage_style"; + text: "Server not found.
sdf Please check the followings:"; + //min: 0 0; + //max: 1 1; + //align: 1 0; + //size: 35; + } + } + } + + + part{ + name: "error_hint"; + type: TEXTBLOCK; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1502 117; + max: 1502 117; + color: 134 134 134 255; + align: 0.5 0; + rel1{ + relative: 0 1; + to_x: "error_message_background"; + to_y: "error_text"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + text{ + max: 0 1; + style: "mssage_hint_style"; + text: "Check for any typing error in URL.
" + "Check your network settings.
" + "Try again later.
" + "Click refresh to reload."; + } + } + } + } +/* + programs { + program { name: "mouse_down"; + signal: "mouse,down,1"; + source: "logo"; + action: STATE_SET "hide" 0.0; + target: "logo"; + } + program { name: "mouse_up"; + signal: "mouse,up,1"; + source: "logo"; + action: STATE_SET "default" 0.0; + target: "logo"; + } + } +*/ + } +} diff --git a/services/SettingsUI/images/btn_bar_incognito_dis.png b/services/SettingsUI/images/btn_bar_incognito_dis.png new file mode 100644 index 0000000000000000000000000000000000000000..a6bbd1a978f917137f1946242f61679153be6f71 GIT binary patch literal 3046 zcmX|@cQ_SnAII+#*(-Z@L{>PqY|gP~IC6~2h+`xpPgZo0EhE_-q3ltSqZ2Z-9U=1= z*&%u}I%K_`=X&4gkMHOEyRYlM?(6sc{&mOSFw>`};idrq&>I@)Sf2aea-*U+C#t&( zdT!Ld2DT3Xpk?`65Rm(V695`>4+P@I4R@aap9k(fzEDF10_yAUUAxjs`3XRRMro-)t7%@VG;iz~;|4s(0fKn~ zX$?rbZcK$?1zI7=@DiY<2f<*og{?pVIdJTEab5y9B!Q#Ic#;EH^>%F3eqF0!S`$BSDyLQrFQlv+VNWILM`>dt#V<-Q8|dcTa){3^fFTVls~5j^suQ#n}~S=cUt?p-NvZ02TtmhfgJ7 zb=(+L3XJz@(ba8o_uI4ue~}X1Y8kcaLBaa8&93j?-RKsk;-{uomX{}uI^p(CeKujI z==M9UHYfKE!_|&S``{Jp7s1=c^-UcNga+j>t6T6~J3h4M=F3WZ5kjvfsucOsIg? zMG^ozjXrH(MXAUz?okUvfoDH8PxK3}0*ssCGd}=s>j+69`|32isQ}O^h!B6P&9m3W zDbY&7+jeoLjrQ14@d;e0vmMR^r@4#a^>-AjiiC^C48G+PcZ7Y_;*)Q+aF0p%WsqvO z{=lH_%lOBMD!)y%DT10@yN8O!Nnkn-;+%jIOs3+EtuXr zeb=j&Qu(0j6Xp7otrb&oF`g266TFP8 zgI7gnRwk;_pwgmJf3sP!W~&ri(yZHPdlbQ--EAb|Afk^>AzZ|+Sxs5ZmeQ26o2skq z*GN@(74sA}>IAmjFWt`0|8yIZZ{kxr7u>w|hc^s%f;{p5Q@XEDhoY#X6QUr}5jfR8 zEBN`S@xi)@zbp{9Id5 zFx}3zG{u*Qm8hDinsg5i3>FQJ=P2Z<%S_0w<*nsSh!9y)mO(Gs~bx%mEz6P%_{T9(H(Dp;d*i94P0+mCMk$DIB#5- z6WW;r-SD}lV>`V$J?vxH(-U<{`q(LkNfL4y=B!^nq{J%rKS48D+El_ap(>7 zs@ucz)3@V0kpy;uC6Ei5yvM zk0(WEf>wB9efnB*W}d$zyVJ?hkMCgf{(_|1n0iZz7#& z^nM~*L#$25+{Rpw43Fwanlj#-f-nXjFy#2Pi$wtUdCIBd z=$Z>*-jmVi=SQZ1g%RDe#5L6>Rf5CLhk%`0;tGq+2b` z7yqZ;AUT=adpD1^+5%?+`F_5dXEa}a1br-e=6?8Y-|9>0Q94(8`WZP{_U^HZoFwu5 zzX^3QurviA94_QZFHbJD_~@nI0%<+-AMKe6JfG;Uk(fvL4nJ`T4>*PoJ8kMK?f-*-?~@>*`W zJzeOx;t=*p&+eX9Bx@>EyH6od5#6#B4eNeaH{27F?(gEVTkuO^#F@-eE0UbravNWV z|8vNF=#};Rd8lw@_r&>D)zf^d71N$7E2K2;;PiW^RVYF2e;)e>H0L+8|HZ#C{t0B+ e&j7&L85v*_6@b2P=uJ2;5*X^5>D0g-BmWEaN0s^j literal 0 HcmV?d00001 diff --git a/services/SettingsUI/images/btn_bar_incognito_foc.png b/services/SettingsUI/images/btn_bar_incognito_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..686e40d259b5b3bfb264c2594d504535b6f32570 GIT binary patch literal 3029 zcmai0Rag}27X1;VOQaFc&>@}DFhi%n07FSLAR?eBB}lh~NIM8Boq`OGboU@2IfRr5 z2pkCqCFXMOdAV=*VeR#OYk%L~Yp)6yK~3G$KU6XhmS8r4+ewyKJ;<-yzd4;;5^D42{+$j zR>3bFK@H-=UmEzBF_A;eph@A3>HNZ66!iM>Tt#zCrk&Tcv`9Dx3gd}WQo@s&Ohu>@ zDQC&nx!$Biy^T*CI$a5Q>owhi|2BHjIHS5*b%<&hBkLfi&eD}Ol?|sZhu*yQHLAa- zZ)IIfJ%WcJ_{5}>Y46pqT_HwT3zz;W2cc@5kV1&#vGzD zz#gtd8t#4ZhHsC=<1SUaxfwvFfrcsJo|16p}7lX757$%Rqo0;oq@} z2jHODr}K*-IdQm0)XG=@VPEZBr;rbXyX(F11K_SEuNZu&L9L%00L{V(;W`bDqfSQ)R~I^|&K%{Up}aj^P^U0kY9J=nvW-PPDJpekhA2*oN#sOk}xFkLI&d*O}P!yWpyRZ z65$XFUCslQhgTHh?6g0nD-8gt$g|iM9m$sw^`<14tMmv^pr{NCKb`r<)qO2t$PNtZo_P2CvMuc?x+7;%L(@0q%@4gAe?luKn&| zb(WHhL+Fa|Of#fj7pD)2hxN$wG9 z^{OXRcqsz8H4w9oTJK($UgucnITJWEX_U)OI%{y7g`nKD3LM5NV?g1 zRb*vnAu4q%O)GVFTIFhXOHn1QTFus{5wsfp`T}+WI>=P)Rn(^WocUrYWht|fisEsN zScO+HM^Uq8K>LHzy_|x!yWs_fKBY@Rt($*tgo>ZT&%OVY9_vseNE@hmNpaLzR^?t< zKObdI@qXM-Q<#0XI;_|!(p5lA)4e|LDl*o6+f9*?bkr8L7?u&HS1CtJ}JQ5G;v0`(AD7IQ4H#d5JzCcMqnV|-l#i4&QK%Kwmlam6 z5WA;5FaJsAlUkpcyYMwd9BsGcO%p@E1YDlZPYAs5MhL(JX+X&7Glhq^LtlZm26NVJBDhqCn?v6AJ z;nL(^?Y}1MGITMlyg(Pn8d!;PBEGd&-BYMn_6x#Mt}$J`6>CXarTj4wE$lsIQn_oD zT@%*IA8h0makq0Qva^xMYlq5$aw8^mXJKa7-UK0Tz1-;ZCl>mHp!ii^( z3gVih&@jx~cIA&PZl#0RQ6)9_JNOa&4_t0(PdD{8r zd8f9{wx3K!RL7^cmx9l9aDUOgl2Nt}(m#X`dd_b}PG%qv#*$H)sL(L6-wTeoH|UT} z7wqyqI-mVd^!_UoT7;xcr4}Wu-N8rygL>S?b*qn7d9{iT-rN4$$`=`vCjHH?n)7Nf zc3zmh;MT?vcl;JdfjoBcs5R&(GhuqFKtW}(^)T26--|z9W?l??C~%G)Zk`Je*sE?a zX>mAG-_@9dEyhi$*27DhLICIf+hsbF^{0?$f&`D>?~lztm!4*@Wn>UYh;t6lT%<*Dm;WZj zMc2#-fM7lV!lMBAO}OMO03J&Ku)as`C z9|@Vm1&;LY-^ttBEh2-;i3Qnn70O%Lh;-8+R~dM9)2>i3yi<=Pp)iAJM3M-lK{O~Y z#s6t7&6?Gvn&2(_JJ(uYv+z%7hRI$V|9C!rs2}F-$gL6iLHo&F4xQRj{sV{Q`MJRL z8?CJg{&htEo%aQ6O`tntg4MFn^G`JXDo<$s6XYsqY-ed$l|b_E-mM{R{)3G)zUAEH zrS?nlAk$*$IoiIoVn0_HvyuYBQ)+ugIc zBBmBW&g%_NXgADn7iW*VpxK1x+7h6m3EBhF zZ|jqy7=T(x3bX{MX%V2%IsE3JkO(*oI6Ex^6H(wG@MLWapwP#;p#;F@ITs^AVLITX zca7Ho?uwvl_)elGK!^hdH~nsTFeM7abuHa=KwT4P$I(*M15!#LZW+x{Q`h3Sl!-|n9U;izkHIN1~owY})(N8$@^C#U7})!|BCH2@X^!bi?UAPuZ2 zMPiiq`76F1BKNx#g%6LC-0Er68bRU4jOD)X-)uCC(y-Iht1By0dfiYP$9~JOb7ZG| zyXD!v-{DH9M~B}&Eb&H2+C^v+9e?W_JTNF`AAUv_?KHcVs(so-adFBq#@(&!ghdE5 zESu8#rD)_O?@JbQCqSPGec~Iva9LUqIU!V8kO6g`Dg>eFqGfi@gunC!Xb}PJOGg0g zwfJ;=6(l7@xkoJy2VU%|o@p2I0hF8WGd}?CYVeA|`x{hyNdeF(j1aCE9MbKk?y(uZ)MA|$@2Qo2 zY5q8p7IX-&a?QjOI3*%@Qb?I|V~)8xbcpDZcsW1EGnjJgr_1O_m?gqF zEp#~cl>M*B$JuH%rz`dW$;i{#R&9yr5%s3ZUnv`5*fKfRXsuTiUt9tt@=}=!^S}7N zV^vO;En5Fl=}t3~ssig3Z~uOsM5_CqxL8jY^zCgCvJB^ex7<~fl|8I=cd7_m5)Pe* z-v$!VMQFB@$r1%ZIUR4P>mUpeMpHUvob0^P*JjA%$OxlNI|aBi%JkpyH(&eRecee? zA`YP=!ZSgaN)Mq8jfZv1@zN#0Bn7Z(S9IULfsfLSYK`7E z{F+RvHMF`2V^(V#S4J=WFi(Ccib+?$xcXJ*7^^$8`;kZO_kiYWbD1}cvcFi44s2+D z&;Cw$5J*WC%NW%gj}&CdzfN);$r5gXcg@3Uv@E2|m&?h%W>s2LpiQ>S+02pUie+&X z$TAYH$@vjk$RE`u&(*c;QrxAx1eJ)9KIEDb>-TwYX_u@56;y7}J@O+S7l+>&#~ z(UPQGQC=hulhTv2Y%tq@?xsqzoa1-=BEX1jU9dEJKRj`sVOMBLh^<8004w2Y>s67J zorS2>sWh$B-fEMr*)Bzwv}v|jokUQp_v#7Q3TPu!aaYmn=F{eLrR1edhRO3pJ>EU9`HA_t`1K7p4R`X) z46!9bC5i@$2E9XrL$8J=a%J+BB_<`;^Vjny^B0;Ntb?pYFlCtcuDbOr)+JUunAZC- z*78=x2n%bw2CZszHQz)_bxY~BQmj#iQDwmdva9YV<};?eiKT9JiWpym@y3KXBAu9# zO`mGIb~4&B!kWXLo+*=1#Z6OJa#(YOKX~WQpm0ZFJ`eX|M>XuzLDmKYi5R9Go|0O| z&<_Z8d!Wtp$Fz~mNbG~C{rIE={m22aY!$J5ww}4ZwiUgALqEI4kkLbQenWoeb{W2Q zM|Q_!CvNuTp!7?j0xPKpU%L8W-%M9WR4HC&ihC_og&V_+Ban^jJP>C{x@GlbT~l#j z#gXGKv&t_O|Ch@u%Sv+dlJi#fgL3UneN6+#T|Nc&F$=IKJQpq(Ar~W{6van?But1< zkFdFNavbuQ>tl+l0^apk{q(kaav@foQ9U)XI&!t6n#;ZKM_M)4(RvOp9p^zEV-o&- z;tPr6nqyK|IHf>LT#RL`YKm_>f^|e9TPAR17WQC4>bH%*|?W9DzpY-qUB77Za|Ly?^h+!s+&Y+!A_;VmXvK2hwNf8(f6zJcub} zDi@;@QOHs=h&Q_Z{6Ffn!eva!e0%hPd@1C?ogAG=Zpeu2Nc~m ztun#9pQMUKRt7;g-Pm>u9j{ehZ6ebvnmU24Q&rL^yAay zUhKZS*rw~GTYQEoj@7pm+ztKeD5dz-x=bf_yb5Y-@IM+s+sPv07+!{1c02Q(;Uo4ga<9M6aqcfGyAMh3g z7KY<)cp)rZR*~e zAI{OcfudBhR2ENP^eplCY6P!r9FZ*?-JnvKd6XPlwMa5{^AQJ<1L6tI+so6+H_tn< zak6PP9#k2b*qjeJ)yChXc_FQ26|A=p|Lifd5jmED+#60tXQIQx#eUB^;9p@v*PU?- zo-{tY&9niFqnZ~<>x!+4INQDV0ekiMReH< zoshQ1P`9HEwgNfa+(BFLPo|5B@dA0}xwicfpQBGlhYL(|;r;?=xPg}GK!Kg=R^wLt z1GR1SY1mxcxT?+h?9}e;6VLX*!u^q1?IYrtsNwVU!&DmB)zsY7fmo{8t%BPs^72cn z{%0GfrLbX_Vg3T<^H=8sHOx$q@Z<5VN!&=zNKy7)cE(5V$Hixx?OQCh_@2(58y`Lg zNlDy2xO1}I5jY#jvHN;~#(3p1=M%vT_up?1&A*hMWUyppTo4iF?4LSIiQ+H&Ca1HG znIQlnd;p-L0Qh}z=^Fq%6bE3_0RV*@0GNHA*?-akfPh+8LmeJ8^J7+@yi=Uvs>#du zy;TyGkB!*1MAjxZvGnTJSK{#94$_kQ{AXAmKt}flMf5+IsYMcz{R<&Z^+=+B!H`D3 zpQEfMv^qDv8Ppc85URY=Z0+U#MoX6M!NHm7r0DO)2(3sWj}&$#xt)T1nLYcP+dpjO z0~c!3nb^`eukz}o`Qy+-Bf~+zS8qR(Wu3ln79cCj|MZ{n6}rFUA@tDn?qr{R=)3I4 z$okO7Pl?DzE0i5-JgZCeaoV0Mnsnz?2p;uFhP2De{(@ZR|M7RlKYRYcX#Zt5zqlX- XCMjH_l#m?r%M^jGrjbSs)FJY}wa}D( literal 0 HcmV?d00001 diff --git a/services/SettingsUI/images/btn_bar_new_dis.png b/services/SettingsUI/images/btn_bar_new_dis.png new file mode 100644 index 0000000000000000000000000000000000000000..af49c5af52731fb146af572791cd28382e524afb GIT binary patch literal 2980 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 literal 0 HcmV?d00001 diff --git a/services/SettingsUI/images/btn_bar_stop_nor.png b/services/SettingsUI/images/btn_bar_stop_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..c5cdc11ca8ea537497a1a794d79d40362f8659a9 GIT binary patch literal 3255 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 literal 0 HcmV?d00001 diff --git a/services/SettingsUI/images/web_frame_selected.png b/services/SettingsUI/images/web_frame_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..4470ca4a328ef0d26bbe8a92764757a7a217b2a7 GIT binary patch literal 17687 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 SOF&k3)ON6OvCgyFvg_YNdqf}r literal 0 HcmV?d00001 diff --git a/services/SettingsUI/images/web_shadow.png b/services/SettingsUI/images/web_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..f9018b0a6e15ae5670b67d580b890d1950636066 GIT binary patch literal 17700 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 literal 0 HcmV?d00001 diff --git a/services/SimpleUI/CMakeLists.txt b/services/SimpleUI/CMakeLists.txt index 96ceae1..0e0a5fd 100644 --- a/services/SimpleUI/CMakeLists.txt +++ b/services/SimpleUI/CMakeLists.txt @@ -50,8 +50,7 @@ include_directories(${CMAKE_SOURCE_DIR}/services/HistoryService) include_directories(${CMAKE_SOURCE_DIR}/services/MoreMenuUI) include_directories(${CMAKE_SOURCE_DIR}/services/HistoryUI) include_directories(${CMAKE_SOURCE_DIR}/services/MainUI) -#MERGE_ME -#include_directories(${CMAKE_SOURCE_DIR}/services/SettingsUI) +include_directories(${CMAKE_SOURCE_DIR}/services/SettingsUI) include_directories(${CMAKE_SOURCE_DIR}/services/TabUI) include_directories(${CMAKE_SOURCE_DIR}/services/PlatformInputManager) include_directories(${CMAKE_SOURCE_DIR}/services/SessionStorage) @@ -65,14 +64,12 @@ add_library(${PROJECT_NAME} SHARED ${SimpleUI_SRCS}) add_dependencies(${PROJECT_NAME} SimpleURI) add_dependencies(${PROJECT_NAME} StorageService) add_dependencies(${PROJECT_NAME} HistoryService) -#MERGE_ME -#add_dependencies(${PROJECT_NAME} MoreMenuUI) +add_dependencies(${PROJECT_NAME} MoreMenuUI) add_dependencies(${PROJECT_NAME} BookmarkManagerUI) add_dependencies(${PROJECT_NAME} MainUI) add_dependencies(${PROJECT_NAME} HistoryUI) -#MERGE_ME -#add_dependencies(${PROJECT_NAME} SettingsUI) add_dependencies(${PROJECT_NAME} TabUI) +add_dependencies(${PROJECT_NAME} SettingsUI) add_dependencies(${PROJECT_NAME} PlatformInputManager) add_dependencies(${PROJECT_NAME} SessionStorage) target_link_libraries(${PROJECT_NAME} SimpleURI) @@ -81,9 +78,8 @@ target_link_libraries(${PROJECT_NAME} HistoryService) target_link_libraries(${PROJECT_NAME} MoreMenuUI) target_link_libraries(${PROJECT_NAME} MainUI) target_link_libraries(${PROJECT_NAME} HistoryUI) -#MERGE_ME -#target_link_libraries(${PROJECT_NAME} SettingsUI) target_link_libraries(${PROJECT_NAME} TabUI) +target_link_libraries(${PROJECT_NAME} SettingsUI) target_link_libraries(${PROJECT_NAME} BookmarkManagerUI) target_link_libraries(${PROJECT_NAME} PlatformInputManager) target_link_libraries(${PROJECT_NAME} SessionStorage) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 0862b66..1a2ad29 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -62,9 +62,7 @@ SimpleUI::SimpleUI() , m_mainLayout(nullptr) , m_progressBar(nullptr) , m_popup(nullptr) -#if MERGE_ME , m_settings() -#endif , m_moreMenuUI() , m_tabUI() , m_bookmarkManagerUI() @@ -422,18 +420,10 @@ void SimpleUI::connectActions() m_showMoreMenu->triggered.connect(boost::bind(&SimpleUI::showMoreMenu, this)); // m_settingPointerMode->toggled.connect(boost::bind(&tizen_browser::services::PlatformInputManager::setPointerModeEnabled, m_platformInputManager.get(), _1)); -#if MERGE_ME m_settingPrivateBrowsing->toggled.connect(boost::bind(&SimpleUI::settingsPrivateModeSwitch, this, _1)); -#endif - //m_settingDeleteHistory->triggered.connect(boost::bind(&SimpleUI::settingsDeleteHistory, this)); - //m_settingDeleteData->triggered.connect(boost::bind(&SimpleUI::settingsDeleteData, this));; - //m_settingDeleteFavorite->triggered.connect(boost::bind(&SimpleUI::settingsDeleteFavorite, this));; -#if MERGE_ME -// m_settingPrivateBrowsing->toggled.connect(boost::bind(&SimpleUI::settingsPrivateModeSwitch, this, _1)); - m_settingDeleteHistory->triggered.connect(boost::bind(&SimpleUI::settingsDeleteHistory, this)); - m_settingDeleteData->triggered.connect(boost::bind(&SimpleUI::settingsDeleteData, this));; - m_settingDeleteFavorite->triggered.connect(boost::bind(&SimpleUI::settingsDeleteFavorite, this));; -#endif +// m_settingDeleteHistory->triggered.connect(boost::bind(&SimpleUI::settingsDeleteHistory, this)); +// m_settingDeleteData->triggered.connect(boost::bind(&SimpleUI::settingsDeleteData, this));; +// m_settingDeleteFavorite->triggered.connect(boost::bind(&SimpleUI::settingsDeleteFavorite, this));; } void SimpleUI::updateURIBarView() @@ -1081,7 +1071,6 @@ void SimpleUI::closeHistoryUI(const std::string& str) void SimpleUI::showSettingsUI(const std::string& str) { -#if MERGE_ME BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if(!m_settingsUI){ m_settingsUI = @@ -1100,15 +1089,12 @@ void SimpleUI::showSettingsUI(const std::string& str) m_settingsUI->show(m_window.get()); BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); } -#endif } void SimpleUI::closeSettingsUI(const std::string& str) { -#if MERGE_ME - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_settingsUI.reset(); -#endif + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_settingsUI.reset(); } void SimpleUI::showMoreMenu() diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index 713beda..31bd390 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -36,9 +36,7 @@ #include "AbstractWebEngine.h" #include "MoreMenuUI.h" #include "HistoryUI.h" -#if MERGE_ME #include "SettingsUI.h" -#endif #include "MainUI.h" #include "TabUI.h" #include "ButtonBar.h" @@ -296,9 +294,7 @@ private: std::shared_ptr m_bookmarkManagerUI; std::shared_ptr m_mainUI; std::shared_ptr m_historyUI; -#if MERGE_ME std::shared_ptr m_settingsUI; -#endif std::shared_ptr m_tabUI; std::shared_ptr m_zoomList; std::shared_ptr m_tabList; -- 2.7.4 From 4d76a2e6a9a867287c6a3ec5cadb0a7879417b68 Mon Sep 17 00:00:00 2001 From: Janusz Majnert Date: Fri, 7 Aug 2015 11:28:57 +0200 Subject: [PATCH 06/16] Minor style fixes and cleanup in BookmarkManagerUI [Issue#] https://bugs.tizen.org/jira/browse/TT-72 [Problem] Wrong indenting, wrong casting method, unused variable [Cause] n/a [Solution] Reformat code, fix casting and remove unused variable [Verify] Check that there are no build problems caused by this change Change-Id: Ic5d8b7b3d24322aa93111d2ab195ccceb5cca6e0 --- services/BookmarkManagerUI/AddNewFolderPopup.cpp | 9 ++++++--- services/BookmarkManagerUI/AddNewFolderPopup.h | 8 ++++++-- services/BookmarkManagerUI/BookmarkManagerUI.cpp | 21 +++++++++------------ 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/services/BookmarkManagerUI/AddNewFolderPopup.cpp b/services/BookmarkManagerUI/AddNewFolderPopup.cpp index 10b6114..941e16a 100644 --- a/services/BookmarkManagerUI/AddNewFolderPopup.cpp +++ b/services/BookmarkManagerUI/AddNewFolderPopup.cpp @@ -25,9 +25,12 @@ AddNewFolderPopup::AddNewFolderPopup(Evas_Object* main_layout) : { } -AddNewFolderPopup::AddNewFolderPopup(Evas_Object *main_layout, Evas_Object *content, const std::string& message, - const std::string& title, const std::string& okButtonText, - const std::string& cancelButtonText) : +AddNewFolderPopup::AddNewFolderPopup(Evas_Object *main_layout + , Evas_Object *content + , const std::string& message + , const std::string& title + , const std::string& okButtonText + , const std::string& cancelButtonText) : m_popup(nullptr), m_cancel_button(nullptr), m_editfield_entry(nullptr), diff --git a/services/BookmarkManagerUI/AddNewFolderPopup.h b/services/BookmarkManagerUI/AddNewFolderPopup.h index 4f2d6a5..5923be4 100644 --- a/services/BookmarkManagerUI/AddNewFolderPopup.h +++ b/services/BookmarkManagerUI/AddNewFolderPopup.h @@ -19,8 +19,12 @@ class AddNewFolderPopup{ public: AddNewFolderPopup(Evas_Object *main_layout); - AddNewFolderPopup(Evas_Object *main_layout, Evas_Object *content, const std::string& message, - const std::string& title, const std::string& okButtonText, const std::string& cancelButtonText); + AddNewFolderPopup(Evas_Object *main_layout + , Evas_Object *content + , const std::string& message + , const std::string& title + , const std::string& okButtonText + , const std::string& cancelButtonText); /* * These setters should be called before showing popup. diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.cpp b/services/BookmarkManagerUI/BookmarkManagerUI.cpp index a44f7bd..9a0be45 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.cpp +++ b/services/BookmarkManagerUI/BookmarkManagerUI.cpp @@ -127,9 +127,6 @@ void BookmarkManagerUI::showTopContent() elm_genlist_decorate_mode_set(m_genList, EINA_TRUE); evas_object_size_hint_weight_set(m_genList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); - evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/ - m_itemClass = elm_genlist_item_class_new(); m_itemClass->item_style = "topContent"; m_itemClass->func.text_get = &listItemTextGet; @@ -140,12 +137,12 @@ void BookmarkManagerUI::showTopContent() ItemData * id = new ItemData; id->m_bookmarkManager = this; Elm_Object_Item* elmItem = elm_genlist_item_append(m_genList, //genlist - m_itemClass, //item Class + m_itemClass, //item Class id, - nullptr, //parent item - ELM_GENLIST_ITEM_NONE, //item type + nullptr, //parent item + ELM_GENLIST_ITEM_NONE, //item type nullptr, - nullptr //data passed to above function + nullptr //data passed to above function ); id->e_item = elmItem; BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -352,7 +349,7 @@ char* BookmarkManagerUI::_grid_text_get(void *data, Evas_Object *, const char *p const char *part_name2 = "page_url"; static const int part_name1_len = strlen(part_name1); static const int part_name2_len = strlen(part_name2); - ItemData * id = static_cast(data); + if (!strncmp(part_name1, part, part_name1_len) && !itemData->item->getTittle().empty()) { return strdup(itemData->item->getTittle().c_str()); @@ -479,7 +476,7 @@ void BookmarkManagerUI::_thumbSelected(void * data, Evas_Object *, void *) { if (data != nullptr) { - BookmarkFolderItemData * itemData = reinterpret_cast(data); + BookmarkFolderItemData * itemData = static_cast(data); BROWSER_LOGD("Folder ID: %d" , itemData->item->getId()); itemData->bookmarkManagerUI->set_folder(itemData->item->getTittle().c_str()); itemData->bookmarkManagerUI->bookmarkFolderClicked(itemData->item->getId()); @@ -493,7 +490,7 @@ void BookmarkManagerUI::_bookmark_thumbSelected(void * data, Evas_Object *, void #if 0 if (data != nullptr) { - HistoryItemData * itemData = reinterpret_cast(data); + HistoryItemData * itemData = static_cast(data); itemData->bookmarkManagerUI->bookmarkClicked(itemData->item); } #endif @@ -524,7 +521,7 @@ void BookmarkManagerUI::focusItem(void*, Evas_Object*, void* event_info) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (event_info != nullptr) { - Elm_Object_Item *item = reinterpret_cast(event_info); + Elm_Object_Item *item = static_cast(event_info); elm_object_item_signal_emit( item, "mouse,in", "over2"); // selected manually @@ -537,7 +534,7 @@ void BookmarkManagerUI::unFocusItem(void*, Evas_Object*, void* event_info) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (event_info != nullptr) { - Elm_Object_Item *item = reinterpret_cast(event_info); + Elm_Object_Item *item = static_cast(event_info); elm_object_item_signal_emit( item, "mouse,out", "over2"); // unselected manually -- 2.7.4 From cf77c87d050d6f9e22da1fa5f0c861f890b49a17 Mon Sep 17 00:00:00 2001 From: Janusz Majnert Date: Fri, 7 Aug 2015 12:01:38 +0200 Subject: [PATCH 07/16] Refactored MoreMenuUI service [Issue#] https://bugs.tizen.org/jira/browse/TT-72 [Problem] Lots of style fixes, several fixes for build warnings [Cause] n/a [Solution] Reformat code, fix casting and remove unused variables [Verify] 1. Check that there are no build problems caused by this change 2. Run the browser and explore the More Menu to see if nothing's broken List of changes: * tabs -> spaces * proper indentation * other minor style fixes * removing unused variables' declarations * renaming a few class members to better express their use * replacing reinterpret_Cast with static_cast where appropriate * adding null-checks in callback functions * replacing shared_ptr copy-assignments with make_shared Change-Id: I6a65bbcf9efaef42db955c689ba81673cb12e1fa --- services/MoreMenuUI/AddBookmarkPopup.cpp | 114 +++---- services/MoreMenuUI/AddBookmarkPopup.h | 4 +- services/MoreMenuUI/MoreMenuUI.cpp | 520 +++++++++++++++++-------------- services/MoreMenuUI/MoreMenuUI.h | 15 +- services/MoreMenuUI/NewFolderPopup.cpp | 33 +- services/MoreMenuUI/NewFolderPopup.h | 7 +- 6 files changed, 384 insertions(+), 309 deletions(-) diff --git a/services/MoreMenuUI/AddBookmarkPopup.cpp b/services/MoreMenuUI/AddBookmarkPopup.cpp index fea26c4..a455589 100644 --- a/services/MoreMenuUI/AddBookmarkPopup.cpp +++ b/services/MoreMenuUI/AddBookmarkPopup.cpp @@ -34,9 +34,9 @@ typedef struct _BookmarkFolderItemData AddBookmarkPopup::AddBookmarkPopup(Evas_Object* main_layout): + m_mainLayout(main_layout), m_popup(nullptr), m_gengrid(nullptr), - m_mainLayout(main_layout), m_itemClass(nullptr) { } @@ -47,15 +47,15 @@ AddBookmarkPopup::~AddBookmarkPopup () void AddBookmarkPopup::show() { BROWSER_LOGD("[%s],", __func__); - bm_edjFilePath = EDJE_DIR; - bm_edjFilePath.append("MoreMenuUI/AddBookmarkPopup.edj"); - elm_theme_extension_add(0, bm_edjFilePath.c_str()); + m_edjFilePath = EDJE_DIR; + m_edjFilePath.append("MoreMenuUI/AddBookmarkPopup.edj"); + elm_theme_extension_add(0, m_edjFilePath.c_str()); m_popup = elm_layout_add(m_mainLayout); if (m_popup != nullptr) { elm_object_signal_emit(m_mainLayout, "elm,state,show", "elm"); - elm_layout_file_set(m_popup, bm_edjFilePath.c_str(), "bookmark_popup"); - BROWSER_LOGI("PATH: %s", bm_edjFilePath.c_str()); + elm_layout_file_set(m_popup, m_edjFilePath.c_str(), "bookmark_popup"); + BROWSER_LOGI("PATH: %s", m_edjFilePath.c_str()); m_gengrid = elm_gengrid_add(m_popup); @@ -175,7 +175,7 @@ char* AddBookmarkPopup::_grid_text_get(void *data, Evas_Object *, const char *pa static const char* part_name = "page_title"; static const int part_len = strlen(part_name); - BookmarkFolderItemData *itemData = reinterpret_cast(data); + BookmarkFolderItemData *itemData = static_cast(data); if (!strncmp(part, part_name, part_len)) { if(itemData->item) return strdup(itemData->item->getTittle().c_str()); @@ -186,17 +186,9 @@ char* AddBookmarkPopup::_grid_text_get(void *data, Evas_Object *, const char *pa const char* AddBookmarkPopup::getImageFileNameForType(int index, bool focused) { - static char* file_name = ""; - if (index == 1) - { - if (focused) - { - file_name = "btn_bar_new_foc.png"; - } - else - { - file_name = "btn_bar_new_nor.png"; - } + static const char *file_name = ""; + if (index == 1) { + file_name = focused ? "btn_bar_new_foc.png" : "btn_bar_new_nor.png"; } return file_name; } @@ -206,7 +198,7 @@ Evas_Object * AddBookmarkPopup::_grid_content_get(void *data, Evas_Object *obj, BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); if ((data != nullptr) && (obj != nullptr) && (part != nullptr)) { - BookmarkFolderItemData *itemData = reinterpret_cast(data); + BookmarkFolderItemData *itemData = static_cast(data); static const char* part1_name = "elm.thumbnail"; static const char* part2_name = "elm.thumbButton"; @@ -220,7 +212,7 @@ Evas_Object * AddBookmarkPopup::_grid_content_get(void *data, Evas_Object *obj, BROWSER_LOGD("%s:%d %s file=%s", __FILE__, __LINE__, __func__, file_name); if (thumb_nail != nullptr) { - elm_image_file_set(thumb_nail, itemData->addBookmarkPopup->bm_edjFilePath.c_str(), file_name); + elm_image_file_set(thumb_nail, itemData->addBookmarkPopup->m_edjFilePath.c_str(), file_name); } return thumb_nail; } @@ -251,7 +243,7 @@ void AddBookmarkPopup::__cb_mouse_in(void * data, Evas *, Evas_Object *obj, void if ((data != nullptr) && (obj != nullptr)) { elm_object_focus_set(obj, EINA_TRUE); - BookmarkFolderItemData *itemData = reinterpret_cast(data); + BookmarkFolderItemData *itemData = static_cast(data); const char* file_name = getImageFileNameForType(itemData->index, true); Elm_Object_Item * selected = itemData->addBookmarkPopup->m_map_bookmark_folder_views["new_folder_button"]; @@ -260,46 +252,54 @@ void AddBookmarkPopup::__cb_mouse_in(void * data, Evas *, Evas_Object *obj, void Evas_Object *thumb_nail = elm_object_item_part_content_get(selected, "elm.thumbnail"); if (thumb_nail != nullptr) { - elm_image_file_set(thumb_nail, itemData->addBookmarkPopup->bm_edjFilePath.c_str(), file_name); + elm_image_file_set(thumb_nail, itemData->addBookmarkPopup->m_edjFilePath.c_str(), file_name); } } } } -void AddBookmarkPopup::__cb_mouse_out(void * data, Evas *e, Evas_Object *obj, void *event_info) +void AddBookmarkPopup::__cb_mouse_out(void * data, Evas *, Evas_Object *obj, void* ) { BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); - BookmarkFolderItemData *itemData = reinterpret_cast(data); - elm_object_focus_set(obj, EINA_FALSE); - const char* file_name = getImageFileNameForType(itemData->index, false); - Elm_Object_Item * selected = itemData->addBookmarkPopup->m_map_bookmark_folder_views["new_folder_button"]; - Evas_Object *thumb_nail = elm_object_item_part_content_get(selected, "elm.thumbnail"); - elm_image_file_set(thumb_nail, itemData->addBookmarkPopup->bm_edjFilePath.c_str(), file_name); + if (data && obj){ + BookmarkFolderItemData *itemData = static_cast(data); + elm_object_focus_set(obj, EINA_FALSE); + const char* file_name = getImageFileNameForType(itemData->index, false); + Elm_Object_Item * selected = itemData->addBookmarkPopup->m_map_bookmark_folder_views["new_folder_button"]; + Evas_Object *thumb_nail = elm_object_item_part_content_get(selected, "elm.thumbnail"); + elm_image_file_set(thumb_nail, itemData->addBookmarkPopup->m_edjFilePath.c_str(), file_name); + } } -void AddBookmarkPopup::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) -{ - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - /*Elm_Object_Item * selected = reinterpret_cast(event_info); - HistoryItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); - AddBookmarkPopup * self = reinterpret_cast(data); - - self->bookmarkClicked(itemData->item);*/ -} +//void AddBookmarkPopup::_itemSelected(void* , Evas_Object* , void*) +//{ +// BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); +// if (data && event_info) { +// Elm_Object_Item * selected = static_cast(event_info); +// HistoryItemData * itemData = static_cast(elm_object_item_data_get(selected)); +// AddBookmarkPopup * self = static_cast(data); +// +// self->bookmarkClicked(itemData->item); +// } +//} -void AddBookmarkPopup::_newFolderButton(void * data, Evas_Object * /* obj */, void * /* event_info */) +void AddBookmarkPopup::_newFolderButton(void* data, Evas_Object*, void*) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - BookmarkFolderItemData * itemData = reinterpret_cast(data); - itemData->addBookmarkPopup->addNewFolderClicked(std::string()); + if (data) { + BookmarkFolderItemData * itemData = static_cast(data); + itemData->addBookmarkPopup->addNewFolderClicked(std::string()); + } } -void AddBookmarkPopup::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) +void AddBookmarkPopup::_thumbSelected(void* data, Evas_Object*, void*) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - BookmarkFolderItemData * itemData = reinterpret_cast(data); - itemData->addBookmarkPopup->folderSelected(itemData->item->getId()); + if (data) { + BookmarkFolderItemData * itemData = static_cast(data); + itemData->addBookmarkPopup->folderSelected(itemData->item->getId()); + } } void AddBookmarkPopup::clearItems() @@ -307,7 +307,7 @@ void AddBookmarkPopup::clearItems() BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); elm_gengrid_clear(m_gengrid); m_map_bookmark_folder_views.clear(); - elm_theme_extension_del(nullptr, bm_edjFilePath.c_str()); + elm_theme_extension_del(nullptr, m_edjFilePath.c_str()); elm_theme_full_flush(); elm_cache_all_flush(); } @@ -320,24 +320,28 @@ void AddBookmarkPopup::updateGengrid() m_map_bookmark_folder_views.clear(); } -void AddBookmarkPopup::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +void AddBookmarkPopup::focusItem(void*, Evas_Object*, void* event_info) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,in", "over2"); + if (event_info) { + Elm_Object_Item *item = static_cast(event_info); + elm_object_item_signal_emit(item, "mouse,in", "over2"); - // selected manually - elm_gengrid_item_selected_set(item, EINA_TRUE); + // selected manually + elm_gengrid_item_selected_set(item, EINA_TRUE); + } } -void AddBookmarkPopup::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +void AddBookmarkPopup::unFocusItem(void*, Evas_Object*, void* event_info) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,out", "over2"); + if (event_info) { + Elm_Object_Item *item = static_cast(event_info); + elm_object_item_signal_emit(item, "mouse,out", "over2"); - // unselected manually - elm_gengrid_item_selected_set(item, EINA_FALSE); + // unselected manually + elm_gengrid_item_selected_set(item, EINA_FALSE); + } } } diff --git a/services/MoreMenuUI/AddBookmarkPopup.h b/services/MoreMenuUI/AddBookmarkPopup.h index 62d86e7..bce7ada 100644 --- a/services/MoreMenuUI/AddBookmarkPopup.h +++ b/services/MoreMenuUI/AddBookmarkPopup.h @@ -39,7 +39,7 @@ public: private: static char* _grid_text_get(void *data, Evas_Object *, const char *part); static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); - static void _itemSelected(void * data, Evas_Object * obj, void * event_info); + //static void _itemSelected(void * data, Evas_Object * obj, void * event_info); static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); static void _newFolderButton(void *data, Evas_Object *obj, void *event_info); static Evas_Object* listItemContentGet(void *data, Evas_Object *obj, const char *part); @@ -56,7 +56,7 @@ private: Elm_Gengrid_Item_Class * m_itemClass; std::map m_map_bookmark_folder_views; - std::string bm_edjFilePath; + std::string m_edjFilePath; bool m_gengridSetup; static void __cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info); diff --git a/services/MoreMenuUI/MoreMenuUI.cpp b/services/MoreMenuUI/MoreMenuUI.cpp index 492f3ea..0a61323 100644 --- a/services/MoreMenuUI/MoreMenuUI.cpp +++ b/services/MoreMenuUI/MoreMenuUI.cpp @@ -40,8 +40,8 @@ struct ItemData{ typedef struct _MoreItemData { - ItemType item; - std::shared_ptr moreMenuUI; + ItemType item; + std::shared_ptr moreMenuUI; } MoreMenuItemData; MoreMenuUI::MoreMenuUI() @@ -50,8 +50,8 @@ MoreMenuUI::MoreMenuUI() , m_item_class(NULL) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - edjFilePath = EDJE_DIR; - edjFilePath.append("MoreMenuUI/MoreMenu.edj"); + m_edjFilePath = EDJE_DIR; + m_edjFilePath.append("MoreMenuUI/MoreMenu.edj"); } MoreMenuUI::~MoreMenuUI() @@ -62,9 +62,9 @@ void MoreMenuUI::show(Evas_Object* parent) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_parent = parent; - elm_theme_extension_add(NULL, edjFilePath.c_str()); + elm_theme_extension_add(NULL, m_edjFilePath.c_str()); m_mm_layout = elm_layout_add(parent); - elm_layout_file_set(m_mm_layout, edjFilePath.c_str(), "moremenu-layout"); + 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_show(m_mm_layout); @@ -101,7 +101,7 @@ void MoreMenuUI::show(Evas_Object* parent) void MoreMenuUI::showCurrentTab(const std::shared_ptr item) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(NULL, edjFilePath.c_str()); + elm_theme_extension_add(NULL, m_edjFilePath.c_str()); m_genList = elm_genlist_add(m_mm_layout); elm_object_part_content_set(m_mm_layout, "elm.swallow.genlist", m_genList); elm_genlist_homogeneous_set(m_genList, EINA_FALSE); @@ -125,12 +125,12 @@ void MoreMenuUI::showCurrentTab(const std::shared_ptrm_moreMenu = this; id->h_item = item ? item.get() : NULL; Elm_Object_Item* elmItem = elm_genlist_item_append(m_genList, //genlist - m_itemClass, //item Class + m_itemClass, //item Class id, - NULL, //parent item - ELM_GENLIST_ITEM_NONE, //item type + NULL, //parent item + ELM_GENLIST_ITEM_NONE, //item type NULL, - NULL //data passed to above function + NULL //data passed to above function ); id->e_item = elmItem; BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -139,114 +139,133 @@ void MoreMenuUI::showCurrentTab(const std::shared_ptr(data); - if(!strcmp(part, "favicon") && id->h_item && id->h_item->getFavIcon()) - { - // Currently favicon is not getting fetched from the engine, so we are showing Google's favicon by default. - Evas_Object* thumb_nail = elm_icon_add(obj); - const char* file_name = "favicon.png"; - elm_image_file_set(thumb_nail, id->m_moreMenu->edjFilePath.c_str(), file_name); - return thumb_nail; - //return tizen_browser::tools::EflTools::getEvasImage(id->h_item->getFavIcon(), obj); - } - else if(!strcmp(part, "star_click")) - { - Evas_Object *star_click = elm_button_add(obj); - elm_object_style_set(star_click, "hidden_button"); - evas_object_smart_callback_add(star_click, "clicked", MoreMenuUI::star_clicked_cb, id); - return star_click; - } - else if(!strcmp(part, "close_click")) - { - Evas_Object *close_click = elm_button_add(obj); - elm_object_style_set(close_click, "hidden_button"); - evas_object_smart_callback_add(close_click, "clicked", MoreMenuUI::close_clicked_cb, id); - return close_click; + if (data && obj && part) { + ItemData * id = static_cast(data); + const char *part_name1 = "favicon"; + static const int part_name1_len = strlen(part_name1); + const char *part_name2 = "star_click"; + static const int part_name2_len =strlen(part_name2); + const char *part_name3 = "close_click"; + static const int part_name3_len = strlen(part_name3); + + if (!strncmp(part_name1, part, part_name1_len) && id->h_item && id->h_item->getFavIcon()) { + // Currently favicon is not getting fetched from the engine, + // so we are showing Google's favicon by default. + Evas_Object *thumb_nail = elm_icon_add(obj); + const char *file_name = "favicon.png"; + elm_image_file_set(thumb_nail, id->m_moreMenu->m_edjFilePath.c_str(), file_name); + return thumb_nail; + //return tizen_browser::tools::EflTools::getEvasImage(id->h_item->getFavIcon(), obj); + } + + if (!strncmp(part_name2, part, part_name2_len)) { + Evas_Object *star_click = elm_button_add(obj); + elm_object_style_set(star_click, "hidden_button"); + evas_object_smart_callback_add(star_click, "clicked", MoreMenuUI::star_clicked_cb, id); + return star_click; + } + + if (!strncmp(part_name3, part, part_name3_len)) { + Evas_Object *close_click = elm_button_add(obj); + elm_object_style_set(close_click, "hidden_button"); + evas_object_smart_callback_add(close_click, "clicked", MoreMenuUI::close_clicked_cb, id); + return close_click; + } } return NULL; } -void MoreMenuUI::item_clicked_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -} - -void MoreMenuUI::star_clicked_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) +void MoreMenuUI::star_clicked_cb(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData * id = static_cast(data); - id->m_moreMenu->AddBookmarkPopupCalled(); + if (data) { + ItemData * id = static_cast(data); + id->m_moreMenu->AddBookmarkPopupCalled(); + } } void MoreMenuUI::AddBookmarkPopupCalled() -{ //m_map_bookmark_folder_list.clear(); - popup = std::shared_ptr (new AddBookmarkPopup(m_mm_layout)); - popup->show(); - popup->addBookmarkFolderItems(m_map_bookmark_folder_list); - popup->folderSelected.disconnect_all_slots(); - popup->folderSelected.connect(boost::bind(&MoreMenuUI::addToBookmarks, this, _1)); - popup->addNewFolderClicked.disconnect_all_slots(); - popup->addNewFolderClicked.connect(boost::bind(&MoreMenuUI::newFolderPopup, this,_1)); +{ + m_add_bookmark_popup = std::make_shared(m_mm_layout); + m_add_bookmark_popup->show(); + m_add_bookmark_popup->addBookmarkFolderItems(m_map_bookmark_folder_list); + m_add_bookmark_popup->folderSelected.disconnect_all_slots(); + m_add_bookmark_popup->folderSelected.connect(boost::bind(&MoreMenuUI::addToBookmarks, this, _1)); + m_add_bookmark_popup->addNewFolderClicked.disconnect_all_slots(); + m_add_bookmark_popup->addNewFolderClicked.connect(boost::bind(&MoreMenuUI::newFolderPopup, this,_1)); } void MoreMenuUI::newFolderPopup(std::string) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_popup = std::shared_ptr (new NewFolderPopup(m_mm_layout, NULL,"Add New Folder for adding to Bookmark","New Folder","Add to bookmark","Cancel")); - m_popup->on_ok.disconnect_all_slots(); - m_popup->on_ok.connect(boost::bind(&MoreMenuUI::NewFolderCreate, this, _1)); - m_popup->on_cancel.disconnect_all_slots(); - m_popup->on_cancel.connect(boost::bind(&MoreMenuUI::CancelClicked, this, _1)); - popup->hide(); - m_popup->show(); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_new_folder_popup = + std::make_shared(m_mm_layout + , nullptr + , "Add New Folder for adding to Bookmark" + , "New Folder" + , "Add to bookmark" + , "Cancel"); + m_new_folder_popup->on_ok.disconnect_all_slots(); + m_new_folder_popup->on_ok.connect(boost::bind(&MoreMenuUI::NewFolderCreate, this, _1)); + m_new_folder_popup->on_cancel.disconnect_all_slots(); + m_new_folder_popup->on_cancel.connect(boost::bind(&MoreMenuUI::CancelClicked, this, _1)); + m_add_bookmark_popup->hide(); + m_new_folder_popup->show(); } -void MoreMenuUI::NewFolderCreate(Evas_Object * popup_content) +void MoreMenuUI::NewFolderCreate(Evas_Object* popup_content) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_folderName = elm_entry_entry_get(popup_content); - BookmarkFolderCreated(m_folderName.c_str(), 0,0); - m_popup->hide(); + if (popup_content) { + m_folderName = elm_entry_entry_get(popup_content); + BookmarkFolderCreated(m_folderName.c_str(), 0,0); + m_new_folder_popup->hide(); + } } -void MoreMenuUI::CancelClicked(Evas_Object * popup) +void MoreMenuUI::CancelClicked(Evas_Object*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_popup->hide(); + m_new_folder_popup->hide(); } void MoreMenuUI::addToBookmarks(int folder_id) { AddBookmarkInput(folder_id); BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - popup->hide(); - popup.reset(); + m_add_bookmark_popup->hide(); + m_add_bookmark_popup.reset(); } -void MoreMenuUI::close_clicked_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) +void MoreMenuUI::close_clicked_cb(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData * id = static_cast(data); - id->m_moreMenu->closeMoreMenuClicked(std::string()); - id->m_moreMenu->clearItems(); + if (data) { + ItemData * id = static_cast(data); + id->m_moreMenu->closeMoreMenuClicked(std::string()); + id->m_moreMenu->clearItems(); + } } -char* MoreMenuUI::listItemTextGet(void* data, Evas_Object* /* obj */, const char* part) +char* MoreMenuUI::listItemTextGet(void* data, Evas_Object*, const char* part) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData * id = static_cast(data); - if(!strcmp(part, "webpage_title")) - { - if(!id->h_item) - return strdup("New Tab"); - if(!id->h_item->getTitle().empty()){ + if (data && part) { + ItemData *id = static_cast(data); + const char *part_name1 = "webpage_title"; + static const int part_name1_len = strlen(part_name1); + const char *part_name2 = "webpage_url"; + static const int part_name2_len = strlen(part_name2); + + if (!strncmp(part_name1, part, part_name1_len)) { + if (!id->h_item) { + return strdup("New Tab"); + } return strdup(id->h_item->getTitle().c_str()); } - } - else if(!strcmp(part, "webpage_url")) - { - if(!id->h_item) - return strdup(""); - if(!id->h_item->getUrl().empty()){ + + if (!strncmp(part_name2, part, part_name2_len)) { + if(!id->h_item) + return strdup(""); return strdup(id->h_item->getUrl().c_str()); } } @@ -255,166 +274,194 @@ char* MoreMenuUI::listItemTextGet(void* data, Evas_Object* /* obj */, const char 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, "elm.swallow.genlist")); - evas_object_hide(m_mm_layout); + evas_object_hide(elm_layout_content_get(m_mm_layout, "elm.swallow.grid")); + evas_object_hide(elm_layout_content_get(m_mm_layout, "elm.swallow.genlist")); + evas_object_hide(m_mm_layout); } void MoreMenuUI::addItems() { - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - for (size_t i = 0; i < 10; i++) { - MoreMenuItemData *itemData = new MoreMenuItemData(); - itemData->item = static_cast(i);; - itemData->moreMenuUI = std::shared_ptr(this); - Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, NULL, this); - 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__); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + for (size_t i = 0; i < 10; i++) { + MoreMenuItemData *itemData = new MoreMenuItemData(); + itemData->item = static_cast(i);; + itemData->moreMenuUI = std::shared_ptr(this); + Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, NULL, this); + 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__); } -char* MoreMenuUI::_grid_text_get(void *data, Evas_Object *obj, const char *part) +char* MoreMenuUI::_grid_text_get(void* data, Evas_Object*, const char* part) { - MoreMenuItemData *itemData = reinterpret_cast(data); - - BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); - if (!strcmp(part, "menu_label")) { - const char* item_name = NULL; - switch(itemData->item) { - case READER_MODE: - item_name = "Reader mode"; break; - case BOOKMARK_MANAGER: - item_name = "Bookmark manager"; break; - case HISTORY: - item_name = "History"; break; - case SCREEN_ZOOM: - item_name = "Screen zoom"; break; - case START_MINIBROWSER: - item_name = "Start minibrowser"; break; - case FOCUS_MODE: - item_name = "Focus mode"; break; - case VIEW_MOBILE_WEB: - item_name = "View mobile web"; break; - case SHARE: - item_name = "Share"; break; - case SETTINGS: - item_name = "Settings"; break; - case EXIT_BROWSER: - item_name = "Exit browser"; break; - default: - item_name = ""; - } - return strdup(item_name); - } - return NULL; + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + if (data && part) { + MoreMenuItemData *itemData = static_cast(data); + const char *part_name = "menu_label"; + static const int part_name_len = strlen(part_name); + + if (!strncmp(part_name, part, part_name_len)) { + const char* item_name = NULL; + switch (itemData->item) { + case READER_MODE: + item_name = "Reader mode"; + break; + case BOOKMARK_MANAGER: + item_name = "Bookmark manager"; + break; + case HISTORY: + item_name = "History"; + break; + case SCREEN_ZOOM: + item_name = "Screen zoom"; + break; + case START_MINIBROWSER: + item_name = "Start minibrowser"; + break; + case FOCUS_MODE: + item_name = "Focus mode"; + break; + case VIEW_MOBILE_WEB: + item_name = "View mobile web"; + break; + case SHARE: + item_name = "Share"; + break; + case SETTINGS: + item_name = "Settings"; + break; + case EXIT_BROWSER: + item_name = "Exit browser"; + break; + default: + item_name = ""; + } + return strdup(item_name); + } + } + return NULL; } static const char* getImageFileNameForType(ItemType type, bool focused) { - const char* file_name = NULL; - switch(type) { - case READER_MODE: - file_name = focused ? "ic_more_readermode_foc.png" : "ic_more_readermode_nor.png"; break; - case BOOKMARK_MANAGER: - file_name = focused ? "ic_more_bookmark_foc.png" : "ic_more_bookmark_nor.png"; break; - case HISTORY: - file_name = focused ? "ic_more_history_foc.png" : "ic_more_history_nor.png"; break; - case SCREEN_ZOOM: - file_name = focused ? "ic_more_zoom_foc.png" : "ic_more_zoom_nor.png"; break; - case START_MINIBROWSER: - file_name = focused ? "ic_more_minibrowser_foc.png" : "ic_more_minibrowser_nor.png"; break; - case FOCUS_MODE: - file_name = focused ? "ic_more_focusmode_foc.png" : "ic_more_focusmode_nor.png"; break; - case VIEW_MOBILE_WEB: - file_name = focused ? "ic_more_mobileview_foc.png" : "ic_more_mobileview_nor.png"; break; - case SHARE: - file_name = focused ? "ic_more_share_foc.png" : "ic_more_share_nor.png"; break; - case SETTINGS: - file_name = focused ? "ic_more_setting_foc.png" : "ic_more_setting_nor.png"; break; - case EXIT_BROWSER: - file_name = focused ? "ic_more_exit_foc.png" : "ic_more_exit_nor.png"; break; - default: - file_name = ""; - } - return file_name; + const char* file_name = NULL; + switch (type) { + case READER_MODE: + file_name = focused ? "ic_more_readermode_foc.png" : "ic_more_readermode_nor.png"; + break; + case BOOKMARK_MANAGER: + file_name = focused ? "ic_more_bookmark_foc.png" : "ic_more_bookmark_nor.png"; + break; + case HISTORY: + file_name = focused ? "ic_more_history_foc.png" : "ic_more_history_nor.png"; + break; + case SCREEN_ZOOM: + file_name = focused ? "ic_more_zoom_foc.png" : "ic_more_zoom_nor.png"; + break; + case START_MINIBROWSER: + file_name = focused ? "ic_more_minibrowser_foc.png" : "ic_more_minibrowser_nor.png"; + break; + case FOCUS_MODE: + file_name = focused ? "ic_more_focusmode_foc.png" : "ic_more_focusmode_nor.png"; + break; + case VIEW_MOBILE_WEB: + file_name = focused ? "ic_more_mobileview_foc.png" : "ic_more_mobileview_nor.png"; + break; + case SHARE: + file_name = focused ? "ic_more_share_foc.png" : "ic_more_share_nor.png"; + break; + case SETTINGS: + file_name = focused ? "ic_more_setting_foc.png" : "ic_more_setting_nor.png"; + break; + case EXIT_BROWSER: + file_name = focused ? "ic_more_exit_foc.png" : "ic_more_exit_nor.png"; + break; + default: + file_name = ""; + } + return file_name; } Evas_Object * MoreMenuUI::_grid_content_get(void *data, Evas_Object *obj, const char *part) { BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); - MoreMenuItemData *itemData = reinterpret_cast(data); + if (data && obj && part) { + MoreMenuItemData *itemData = static_cast(data); + const char *part_name1 = "thumbnail_item"; + static const int part_name1_len = strlen(part_name1); + const char *part_name2 = "thumbbutton_item"; + static const int part_name2_len = strlen(part_name2); + + if (!strncmp(part_name1, part, part_name1_len)) { + Evas_Object* thumb_nail = elm_icon_add(obj); + const char* file_name = getImageFileNameForType(itemData->item, false); + elm_image_file_set(thumb_nail, itemData->moreMenuUI->m_edjFilePath.c_str(), file_name); + return thumb_nail; + } - if (!strcmp(part, "thumbnail_item")) { - Evas_Object* thumb_nail = elm_icon_add(obj); - const char* file_name = getImageFileNameForType(itemData->item, false); - elm_image_file_set(thumb_nail, itemData->moreMenuUI->edjFilePath.c_str(), file_name); - return thumb_nail; - } - else if (!strcmp(part, "thumbbutton_item")) { - Evas_Object *thumbButton = elm_button_add(obj); - elm_object_style_set(thumbButton, "clickButton"); - evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MoreMenuUI::_thumbSelected, data); - evas_object_event_callback_add(thumbButton, EVAS_CALLBACK_MOUSE_IN, __cb_mouse_in, data); - evas_object_event_callback_add(thumbButton, EVAS_CALLBACK_MOUSE_OUT, __cb_mouse_out, data); - return thumbButton; + if (!strncmp(part_name2, part, part_name2_len)) { + Evas_Object *thumbButton = elm_button_add(obj); + elm_object_style_set(thumbButton, "clickButton"); + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MoreMenuUI::_thumbSelected, data); + evas_object_event_callback_add(thumbButton, EVAS_CALLBACK_MOUSE_IN, __cb_mouse_in, data); + evas_object_event_callback_add(thumbButton, EVAS_CALLBACK_MOUSE_OUT, __cb_mouse_out, data); + return thumbButton; + } } return NULL; } -void MoreMenuUI::__cb_mouse_in(void * data, Evas *e, Evas_Object *obj, void *event_info) +void MoreMenuUI::__cb_mouse_in(void * data, Evas *, Evas_Object *obj, void *) { BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); - elm_object_focus_set(obj, EINA_TRUE); - MoreMenuItemData *itemData = reinterpret_cast(data); - - const char* file_name = getImageFileNameForType(itemData->item, true); - Elm_Object_Item * selected = itemData->moreMenuUI->m_map_menu_views[itemData->item]; - Evas_Object *thumb_nail = elm_object_item_part_content_get(selected, "thumbnail_item"); - elm_image_file_set(thumb_nail, itemData->moreMenuUI->edjFilePath.c_str(), file_name); -} - -void MoreMenuUI::__cb_mouse_out(void * data, Evas *e, Evas_Object *obj, void *event_info) -{ - BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); - MoreMenuItemData *itemData = reinterpret_cast(data); - elm_object_focus_set(obj, EINA_FALSE); - const char* file_name = getImageFileNameForType(itemData->item, false); - Elm_Object_Item * selected = itemData->moreMenuUI->m_map_menu_views[itemData->item]; - Evas_Object *thumb_nail = elm_object_item_part_content_get(selected, "thumbnail_item"); - elm_image_file_set(thumb_nail, itemData->moreMenuUI->edjFilePath.c_str(), file_name); + if (data && obj) { + elm_object_focus_set(obj, EINA_TRUE); + + MoreMenuItemData *itemData = static_cast(data); + const char *file_name = getImageFileNameForType(itemData->item, true); + Elm_Object_Item *selected = itemData->moreMenuUI->m_map_menu_views[itemData->item]; + Evas_Object *thumb_nail = elm_object_item_part_content_get(selected, "thumbnail_item"); + elm_image_file_set(thumb_nail, itemData->moreMenuUI->m_edjFilePath.c_str(), file_name); + } } -void MoreMenuUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) +void MoreMenuUI::__cb_mouse_out(void * data, Evas *, Evas_Object *obj, void *) { BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); + if (data && obj) { + elm_object_focus_set(obj, EINA_FALSE); + + MoreMenuItemData *itemData = static_cast(data); + const char *file_name = getImageFileNameForType(itemData->item, false); + Elm_Object_Item *selected = itemData->moreMenuUI->m_map_menu_views[itemData->item]; + Evas_Object *thumb_nail = elm_object_item_part_content_get(selected, "thumbnail_item"); + elm_image_file_set(thumb_nail, itemData->moreMenuUI->m_edjFilePath.c_str(), file_name); + } } -void MoreMenuUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) +void MoreMenuUI::_thumbSelected(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); - MoreMenuItemData *itemData = reinterpret_cast(data); - switch(itemData->item) { - case READER_MODE: - break; - case BOOKMARK_MANAGER: - break; - case HISTORY: - itemData->moreMenuUI->historyUIClicked(std::string()); break; - case SCREEN_ZOOM: - break; - case START_MINIBROWSER: - break; - case FOCUS_MODE: - break; - case VIEW_MOBILE_WEB: - break; - case SHARE: - break; - case SETTINGS: - itemData->moreMenuUI->settingsClicked(std::string()); break; - case EXIT_BROWSER: - break; + if (data) { + MoreMenuItemData *itemData = static_cast(data); + switch (itemData->item) { + case HISTORY: + itemData->moreMenuUI->historyUIClicked(std::string()); + break; + case SETTINGS: + itemData->moreMenuUI->settingsClicked(std::string()); + break; + case READER_MODE: + case BOOKMARK_MANAGER: + case SCREEN_ZOOM: + case START_MINIBROWSER: + case FOCUS_MODE: + case VIEW_MOBILE_WEB: + case SHARE: + case EXIT_BROWSER: + break; + } } } @@ -431,30 +478,39 @@ void MoreMenuUI::clearItems() elm_genlist_clear(m_genList); m_map_menu_views.clear(); m_map_bookmark_folder_list.clear(); - elm_theme_extension_del(NULL, edjFilePath.c_str()); + elm_theme_extension_del(NULL, m_edjFilePath.c_str()); elm_theme_full_flush(); elm_cache_all_flush(); } -void MoreMenuUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,in", "over2"); - - // selected manually - elm_gengrid_item_selected_set(item, EINA_TRUE); -} - -void MoreMenuUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,out", "over2"); - - // unselected manually - elm_gengrid_item_selected_set(item, EINA_FALSE); -} +//void MoreMenuUI::focusItem(void*, Evas_Object*, void* event_info) +//{ +// BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); +// if (event_info) { +// Elm_Object_Item *item = static_cast(event_info); +// elm_object_item_signal_emit(item, "mouse,in", "over2"); +// +// // selected manually +// elm_gengrid_item_selected_set(item, EINA_TRUE); +// } +//} +// +//void MoreMenuUI::unFocusItem(void*, Evas_Object*, void* event_info) +//{ +// BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); +// if (event_info) { +// Elm_Object_Item *item = static_cast(event_info); +// elm_object_item_signal_emit( item, "mouse,out", "over2"); +// +// // unselected manually +// elm_gengrid_item_selected_set(item, EINA_FALSE); +// } +//} +// +//void MoreMenuUI::_itemSelected(void*, Evas_Object*, void *) +//{ +// BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); +//} } } diff --git a/services/MoreMenuUI/MoreMenuUI.h b/services/MoreMenuUI/MoreMenuUI.h index 7bff048..7f0812b 100644 --- a/services/MoreMenuUI/MoreMenuUI.h +++ b/services/MoreMenuUI/MoreMenuUI.h @@ -18,6 +18,7 @@ #define MOREMENUUI_H #include +#include #include #include "AbstractUIComponent.h" @@ -73,7 +74,6 @@ public: private: 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 _itemSelected(void * data, Evas_Object * obj, void * event_info); static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); static Evas_Object* listItemContentGet(void *data, Evas_Object *obj, const char *part); @@ -85,7 +85,7 @@ private: void AddBookmarkPopupCalled(); void addToBookmarks(int folder_id); - static void item_clicked_cb(void *data, Evas_Object *obj, void *event_info); + static void star_clicked_cb(void *data, Evas_Object *obj, void *event_info); static void close_clicked_cb(void *data, Evas_Object *obj, void *event_info); @@ -94,21 +94,22 @@ private: private: Evas_Object *m_genList; - std::shared_ptr m_popup; + std::shared_ptr m_new_folder_popup; Evas_Object *m_mm_layout; - std::shared_ptr popup; + std::shared_ptr m_add_bookmark_popup; Elm_Genlist_Item_Class *m_itemClass; Evas_Object *m_gengrid; Evas_Object *m_parent; Elm_Gengrid_Item_Class * m_item_class; std::map m_map_menu_views; std::vector > m_map_bookmark_folder_list; - std::string edjFilePath; + std::string m_edjFilePath; std::string m_folderName; bool m_gengridSetup; - static void focusItem(void* data, Evas_Object* obj, void* event_info); - static void unFocusItem(void* data, Evas_Object* obj, void* event_info); + //static void focusItem(void* data, Evas_Object* obj, void* event_info); + //static void unFocusItem(void* data, Evas_Object* obj, void* event_info); + //static void _itemSelected(void * data, Evas_Object * obj, void * event_info); }; } diff --git a/services/MoreMenuUI/NewFolderPopup.cpp b/services/MoreMenuUI/NewFolderPopup.cpp index 32b8f69..ca5ef0f 100644 --- a/services/MoreMenuUI/NewFolderPopup.cpp +++ b/services/MoreMenuUI/NewFolderPopup.cpp @@ -28,21 +28,26 @@ namespace tizen_browser{ namespace base_ui{ NewFolderPopup::NewFolderPopup(Evas_Object* main_layout) : - m_popup(NULL), - m_content(NULL), + m_popup(nullptr), + m_content(nullptr), m_mainLayout(main_layout) { } -NewFolderPopup::NewFolderPopup(Evas_Object *main_layout, Evas_Object *content, const char *message, char* title, char* okButtonText, char* cancelButtonText) : - m_popup(NULL), - m_mainLayout(main_layout), +NewFolderPopup::NewFolderPopup(Evas_Object *main_layout + , Evas_Object *content + , const char *message + , const char *title + , const char *okButtonText + , const char *cancelButtonText) : + m_popup(nullptr), m_content(content), m_message(message), m_title(title), m_okButtonText(okButtonText), - m_cancelButtonText(cancelButtonText) + m_cancelButtonText(cancelButtonText), + m_mainLayout(main_layout) { } @@ -153,17 +158,21 @@ void NewFolderPopup::hide() elm_object_signal_emit(m_mainLayout, "elm,state,hide", "elm"); } -void NewFolderPopup::popup_ok_cb(void *data, Evas_Object *btn, void*) +void NewFolderPopup::popup_ok_cb(void *data, Evas_Object*, void*) { BROWSER_LOGD("[%s],", __func__); - NewFolderPopup *ownPopup = static_cast(data); - ownPopup->on_ok(ownPopup->m_editfield_entry); + if (data) { + NewFolderPopup *ownPopup = static_cast(data); + ownPopup->on_ok(ownPopup->m_editfield_entry); + } } -void NewFolderPopup::popup_cancel_cb(void *data, Evas_Object *btn, void*) +void NewFolderPopup::popup_cancel_cb(void *data, Evas_Object*, void*) { BROWSER_LOGD("[%s],", __func__); - NewFolderPopup *ownPopup = static_cast(data); - ownPopup->on_cancel(ownPopup->m_editfield_entry); + if (data) { + NewFolderPopup *ownPopup = static_cast(data); + ownPopup->on_cancel(ownPopup->m_editfield_entry); + } } } diff --git a/services/MoreMenuUI/NewFolderPopup.h b/services/MoreMenuUI/NewFolderPopup.h index 18edd11..e0fd051 100644 --- a/services/MoreMenuUI/NewFolderPopup.h +++ b/services/MoreMenuUI/NewFolderPopup.h @@ -17,7 +17,12 @@ class NewFolderPopup{ public: NewFolderPopup(Evas_Object *main_layout); - NewFolderPopup(Evas_Object *main_layout, Evas_Object *content, const char *message, char *title, char* okButtonText, char* cancelButtonText); + NewFolderPopup(Evas_Object *main_layout + , Evas_Object *content + , const char *message + , const char *title + , const char *okButtonText + , const char *cancelButtonText); /** * Theese setters should be called before showing popup. -- 2.7.4 From bcf6cf4832f214b8f5327618ab967a0fc2176f51 Mon Sep 17 00:00:00 2001 From: Janusz Majnert Date: Fri, 7 Aug 2015 19:01:24 +0200 Subject: [PATCH 08/16] Refactored TabUI service [Issue#] https://bugs.tizen.org/jira/browse/TT-72 [Problem] Lots of style fixes, several fixes for build warnings [Cause] n/a [Solution] Reformat code, fix casting and remove unused variables [Verify] 1. Check that there are no build problems caused by this change 2. Run the browser and explore the tab functionality to see if nothing's broken List of changes: * tabs -> spaces * proper indentation * other minor style fixes * removing unused variables' declarations * renaming a few class members to better express their use * replacing reinterpret_cast with static_cast where appropriate * adding null-checks in callback functions Change-Id: Ib2a5731683c99aa5b89acf9f00417a41d207c579 --- services/TabUI/TabUI.cpp | 522 +++++++++++++++++++++++------------------------ services/TabUI/TabUI.h | 5 +- 2 files changed, 257 insertions(+), 270 deletions(-) diff --git a/services/TabUI/TabUI.cpp b/services/TabUI/TabUI.cpp index 5646f26..d004b0b 100644 --- a/services/TabUI/TabUI.cpp +++ b/services/TabUI/TabUI.cpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include #include "TabUI.h" @@ -25,7 +27,6 @@ #include "Tools/EflTools.h" #include "../Tools/BrowserImage.h" -#define efl_scale (elm_config_scale_get() / elm_app_base_scale_get()) namespace tizen_browser{ namespace base_ui{ @@ -34,28 +35,29 @@ EXPORT_SERVICE(TabUI, "org.tizen.browser.tabui") typedef struct _TabItemData { - std::shared_ptr item; - std::shared_ptr tabUI; + std::shared_ptr item; + std::shared_ptr tabUI; } TabItemData; -struct ItemData{ - tizen_browser::base_ui::TabUI* tabUI; - Elm_Object_Item * e_item; +struct ItemData +{ + tizen_browser::base_ui::TabUI* tabUI; + Elm_Object_Item * e_item; }; TabUI::TabUI() - : m_gengrid(NULL) - , m_tab_layout(NULL) - , m_genListTop(NULL) - , m_genListActionBar(NULL) - , m_parent(NULL) - , m_itemClassActionBar(NULL) - , m_itemClassTop(NULL) - , m_item_class(NULL) + : m_tab_layout(nullptr) + , m_genListActionBar(nullptr) + , m_itemClassActionBar(nullptr) + , m_genListTop(nullptr) + , m_itemClassTop(nullptr) + , m_gengrid(nullptr) + , m_parent(nullptr) + , m_item_class(nullptr) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - edjFilePath = EDJE_DIR; - edjFilePath.append("TabUI/TabUI.edj"); + m_edjFilePath = EDJE_DIR; + m_edjFilePath.append("TabUI/TabUI.edj"); } TabUI::~TabUI() @@ -67,9 +69,9 @@ void TabUI::show(Evas_Object* parent) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); //m_parent = p; - elm_theme_extension_add(NULL, edjFilePath.c_str()); + elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); m_tab_layout = elm_layout_add(parent); - elm_layout_file_set(m_tab_layout, edjFilePath.c_str(), "tab-layout"); + 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); evas_object_show(m_tab_layout); @@ -80,31 +82,32 @@ void TabUI::show(Evas_Object* parent) m_gengrid = elm_gengrid_add(m_tab_layout); elm_object_part_content_set(m_tab_layout, "tab_gengird", m_gengrid); - evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, NULL); - evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, NULL); + evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, nullptr); + evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, nullptr); evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this); - if (!m_item_class) { - m_item_class = elm_gengrid_item_class_new(); - m_item_class->item_style = "tab_item"; - m_item_class->func.text_get = _grid_text_get; - m_item_class->func.content_get = _tab_grid_content_get; - m_item_class->func.state_get = NULL; - m_item_class->func.del = NULL; - } - - M_ASSERT(m_parent); - elm_gengrid_align_set(m_gengrid, 0, 0); - elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE); - elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE); - elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE); - elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); - elm_scroller_page_size_set(m_gengrid, 0, 327); - - evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); + if (!m_item_class) { + m_item_class = elm_gengrid_item_class_new(); + m_item_class->item_style = "tab_item"; + m_item_class->func.text_get = _grid_text_get; + m_item_class->func.content_get = _tab_grid_content_get; + m_item_class->func.state_get = nullptr; + m_item_class->func.del = nullptr; + } + M_ASSERT(m_parent); + elm_gengrid_align_set(m_gengrid, 0, 0); + elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE); + elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE); + elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE); + elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_scroller_page_size_set(m_gengrid, 0, 327); + + evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); + + double efl_scale = elm_config_scale_get() / elm_app_base_scale_get(); elm_gengrid_item_size_set(m_gengrid, 364 * efl_scale, 320 * efl_scale); } @@ -112,7 +115,7 @@ void TabUI::show(Evas_Object* parent) void TabUI::showActionBar() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(NULL, edjFilePath.c_str()); + elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); m_genListActionBar = elm_genlist_add(m_tab_layout); elm_object_part_content_set(m_tab_layout, "action_bar_genlist", m_genListActionBar); elm_genlist_homogeneous_set(m_genListActionBar, EINA_FALSE); @@ -122,124 +125,118 @@ void TabUI::showActionBar() elm_genlist_decorate_mode_set(m_genListActionBar, EINA_TRUE); evas_object_size_hint_weight_set(m_genListActionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - // evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); - // evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, NULL);*/ +// evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); +// evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/ m_itemClassActionBar = elm_genlist_item_class_new(); m_itemClassActionBar->item_style = "action_bar_items"; - m_itemClassActionBar->func.text_get = NULL; // &listTopItemTextGet; + m_itemClassActionBar->func.text_get = nullptr; // &listTopItemTextGet; m_itemClassActionBar->func.content_get = &listActionBarContentGet; - m_itemClassActionBar->func.state_get = 0; - m_itemClassActionBar->func.del = 0; + m_itemClassActionBar->func.state_get = nullptr; + m_itemClassActionBar->func.del = nullptr; - ItemData * id = new ItemData; + ItemData *id = new ItemData; id->tabUI = this; - Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - id, - NULL, //parent item - ELM_GENLIST_ITEM_NONE,//item type - NULL, - NULL //data passed to above function - ); + Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + id, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE, //item type + nullptr, + nullptr //data passed to above function + ); id->e_item = elmItem; - ItemData * id2 = new ItemData; + + ItemData *id2 = new ItemData; id2->tabUI = this; - Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - id2, - NULL, //parent item - ELM_GENLIST_ITEM_NONE,//item type - NULL, - NULL //data passed to above function - ); + Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + id2, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE, //item type + nullptr, + nullptr //data passed to above function + ); id2->e_item = elmItem2; - ItemData * id3 = new ItemData; + ItemData *id3 = new ItemData; id3->tabUI = this; - Elm_Object_Item* elmItem3 = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - id3, - NULL, //parent item - ELM_GENLIST_ITEM_NONE,//item type - NULL, - NULL //data passed to above function - ); + Elm_Object_Item* elmItem3 = elm_genlist_item_append(m_genListActionBar , //genlist + m_itemClassActionBar, //item Class + id3, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE, //item type + nullptr, + nullptr //data passed to above function + ); id3->e_item = elmItem3; - /*ItemData * id4 = new ItemData; - id4->tabUI = this; - Elm_Object_Item* elmItem4 = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - //id.get(), //item data - id4, - NULL, //parent item - ELM_GENLIST_ITEM_NONE,//item type - NULL, - NULL //data passed to above function - ); - id4->e_item = elmItem4;*/ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - } Evas_Object* TabUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part) { - //ItemData *itemData = reinterpret_cast(data); - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if(!strcmp(part, "newtab_click")) - { - BROWSER_LOGD("############in new tab button part##################"); - Evas_Object *newtabButton = elm_button_add(obj); - elm_object_style_set(newtabButton, "tab_button"); - evas_object_smart_callback_add(newtabButton, "clicked", tizen_browser::base_ui::TabUI::_newtab_clicked, data); - return newtabButton; + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (obj && part) { + const char *part_name1 = "newtab_click"; + static const int part_name1_len = strlen(part_name1); + const char *part_name2 = "newincognitotab_clic"; + static const int part_name2_len = strlen(part_name2); + const char *part_name3 = "closetabs_click"; + static const int part_name3_len = strlen(part_name3); + const char *part_name4 = "close_click"; + static const int part_name4_len = strlen(part_name4); + + if (!strncmp(part_name1, part, part_name1_len)) { + Evas_Object *newtabButton = elm_button_add(obj); + elm_object_style_set(newtabButton, "tab_button"); + evas_object_smart_callback_add(newtabButton, "clicked", tizen_browser::base_ui::TabUI::_newtab_clicked, data); + return newtabButton; } - else if(!strcmp(part, "newincognitotab_click")) - { - Evas_Object *newincognitotabButton = elm_button_add(obj); - elm_object_style_set(newincognitotabButton, "tab_button"); - evas_object_smart_callback_add(newincognitotabButton, "clicked", tizen_browser::base_ui::TabUI::_newincognitotab_clicked, data); - return newincognitotabButton; + if (!strncmp(part_name2, part, part_name2_len)) { + Evas_Object *newincognitotabButton = elm_button_add(obj); + elm_object_style_set(newincognitotabButton, "tab_button"); + evas_object_smart_callback_add(newincognitotabButton, "clicked", tizen_browser::base_ui::TabUI::_newincognitotab_clicked, data); + return newincognitotabButton; } - else if(!strcmp(part, "closetabs_click")) - { - Evas_Object *closetabsButton = elm_button_add(obj); - elm_object_style_set(closetabsButton, "tab_button"); - evas_object_smart_callback_add(closetabsButton, "clicked", tizen_browser::base_ui::TabUI::_closetabs_clicked, data); - return closetabsButton; + if (!strncmp(part_name3, part, part_name3_len)) { + Evas_Object *closetabsButton = elm_button_add(obj); + elm_object_style_set(closetabsButton, "tab_button"); + evas_object_smart_callback_add(closetabsButton, "clicked", tizen_browser::base_ui::TabUI::_closetabs_clicked, data); + return closetabsButton; } - else if(!strcmp(part, "close_click")) - { - Evas_Object *close_click = elm_button_add(obj); - elm_object_style_set(close_click, "tab_button"); - evas_object_smart_callback_add(close_click, "clicked", TabUI::close_clicked_cb, data); - return close_click; - } - return NULL; + if (!strncmp(part_name4, part, part_name4_len)) { + Evas_Object *close_click = elm_button_add(obj); + elm_object_style_set(close_click, "tab_button"); + evas_object_smart_callback_add(close_click, "clicked", TabUI::close_clicked_cb, data); + return close_click; + } + } + return nullptr; } -void TabUI::close_clicked_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) +void TabUI::close_clicked_cb(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData * id = static_cast(data); - id->tabUI->closeTabUIClicked(std::string()); - id->tabUI->clearItems(); + if (data) { + ItemData * id = static_cast(data); + id->tabUI->closeTabUIClicked(std::string()); + id->tabUI->clearItems(); + } } void TabUI::hide() { - evas_object_hide(elm_layout_content_get(m_tab_layout, "action_bar_genlist")); - evas_object_hide(elm_layout_content_get(m_tab_layout, "top_bar_genlist")); - evas_object_hide(elm_layout_content_get(m_tab_layout, "tab_gengird")); - evas_object_hide(m_tab_layout); + evas_object_hide(elm_layout_content_get(m_tab_layout, "action_bar_genlist")); + evas_object_hide(elm_layout_content_get(m_tab_layout, "top_bar_genlist")); + evas_object_hide(elm_layout_content_get(m_tab_layout, "tab_gengird")); + evas_object_hide(m_tab_layout); } void TabUI::showTopButtons() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(NULL, edjFilePath.c_str()); + elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); m_genListTop = elm_genlist_add(m_tab_layout); elm_object_part_content_set(m_tab_layout, "top_bar_genlist", m_genListTop); elm_genlist_homogeneous_set(m_genListTop, EINA_FALSE); @@ -249,37 +246,37 @@ void TabUI::showTopButtons() elm_genlist_decorate_mode_set(m_genListTop, EINA_TRUE); evas_object_size_hint_weight_set(m_genListTop, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); - evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, NULL);*/ +// evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); +// evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr); m_itemClassTop = elm_genlist_item_class_new(); m_itemClassTop->item_style = "top_buttons"; - m_itemClassTop->func.text_get = NULL;// &listTapTopItemTextGet; + m_itemClassTop->func.text_get = nullptr; m_itemClassTop->func.content_get = &listTopButtonItemsContentGet; - m_itemClassTop->func.state_get = 0; - m_itemClassTop->func.del = 0; + m_itemClassTop->func.state_get = nullptr; + m_itemClassTop->func.del = nullptr; - ItemData * id = new ItemData; + ItemData *id = new ItemData; id->tabUI = this; - Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListTop, //genlist - m_itemClassTop, //item Class - id, - NULL, //parent item - ELM_GENLIST_ITEM_NONE,//item type - NULL, - NULL //data passed to above function - ); + Elm_Object_Item *elmItem = elm_genlist_item_append(m_genListTop, //genlist + m_itemClassTop, //item Class + id, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE, //item type + nullptr, + nullptr //data passed to above function + ); id->e_item = elmItem; - ItemData * id2 = new ItemData; + ItemData *id2 = new ItemData; id2->tabUI = this; - Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListTop, //genlist - m_itemClassTop, //item Class - id2, - NULL, //parent item - ELM_GENLIST_ITEM_NONE,//item type - NULL, - NULL //data passed to above function - ); + Elm_Object_Item *elmItem2 = elm_genlist_item_append(m_genListTop, //genlist + m_itemClassTop, //item Class + id2, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE, //item type + nullptr, + nullptr //data passed to above function + ); id2->e_item = elmItem2; BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -287,92 +284,77 @@ void TabUI::showTopButtons() Evas_Object* TabUI::listTopButtonItemsContentGet(void* data, Evas_Object* obj , const char* part) { - //ItemData *itemData = reinterpret_cast(data); - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if(!strcmp(part, "openedtabs_button")) - { - Evas_Object *openedtabsButton = elm_button_add(obj); - elm_object_style_set(openedtabsButton, "tab_button"); - evas_object_smart_callback_add(openedtabsButton, "clicked", tizen_browser::base_ui::TabUI::_openedtabs_clicked, data); - return openedtabsButton; + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data && obj && part) { + const char *part_name1 = "openedtabs_button"; + static const int part_name1_len = strlen(part_name1); + const char *part_name2 = "onotherdevices_button"; + static const int part_name2_len = strlen(part_name2); + + if (!strncmp(part_name1, part, part_name1_len)) { + Evas_Object *openedtabsButton = elm_button_add(obj); + elm_object_style_set(openedtabsButton, "tab_button"); + evas_object_smart_callback_add(openedtabsButton, "clicked", tizen_browser::base_ui::TabUI::_openedtabs_clicked, data); + return openedtabsButton; } - else if(!strcmp(part, "onotherdevices_button")) - { - Evas_Object *onotherdevicesButton = elm_button_add(obj); - elm_object_style_set(onotherdevicesButton, "tab_button"); - evas_object_smart_callback_add(onotherdevicesButton, "clicked", tizen_browser::base_ui::TabUI::_onotherdevices_clicked, data); - return onotherdevicesButton; - } - return NULL; + if (!strncmp(part_name2, part, part_name2_len)) { + Evas_Object *onotherdevicesButton = elm_button_add(obj); + elm_object_style_set(onotherdevicesButton, "tab_button"); + evas_object_smart_callback_add(onotherdevicesButton, "clicked", tizen_browser::base_ui::TabUI::_onotherdevices_clicked, data); + return onotherdevicesButton; + } + } + return nullptr; } -void TabUI::_newtab_clicked(void * data, Evas_Object * /* obj */, void * event_info) +void TabUI::_newtab_clicked(void * data, Evas_Object*, void*) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData* itemData = reinterpret_cast(data); - itemData->tabUI->clearItems(); - itemData->tabUI->newTabClicked(std::string()); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data) { + ItemData* itemData = static_cast(data); + itemData->tabUI->clearItems(); + itemData->tabUI->newTabClicked(std::string()); + } } -void TabUI::_openedtabs_clicked(void * data, Evas_Object * /* obj */, void * event_info) +void TabUI::_openedtabs_clicked(void*, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - /*ItemData* itemData = reinterpret_cast(data); - itemData->tabUI->newTabClicked(std::string());*/ } -void TabUI::_onotherdevices_clicked(void * data, Evas_Object * /* obj */, void * event_info) +void TabUI::_onotherdevices_clicked(void*, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - /*ItemData* itemData = reinterpret_cast(data); - itemData->tabUI->newTabClicked(std::string());*/ } -void TabUI::_newincognitotab_clicked(void * data, Evas_Object * /* obj */, void * event_info) +void TabUI::_newincognitotab_clicked(void* data, Evas_Object*, void*) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData* itemData = reinterpret_cast(data); - itemData->tabUI->clearItems(); - itemData->tabUI->newIncognitoTabClicked(std::string()); -} - -void TabUI::_closetabs_clicked(void * data, Evas_Object * /* obj */, void * event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData* itemData = reinterpret_cast(data); - itemData->tabUI->closeTabsClicked(std::string()); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data) { + ItemData* itemData = static_cast(data); + itemData->tabUI->clearItems(); + itemData->tabUI->newIncognitoTabClicked(std::string()); + } } -/* -char* TabUI::listItemTopTextGet(void* data, Evas_Object* obj , const char* part) +void TabUI::_closetabs_clicked(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData * id = static_cast(data); - if(!strcmp(part, "Tabmanager")) - { - if(!id->h_item->getTitle().empty()){ - return strdup(id->h_item->getTitle().c_str()); - } - } - else if(!strcmp(part, "tab_url")) - { - if(!id->h_item->getUrl().empty()){ - return strdup(id->h_item->getUrl().c_str()); - } + if (data) { + ItemData* itemData = static_cast(data); + itemData->tabUI->closeTabsClicked(std::string()); } - return strdup(""); } -*/ void TabUI::addTabItem(std::shared_ptr hi) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); if (m_map_tab_views.size() >= 10) - return; + return; TabItemData *itemData = new TabItemData(); itemData->item = hi; - itemData->tabUI = std::shared_ptr(this); - Elm_Object_Item* tabView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, NULL, this); + itemData->tabUI = std::shared_ptr(this); + Elm_Object_Item* tabView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, nullptr, this); m_map_tab_views.insert(std::pair(hi->getTitle(),tabView)); // unselect by default @@ -382,70 +364,74 @@ void TabUI::addTabItem(std::shared_ptr>items) { - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - int i = 0; - for (auto it = items.begin(); it != items.end(); ++it) { - i++; - if (i > 10) break; - addTabItem(*it); - } + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + //limiting number of added items to 10 + auto eit = std::min(items.end(), items.begin() + 10); + for (auto it = items.begin(); it != eit; ++it) { + addTabItem(*it); + } } - -char* TabUI::_grid_text_get(void *data, Evas_Object *obj, const char *part) +char* TabUI::_grid_text_get(void *data, Evas_Object*, const char *part) { - TabItemData *itemData = reinterpret_cast(data); - if (!strcmp(part, "tab_title")) { - return strdup(itemData->item->getTitle().c_str()); - } - if (!strcmp(part, "tab_url")) { - //return strdup(itemData->item->getUrl().c_str()); - return strdup(""); - } - - return strdup(""); -} + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + if (data && part) { + TabItemData *itemData = static_cast(data); + const char *part_name1 = "tab_title"; + static const int part_name1_len = strlen(part_name1); + const char *part_name2 = "tab_url"; + static const int part_name2_len = strlen(part_name2); + + if (!strncmp(part_name1, part, part_name1_len)) { + return strdup(itemData->item->getTitle().c_str()); + } + if (!strncmp(part_name2, part, part_name2_len)) { + //return strdup(itemData->item->getUrl().c_str()); + return strdup(""); + } + } + return strdup(""); +} Evas_Object * TabUI::_tab_grid_content_get(void *data, Evas_Object *obj, const char *part) { - BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); - TabItemData *itemData = reinterpret_cast(data); - - if (!strcmp(part, "tab_thumbnail")) { - if (itemData->item->getThumbnail()) { - Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->tabUI->m_parent); - return thumb; + if (data && obj && part) { + 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_name2, part, part_name2_len)) { + Evas_Object *thumbButton = elm_button_add(obj); + elm_object_style_set(thumbButton, "tab_thumbButton"); + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::TabUI::_thumbSelected, data); + return thumbButton; } - else { - return NULL; + if (!strncmp(part_name1, part, part_name1_len)) { + if (itemData->item->getThumbnail()) { + return tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->tabUI->m_parent); + } } } - else if (!strcmp(part, "tab_thumbButton")) { - Evas_Object *thumbButton = elm_button_add(obj); - elm_object_style_set(thumbButton, "tab_thumbButton"); - evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::TabUI::_thumbSelected, data); - return thumbButton; - } - return NULL; - + return nullptr; } -void TabUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) +void TabUI::_itemSelected(void*, Evas_Object*, void*) { - Elm_Object_Item * selected = reinterpret_cast(event_info); - TabItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); - TabUI * self = reinterpret_cast(data); - -// self->historyClicked(itemData->item); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); +// self->historyClicked(itemData->item); } -void TabUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */ ) +void TabUI::_thumbSelected(void *data, Evas_Object*, void*) { - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - TabItemData * itemData = reinterpret_cast(data); - itemData->tabUI->clearItems(); - itemData->tabUI->tabClicked(itemData->item->getId()); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + if (data) { + TabItemData *itemData = static_cast(data); + itemData->tabUI->clearItems(); + itemData->tabUI->tabClicked(itemData->item->getId()); + } } void TabUI::clearItems() @@ -469,31 +455,35 @@ Evas_Object* TabUI::createNoHistoryLabel() void TabUI::setEmptyGengrid(bool setEmpty) { - if(setEmpty) { + if (setEmpty) { elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoHistoryLabel()); } else { - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", NULL); + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", nullptr); } } -void TabUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +void TabUI::focusItem(void*, Evas_Object*, void* event_info) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,in", "over2"); + if (event_info) { + Elm_Object_Item *item = static_cast(event_info); + elm_object_item_signal_emit( item, "mouse,in", "over2"); - // selected manually - elm_gengrid_item_selected_set(item, EINA_TRUE); + // selected manually + elm_gengrid_item_selected_set(item, EINA_TRUE); + } } -void TabUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) +void TabUI::unFocusItem(void*, Evas_Object*, void* event_info) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,out", "over2"); + if (event_info) { + Elm_Object_Item *item = static_cast(event_info); + elm_object_item_signal_emit( item, "mouse,out", "over2"); - // unselected manually - elm_gengrid_item_selected_set(item, EINA_FALSE); + // unselected manually + elm_gengrid_item_selected_set(item, EINA_FALSE); + } } } diff --git a/services/TabUI/TabUI.h b/services/TabUI/TabUI.h index 505ca5a..9694132 100644 --- a/services/TabUI/TabUI.h +++ b/services/TabUI/TabUI.h @@ -45,8 +45,6 @@ public: void addTabItem(std::shared_ptr); void addTabItems(std::vector > items); -// void addBookmarkItem(std::shared_ptr); -// void addbookmarkItems(std::vector >); boost::signals2::signal tabClicked; boost::signals2::signal newTabClicked; @@ -58,7 +56,6 @@ public: private: static Evas_Object* listActionBarContentGet(void *data, Evas_Object *obj, const char *part); static Evas_Object* listTopButtonItemsContentGet(void *data, Evas_Object *obj, const char *part); - //static char* listItemTextGet(void *data, Evas_Object *obj, const char *part); static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _tab_grid_content_get(void *data, Evas_Object *obj, const char *part); @@ -86,7 +83,7 @@ private: Elm_Gengrid_Item_Class * m_item_class; std::map m_map_tab_views; bool m_gengridSetup; - std::string edjFilePath; + std::string m_edjFilePath; Evas_Object *createNoHistoryLabel(); static void focusItem(void* data, Evas_Object* obj, void* event_info); -- 2.7.4 From 03aa306dc5760f924cb4345cbdb9d111ef1b4d51 Mon Sep 17 00:00:00 2001 From: Janusz Majnert Date: Mon, 10 Aug 2015 16:41:33 +0200 Subject: [PATCH 09/16] Refactored SettingsUI service [Issue#] https://bugs.tizen.org/jira/browse/TT-72 [Problem] Lots of style fixes, several fixes for build warnings [Cause] n/a [Solution] Reformat code, fix casting and remove unused variables [Verify] 1. Check that there are no build problems caused by this change 2. Run the browser and explore the settings to see if nothing's broken List of changes: * tabs -> spaces * proper indentation * other minor style fixes * removing unused variables' declarations * renaming a few class members to better express their use * replacing reinterpret_cast with static_cast where appropriate * adding null-checks in callback functions * replacing deprecated Elementary API call with its successor Change-Id: Ic9e00dd20b93f9392af61bede11868df18448478 --- services/SettingsUI/SettingsUI.cpp | 281 ++++++++++++++++++++----------------- services/SettingsUI/SettingsUI.h | 8 +- 2 files changed, 153 insertions(+), 136 deletions(-) diff --git a/services/SettingsUI/SettingsUI.cpp b/services/SettingsUI/SettingsUI.cpp index 9fe988b..9b897a2 100644 --- a/services/SettingsUI/SettingsUI.cpp +++ b/services/SettingsUI/SettingsUI.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -31,21 +32,21 @@ namespace base_ui{ EXPORT_SERVICE(SettingsUI, "org.tizen.browser.settingsui") -struct ItemData{ - tizen_browser::base_ui::SettingsUI* settingsUI; - Elm_Object_Item * e_item; +struct ItemData { + tizen_browser::base_ui::SettingsUI* settingsUI; + Elm_Object_Item * e_item; }; SettingsUI::SettingsUI() - : m_settings_layout(NULL) - , m_genListActionBar(NULL) - , m_parent(NULL) - , m_itemClassActionBar(NULL) - , m_item_class(NULL) + : m_settings_layout(nullptr) + , m_genListActionBar(nullptr) + , m_itemClassActionBar(nullptr) + , m_parent(nullptr) + , m_item_class(nullptr) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - edjFilePath = EDJE_DIR; - edjFilePath.append("SettingsUI/SettingsUI.edj"); + m_edjFilePath = EDJE_DIR; + m_edjFilePath.append("SettingsUI/SettingsUI.edj"); } SettingsUI::~SettingsUI() @@ -56,10 +57,9 @@ SettingsUI::~SettingsUI() void SettingsUI::show(Evas_Object* parent) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - //m_parent = p; - elm_theme_extension_add(NULL, edjFilePath.c_str()); + elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); m_settings_layout = elm_layout_add(parent); - elm_layout_file_set(m_settings_layout, edjFilePath.c_str(), "settings-layout"); + elm_layout_file_set(m_settings_layout, m_edjFilePath.c_str(), "settings-layout"); evas_object_size_hint_weight_set(m_settings_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(m_settings_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(m_settings_layout); @@ -68,11 +68,10 @@ void SettingsUI::show(Evas_Object* parent) showSettingsGenlist(); } - void SettingsUI::showActionBar() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(NULL, edjFilePath.c_str()); + elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); m_genListActionBar = elm_genlist_add(m_settings_layout); elm_object_part_content_set(m_settings_layout, "actionbar_swallow", m_genListActionBar); elm_genlist_homogeneous_set(m_genListActionBar, EINA_FALSE); @@ -84,31 +83,30 @@ void SettingsUI::showActionBar() m_itemClassActionBar = elm_genlist_item_class_new(); m_itemClassActionBar->item_style = "settings_action_bar_items"; - m_itemClassActionBar->func.text_get = NULL; + m_itemClassActionBar->func.text_get = nullptr; m_itemClassActionBar->func.content_get = &listActionBarContentGet; - m_itemClassActionBar->func.state_get = 0; - m_itemClassActionBar->func.del = 0; + m_itemClassActionBar->func.state_get = nullptr; + m_itemClassActionBar->func.del = nullptr; - ItemData * id = new ItemData; + ItemData *id = new ItemData; id->settingsUI = this; - Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - id, - NULL, //parent item - ELM_GENLIST_ITEM_NONE,//item type - NULL, - NULL //data passed to above function - ); + Elm_Object_Item *elmItem = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + id, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE, //item type + nullptr, + nullptr //data passed to above function + ); id->e_item = elmItem; BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - } void SettingsUI::showSettingsGenlist() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(NULL, edjFilePath.c_str()); + elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); m_genList = elm_genlist_add(m_settings_layout); elm_object_part_content_set(m_settings_layout, "settings_genlist_swallow", m_genList); elm_genlist_homogeneous_set(m_genList, EINA_FALSE); @@ -117,134 +115,179 @@ void SettingsUI::showSettingsGenlist() elm_genlist_mode_set(m_genList, ELM_LIST_SCROLL); elm_genlist_decorate_mode_set(m_genList, EINA_TRUE); evas_object_size_hint_weight_set(m_genList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_genlist_scroller_policy_set(m_genList, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_AUTO); + elm_scroller_policy_set(m_genList, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_AUTO); m_item_class = elm_genlist_item_class_new(); m_item_class->item_style = "settings_items"; - m_item_class->func.text_get = NULL; + m_item_class->func.text_get = nullptr; m_item_class->func.content_get = &listSettingsGenlistContentGet; - m_item_class->func.state_get = 0; - m_item_class->func.del = 0; + m_item_class->func.state_get = nullptr; + m_item_class->func.del = nullptr; - ItemData * id = new ItemData; + ItemData *id = new ItemData; id->settingsUI = this; - Elm_Object_Item* elmItem = elm_genlist_item_append(m_genList, //genlist + Elm_Object_Item *elmItem = elm_genlist_item_append(m_genList, //genlist m_item_class, //item Class - id, - NULL, //parent item - ELM_GENLIST_ITEM_NONE,//item type - NULL, - NULL //data passed to above function - ); + id, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE, //item type + nullptr, + nullptr //data passed to above function + ); id->e_item = elmItem; BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - } Evas_Object* SettingsUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if(!strcmp(part, "close_click")) - { - Evas_Object *close_click = elm_button_add(obj); - elm_object_style_set(close_click, "basic_button"); - evas_object_smart_callback_add(close_click, "clicked", SettingsUI::close_clicked_cb, data); - return close_click; - } - return NULL; + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (obj && part) { + const char *part_name = "close_click"; + static const int part_name_len = strlen(part_name); + if (!strncmp(part_name, part, part_name_len)) { + Evas_Object *close_click = elm_button_add(obj); + elm_object_style_set(close_click, "basic_button"); + evas_object_smart_callback_add(close_click, "clicked", SettingsUI::close_clicked_cb, data); + return close_click; + } + } + return nullptr; } Evas_Object* SettingsUI::listSettingsGenlistContentGet(void* data, Evas_Object* obj , const char* part) { - BROWSER_LOGD("[%s:%d] Part %s", __PRETTY_FUNCTION__, __LINE__, part); - if(!strcmp(part, "del_selected_data_click")) - { - Evas_Object *button = elm_button_add(obj); - elm_object_style_set(button, "basic_button"); - evas_object_smart_callback_add(button, "clicked", SettingsUI::_del_selected_data_clicked_cb, data); - return button; + BROWSER_LOGD("[%s:%d] Part %s", __PRETTY_FUNCTION__, __LINE__, part); + if (obj && part) { + const char * part_name1 = "del_selected_data_click"; + static const int part_name1_len = strlen(part_name1); + if (!strncmp(part_name1, part, part_name1_len)) { + Evas_Object *button = elm_button_add(obj); + elm_object_style_set(button, "basic_button"); + evas_object_smart_callback_add(button, "clicked", SettingsUI::_del_selected_data_clicked_cb, data); + return button; } - else if(!strcmp(part, "reset_mv_click")) - { - Evas_Object *button = elm_button_add(obj); - elm_object_style_set(button, "basic_button"); - evas_object_smart_callback_add(button, "clicked", SettingsUI::_reset_mv_clicked_cb, data); - return button; + + const char * part_name2 = "reset_mv_click"; + static const int part_name2_len = strlen(part_name2); + if (!strncmp(part_name2, part, part_name2_len)) { + Evas_Object *button = elm_button_add(obj); + elm_object_style_set(button, "basic_button"); + evas_object_smart_callback_add(button, "clicked", SettingsUI::_reset_mv_clicked_cb, data); + return button; } - else if(!strcmp(part, "reset_browser_click")) - { - Evas_Object *button = elm_button_add(obj); - elm_object_style_set(button, "basic_button"); - evas_object_smart_callback_add(button, "clicked", SettingsUI::_reset_browser_clicked_cb, data); - return button; + + const char * part_name3 = "reset_browser_click"; + static const int part_name3_len = strlen(part_name3); + if (!strncmp(part_name3, part, part_name3_len)) { + Evas_Object *button = elm_button_add(obj); + elm_object_style_set(button, "basic_button"); + evas_object_smart_callback_add(button, "clicked", SettingsUI::_reset_browser_clicked_cb, data); + return button; } - else if(!strcmp(part, "cache_cb") || !strcmp(part, "cookies_cb") || !strcmp(part, "history_cb")) + + const char * part_name4 = "cache_cb"; + static const int part_name4_len = strlen(part_name4); + const char * part_name5 = "cookies_cb"; + static const int part_name5_len = strlen(part_name5); + const char * part_name6 = "history_cb"; + static const int part_name6_len = strlen(part_name6); + if (!strncmp(part_name4, part, part_name4_len) || + !strncmp(part_name5, part, part_name5_len) || + !strncmp(part_name6, part, part_name6_len)) { - Evas_Object *checkbox = elm_check_add(obj); - elm_object_style_set(checkbox, "on&off"); - evas_object_smart_callback_add(checkbox, "changed", __check_changed_cb, data); - elm_check_state_set(checkbox, EINA_TRUE); - return checkbox; - } - else if(!strcmp(part, "accept_all_rb") || !strcmp(part, "ask_rb") || !strcmp(part, "sr_disable_rb") || !strcmp(part, "bs_enable_rb") - || !strcmp(part, "bs_disable_rb") || !strcmp(part, "ts_enable_rb") || !strcmp(part, "ts_disable_rb")) + Evas_Object *checkbox = elm_check_add(obj); + elm_object_style_set(checkbox, "on&off"); + evas_object_smart_callback_add(checkbox, "changed", __check_changed_cb, data); + elm_check_state_set(checkbox, EINA_TRUE); + return checkbox; + } + + const char * part_name7 = "accept_all_rb"; + static const int part_name7_len = strlen(part_name7); + const char * part_name8 = "ask_rb"; + static const int part_name8_len = strlen(part_name8); + const char * part_name9 = "sr_disable_rb"; + static const int part_name9_len = strlen(part_name9); + const char * part_name10 = "bs_enable_rb"; + static const int part_name10_len = strlen(part_name10); + const char * part_name11 = "bs_disable_rb"; + static const int part_name11_len = strlen(part_name11); + const char * part_name12 = "ts_enable_rb"; + static const int part_name12_len = strlen(part_name12); + const char * part_name13 = "ts_disable_rb"; + static const int part_name13_len = strlen(part_name13); + if (!strncmp(part_name7, part, part_name7_len) || + !strncmp(part_name8, part, part_name8_len) || + !strncmp(part_name9, part, part_name9_len) || + !strncmp(part_name10, part, part_name10_len) || + !strncmp(part_name11, part, part_name11_len) || + !strncmp(part_name12, part, part_name12_len) || + !strncmp(part_name13, part, part_name13_len)) { - Evas_Object *rb = elm_radio_add(obj); - elm_object_style_set(rb, "on&off"); - //evas_object_smart_callback_add(rb, "changed", __radio_changed_cb, data); - return rb; + Evas_Object *rb = elm_radio_add(obj); + elm_object_style_set(rb, "on&off"); + //evas_object_smart_callback_add(rb, "changed", __radio_changed_cb, data); + return rb; } - return NULL; + } + return nullptr; } -void SettingsUI::__check_changed_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) +void SettingsUI::__check_changed_cb(void*, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - //ItemData * id = static_cast(data); } -void SettingsUI::close_clicked_cb(void* data, Evas_Object* /* obj */, void* /* event_info */) +void SettingsUI::close_clicked_cb(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData * id = static_cast(data); - id->settingsUI->closeSettingsUIClicked(std::string()); - id->settingsUI->clearItems(); + if (data) { + ItemData * id = static_cast(data); + id->settingsUI->closeSettingsUIClicked(std::string()); + id->settingsUI->clearItems(); + } } 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_genlist_swallow")); - evas_object_hide(m_settings_layout); + evas_object_hide(elm_layout_content_get(m_settings_layout, "action_bar_swallow")); + evas_object_hide(elm_layout_content_get(m_settings_layout, "settings_genlist_swallow")); + evas_object_hide(m_settings_layout); } -void SettingsUI::_del_selected_data_clicked_cb(void * data, Evas_Object * /* obj */, void * event_info) +void SettingsUI::_del_selected_data_clicked_cb(void *data, Evas_Object*, void*) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData* itemData = reinterpret_cast(data); - Evas_Object *cb1 = elm_object_item_part_content_get(itemData->e_item, "cache_cb"); - Evas_Object *cb2 = elm_object_item_part_content_get(itemData->e_item, "cookies_cb"); - Evas_Object *cb3 = elm_object_item_part_content_get(itemData->e_item, "history_cb"); - std::string type; - elm_check_state_get(cb1) ? type += "_CACHE" : ""; - elm_check_state_get(cb2) ? type += "_COOKIES" : ""; - elm_check_state_get(cb3) ? type += "_HISTORY" : ""; + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data) { + ItemData *itemData = static_cast(data); + Evas_Object *cb1 = elm_object_item_part_content_get(itemData->e_item, "cache_cb"); + Evas_Object *cb2 = elm_object_item_part_content_get(itemData->e_item, "cookies_cb"); + Evas_Object *cb3 = elm_object_item_part_content_get(itemData->e_item, "history_cb"); + std::string type; + elm_check_state_get(cb1) ? type += "_CACHE" : ""; + elm_check_state_get(cb2) ? type += "_COOKIES" : ""; + elm_check_state_get(cb3) ? type += "_HISTORY" : ""; itemData->settingsUI->deleteSelectedDataClicked(type); + } } -void SettingsUI::_reset_mv_clicked_cb(void * data, Evas_Object * /* obj */, void * event_info) +void SettingsUI::_reset_mv_clicked_cb(void *data, Evas_Object*, void*) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData* itemData = reinterpret_cast(data); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data) { + ItemData* itemData = static_cast(data); itemData->settingsUI->resetMostVisitedClicked(std::string()); + } } -void SettingsUI::_reset_browser_clicked_cb(void * data, Evas_Object * /* obj */, void * event_info) +void SettingsUI::_reset_browser_clicked_cb(void *data, Evas_Object*, void*) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData* itemData = reinterpret_cast(data); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data) { + ItemData* itemData = static_cast(data); itemData->settingsUI->resetBrowserClicked(std::string()); + } } void SettingsUI::clearItems() @@ -255,25 +298,5 @@ void SettingsUI::clearItems() elm_genlist_clear(m_genList); } -void SettingsUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,in", "over2"); - - // selected manually - elm_gengrid_item_selected_set(item, EINA_TRUE); -} - -void SettingsUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,out", "over2"); - - // unselected manually - elm_gengrid_item_selected_set(item, EINA_FALSE); -} - } } diff --git a/services/SettingsUI/SettingsUI.h b/services/SettingsUI/SettingsUI.h index 43bf8d2..c7e8e9f 100644 --- a/services/SettingsUI/SettingsUI.h +++ b/services/SettingsUI/SettingsUI.h @@ -42,9 +42,6 @@ public: void clearItems(); void hide(); - /*boost::signals2::signal tabClicked; - boost::signals2::signal newTabClicked; - boost::signals2::signal newIncognitoTabClicked;*/ boost::signals2::signal resetBrowserClicked; boost::signals2::signal resetMostVisitedClicked; boost::signals2::signal deleteSelectedDataClicked; @@ -74,10 +71,7 @@ private: Evas_Object *m_parent; Elm_Gengrid_Item_Class * m_item_class; - std::string edjFilePath; - - static void focusItem(void* data, Evas_Object* obj, void* event_info); - static void unFocusItem(void* data, Evas_Object* obj, void* event_info); + std::string m_edjFilePath; }; } -- 2.7.4 From 5db881e53c12d44a57d2d5e29c888a1965b70083 Mon Sep 17 00:00:00 2001 From: "t.dakowicz" Date: Tue, 11 Aug 2015 14:46:23 +0200 Subject: [PATCH 10/16] Bug TT-96 Fixed 'Bookmark Manager' button in the More Menu [Issue#] https://bugs.tizen.org/jira/browse/TT-96 [Problem] Bookmark Manager couldn't be accessed from More Menu [Cause] Proper signal wasn't created [Solution] Added signal to MoreMenu class [Verify] Check if Bookmark Manager button does anything Change-Id: Idad6aaa774ad30fb9ff9b0207d4ef2a2004bf751 --- services/MoreMenuUI/MoreMenuUI.cpp | 4 +++- services/MoreMenuUI/MoreMenuUI.h | 1 + services/SimpleUI/SimpleUI.cpp | 3 ++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/services/MoreMenuUI/MoreMenuUI.cpp b/services/MoreMenuUI/MoreMenuUI.cpp index 0a61323..2670648 100644 --- a/services/MoreMenuUI/MoreMenuUI.cpp +++ b/services/MoreMenuUI/MoreMenuUI.cpp @@ -452,8 +452,10 @@ void MoreMenuUI::_thumbSelected(void* data, Evas_Object*, void*) case SETTINGS: itemData->moreMenuUI->settingsClicked(std::string()); break; - case READER_MODE: case BOOKMARK_MANAGER: + itemData->moreMenuUI->bookmarkManagerClicked(std::string()); + break; + case READER_MODE: case SCREEN_ZOOM: case START_MINIBROWSER: case FOCUS_MODE: diff --git a/services/MoreMenuUI/MoreMenuUI.h b/services/MoreMenuUI/MoreMenuUI.h index 7f0812b..a837fad 100644 --- a/services/MoreMenuUI/MoreMenuUI.h +++ b/services/MoreMenuUI/MoreMenuUI.h @@ -65,6 +65,7 @@ public: void clearItems(); void getBookmarkFolderList(std::vector > ); + boost::signals2::signal bookmarkManagerClicked; boost::signals2::signal historyUIClicked; boost::signals2::signal BookmarkFolderCreated; boost::signals2::signal closeMoreMenuClicked; diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 1a2ad29..0ccc4d0 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -1046,7 +1046,7 @@ void SimpleUI::showMainUI() m_mainUI->historyClicked.connect(boost::bind(&SimpleUI::onHistoryClicked, this,_1)); m_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this,_1)); m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this,_1)); - m_mainUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this,_1)); + m_mainUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this,_1)); m_isHomePageActive = true; } @@ -1107,6 +1107,7 @@ void SimpleUI::showMoreMenu() (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui")); M_ASSERT(m_moreMenuUI); + 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.disconnect_all_slots(); -- 2.7.4 From 676726a7652bc9b28a29456e83020f18d156ed11 Mon Sep 17 00:00:00 2001 From: Janusz Majnert Date: Tue, 11 Aug 2015 10:44:06 +0200 Subject: [PATCH 11/16] Refactored HistoryUI service [Issue#] https://bugs.tizen.org/jira/browse/TT-72 [Problem] Lots of style fixes, several fixes for build warnings [Cause] n/a [Solution] Reformat code, fix casting and remove unused variables [Verify] 1. Check that there are no build problems caused by this change 2. Run the browser and explore the history ui to see if nothing got broken List of changes: * tabs -> spaces * proper indentation * other minor style fixes * removing unused variables' declarations * renaming a few class members to better express their use * replacing reinterpret_cast with static_cast where appropriate * adding null-checks in callback functions * replacing deprecated Elementary API call with its successor Change-Id: Id2c4c020573138d641a8e6a676942830a6505ab5 --- services/HistoryUI/HistoryUI.cpp | 367 +++++++++++++++++---------------------- services/HistoryUI/HistoryUI.h | 28 +-- 2 files changed, 171 insertions(+), 224 deletions(-) diff --git a/services/HistoryUI/HistoryUI.cpp b/services/HistoryUI/HistoryUI.cpp index be63ad0..c2724da 100644 --- a/services/HistoryUI/HistoryUI.cpp +++ b/services/HistoryUI/HistoryUI.cpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include #include "HistoryUI.h" @@ -33,43 +35,41 @@ EXPORT_SERVICE(HistoryUI, "org.tizen.browser.historyui") typedef struct _HistoryItemData { - std::shared_ptr item; - std::shared_ptr historyUI; + std::shared_ptr item; + std::shared_ptr historyUI; } HistoryItemData; struct ItemData{ - tizen_browser::base_ui::HistoryUI* historyUI; - Elm_Object_Item * e_item; + tizen_browser::base_ui::HistoryUI* historyUI; + Elm_Object_Item * e_item; }; -static std::vector m_history_item_data; +static std::vector _history_item_data; -#define efl_scale (elm_config_scale_get() / elm_app_base_scale_get()) HistoryUI::HistoryUI() - : m_gengrid(NULL) - , m_parent(NULL) - , m_item_class(NULL) - , m_gengridSetup(false) - , m_history_layout(NULL) - , m_historyitem_layout(NULL) - , m_genListActionBar(NULL) - , m_genListToday(NULL) - , m_itemClassToday(NULL) + : m_history_layout(nullptr) + , m_genListActionBar(nullptr) + , m_genListToday(nullptr) + , m_itemClassToday(nullptr) + , m_gengrid(nullptr) + , m_parent(nullptr) + , m_item_class(nullptr) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - edjFilePath = EDJE_DIR; - edjFilePath.append("HistoryUI/History.edj"); + m_edjFilePath = EDJE_DIR; + m_edjFilePath.append("HistoryUI/History.edj"); } HistoryUI::~HistoryUI() { + } void HistoryUI::show(Evas_Object* parent) { - elm_theme_extension_add(NULL, edjFilePath.c_str()); + elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); m_history_layout = elm_layout_add(parent); - elm_layout_file_set(m_history_layout, edjFilePath.c_str(), "history-layout"); + 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); evas_object_show(m_history_layout); @@ -79,41 +79,36 @@ void HistoryUI::show(Evas_Object* parent) m_gengrid = elm_gengrid_add(m_history_layout); elm_object_part_content_set(m_history_layout, "history_gengird", m_gengrid); - /*evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, NULL); - evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, NULL); - evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this);*/ - - if (!m_item_class) { - m_item_class = elm_gengrid_item_class_new(); - m_item_class->item_style = "history_item"; - m_item_class->func.text_get = _grid_text_get; - m_item_class->func.content_get = _history_grid_content_get; - m_item_class->func.state_get = NULL; - m_item_class->func.del = NULL; - } + if (!m_item_class) { + m_item_class = elm_gengrid_item_class_new(); + m_item_class->item_style = "history_item"; + m_item_class->func.text_get = _grid_text_get; + m_item_class->func.content_get = _history_grid_content_get; + m_item_class->func.state_get = nullptr; + m_item_class->func.del = nullptr; + } - M_ASSERT(m_parent); - 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_TRUE); - elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE); - elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON); - elm_scroller_page_size_set(m_gengrid, 0, 580); + 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_TRUE); + elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE); + elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON); + elm_scroller_page_size_set(m_gengrid, 0, 580); - 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); + 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); + double efl_scale = elm_config_scale_get() / elm_app_base_scale_get(); elm_gengrid_item_size_set(m_gengrid, 580 * efl_scale, 580 * efl_scale); addItems(); - } void HistoryUI::showActionBar() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(NULL, edjFilePath.c_str()); + elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); m_genListActionBar = elm_genlist_add(m_history_layout); elm_object_part_content_set(m_history_layout, "action_bar_history_genlist", m_genListActionBar); elm_genlist_homogeneous_set(m_genListActionBar, EINA_FALSE); @@ -125,98 +120,106 @@ void HistoryUI::showActionBar() m_itemClassActionBar = elm_genlist_item_class_new(); m_itemClassActionBar->item_style = "action_bar_history_items"; - m_itemClassActionBar->func.text_get = NULL; // &listTopItemTextGet; - m_itemClassActionBar->func.content_get = &listActionBarContentGet; - m_itemClassActionBar->func.state_get = 0; - m_itemClassActionBar->func.del = 0; + m_itemClassActionBar->func.text_get = nullptr; // &listTopItemTextGet; + m_itemClassActionBar->func.content_get = &_listActionBarContentGet; + m_itemClassActionBar->func.state_get = nullptr; + m_itemClassActionBar->func.del = nullptr; - ItemData * id = new ItemData; + ItemData *id = new ItemData; id->historyUI = this; - Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - id, - NULL, //parent item - ELM_GENLIST_ITEM_NONE,//item type - NULL, - NULL //data passed to above function - ); + Elm_Object_Item *elmItem = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + id, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE, //item type + nullptr, + nullptr //data passed to above function + ); id->e_item = elmItem; - ItemData * id2 = new ItemData; + ItemData *id2 = new ItemData; id2->historyUI = this; - Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - id2, - NULL, //parent item - ELM_GENLIST_ITEM_NONE,//item type - NULL, - NULL //data passed to above function - ); + Elm_Object_Item *elmItem2 = elm_genlist_item_append(m_genListActionBar, //genlist + m_itemClassActionBar, //item Class + id2, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE, //item type + nullptr, + nullptr //data passed to above function + ); id2->e_item = elmItem2; } -Evas_Object* HistoryUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part) +Evas_Object* HistoryUI::_listActionBarContentGet(void* data, Evas_Object* obj , const char* part) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if(!strcmp(part, "clearhistory_click")) - { - Evas_Object *clearHistoryButton = elm_button_add(obj); - elm_object_style_set(clearHistoryButton, "history_button"); - evas_object_smart_callback_add(clearHistoryButton, "clicked", tizen_browser::base_ui::HistoryUI::_clearhistory_clicked, data); - return clearHistoryButton; + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (obj && part) { + const char *part_name1 = "clearhistory_click"; + static const int part_name1_len = strlen(part_name1); + const char *part_name2 = "close_click"; + static const int part_name2_len = strlen(part_name2); + + if (!strncmp(part_name1, part, part_name1_len)) { + Evas_Object *clearHistoryButton = elm_button_add(obj); + elm_object_style_set(clearHistoryButton, "history_button"); + evas_object_smart_callback_add(clearHistoryButton, "clicked", tizen_browser::base_ui::HistoryUI::_clearhistory_clicked, data); + return clearHistoryButton; + } + if (!strncmp(part_name2, part, part_name2_len)) { + Evas_Object *close_click = elm_button_add(obj); + elm_object_style_set(close_click, "history_button"); + evas_object_smart_callback_add(close_click, "clicked", HistoryUI::_close_clicked_cb, data); + return close_click; } - else if(!strcmp(part, "close_click")) - { - Evas_Object *close_click = elm_button_add(obj); - elm_object_style_set(close_click, "history_button"); - evas_object_smart_callback_add(close_click, "clicked", HistoryUI::close_clicked_cb, data); - return close_click; - } - - return NULL; + } + return nullptr; } -void HistoryUI::close_clicked_cb(void * data, Evas_Object * /* obj */, void * event_info) +void HistoryUI::_close_clicked_cb(void * data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData * id = static_cast(data); - id->historyUI->closeHistoryUIClicked(std::string()); - id->historyUI->clearItems(); -} + if (data) { + ItemData *id = static_cast(data); + id->historyUI->closeHistoryUIClicked(std::string()); + id->historyUI->clearItems(); + } +} -char* HistoryUI::listTodayTextGet(void* data, Evas_Object* obj , const char* part) +char* HistoryUI::_listTodayTextGet(void* data, Evas_Object*, const char* part) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - HistoryItemData * id = static_cast(data); - if(!strcmp(part, "history_url_text")) - { - if(!id->item->getUrl().empty()){ - std::string str = id->item->getTitle() + " - " + id->item->getUrl(); - return strdup(str.c_str()); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data) { + HistoryItemData *id = static_cast(data); + const char *part_name = "history_url_text"; + static const int part_name_len = strlen(part_name); + + if (!strncmp(part_name, part, part_name_len)) { + if (!id->item->getUrl().empty()) { + std::string str = id->item->getTitle() + " - " + id->item->getUrl(); + return strdup(str.c_str()); + } } } - return NULL; + return nullptr; } -void HistoryUI::_clearhistory_clicked(void * data, Evas_Object * /* obj */, void * event_info) +void HistoryUI::_clearhistory_clicked(void*, Evas_Object*, void*) { - /* - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData* itemData = reinterpret_cast(data); - itemData->tabUI->clearItems(); - itemData->tabUI->newTabClicked(std::string()); - */ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); +// ItemData *itemData = static_cast(data); +// itemData->tabUI->clearItems(); +// itemData->tabUI->newTabClicked(std::string()); } 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, NULL, this); - elm_gengrid_item_selected_set(historyView, EINA_FALSE); - } - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + 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) @@ -225,68 +228,71 @@ void HistoryUI::addHistoryItem(std::shared_ptritem = hi; itemData->historyUI = std::shared_ptr(this); - m_history_item_data.push_back(itemData); + _history_item_data.push_back(itemData); setEmptyGengrid(false); } void HistoryUI::addHistoryItems(std::vector > items) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - m_history_item_data.clear(); + _history_item_data.clear(); for (auto it = items.begin(); it != items.end(); ++it) - addHistoryItem(*it); + addHistoryItem(*it); } -char* HistoryUI::_grid_text_get(void *data, Evas_Object *obj, const char *part) +char* HistoryUI::_grid_text_get(void*, Evas_Object*, const char *part) { BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); - HistoryItemData *itemData = reinterpret_cast(data); - const char* item_name = NULL; - if (!strcmp(part, "menu_label")) { - item_name = "Today"; - return strdup(item_name); + const char* part_name = "menu_label"; + static const int part_name_len = strlen(part_name); + + if (!strncmp(part_name, part, part_name_len)) { + return strdup("Today"); } - return NULL; + return nullptr; } -Evas_Object * HistoryUI::_history_grid_content_get(void *data, Evas_Object *obj, const char *part) +Evas_Object * HistoryUI::_history_grid_content_get(void *data, Evas_Object*, const char *part) { BROWSER_LOGD("[%s:%d] part : %s", __PRETTY_FUNCTION__, __LINE__, part); - HistoryItemData * id = static_cast(data); - if(!strcmp(part, "history_genlist")) - { - 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 = NULL; - id->historyUI->m_itemClassToday->func.state_get = 0; - id->historyUI->m_itemClassToday->func.del = 0; - - for(auto it = m_history_item_data.begin(); it != m_history_item_data.end(); it++) { - Elm_Object_Item* historyView = elm_genlist_item_append(id->historyUI->m_genListToday, id->historyUI->m_itemClassToday, *it, NULL, ELM_GENLIST_ITEM_NONE, NULL, id->historyUI.get()); - id->historyUI->m_map_history_views.insert(std::pair((*it)->item->getUrl(), historyView)); - } - - return id->historyUI->m_genListToday; + if (data && part) { + HistoryItemData *id = static_cast(data); + const char *part_name = "history_genlist"; + 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, nullptr, id->historyUI.get()); + id->historyUI->m_map_history_views.insert(std::pair((*it)->item->getUrl(), historyView)); + } + + return id->historyUI->m_genListToday; + } } - return NULL; + return nullptr; } void HistoryUI::removeHistoryItem(const std::string& uri) { BROWSER_LOGD("[%s] uri=%s", __func__, uri.c_str()); - if(m_map_history_views.find(uri) == m_map_history_views.end()) { + if(m_map_history_views.find(uri) == m_map_history_views.end()) return; - } Elm_Object_Item* historyView = m_map_history_views.at(uri); elm_object_item_del(historyView); @@ -295,34 +301,9 @@ void HistoryUI::removeHistoryItem(const std::string& uri) setEmptyGengrid(0 == m_map_history_views.size()); } -void HistoryUI::_item_deleted(void * /* data */, Evas_Object * /* obj */) -{ - -} - -void HistoryUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) -{ - Elm_Object_Item * selected = reinterpret_cast(event_info); - HistoryItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); - HistoryUI * self = reinterpret_cast(data); - - self->historyItemClicked(itemData->item); -} - -void HistoryUI::_deleteHistory(void *data, Evas_Object * /* obj */, void * /* event_info */) -{ - HistoryItemData * itemData = reinterpret_cast(data); - //itemData->historysUI->historyDeleteClicked(itemData->item); -} - -void HistoryUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) -{ - HistoryItemData * itemData = reinterpret_cast(data); - // itemData->historysUI->historyClicked(itemData->item); -} - -Evas_Object* HistoryUI::createNoHistorysLabel() +Evas_Object* HistoryUI::createNoHistoryLabel() { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); Evas_Object *label = elm_label_add(m_parent); elm_object_text_set(label, "No favorite websites."); evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -332,11 +313,9 @@ Evas_Object* HistoryUI::createNoHistorysLabel() void HistoryUI::setEmptyGengrid(bool setEmpty) { - if(setEmpty) { - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoHistorysLabel()); - } else { - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", NULL); - } + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + Evas_Object *obj = (setEmpty ? createNoHistoryLabel() : nullptr); + elm_object_part_content_set(m_gengrid, "elm.swallow.empty", obj); } void HistoryUI::hide() @@ -350,35 +329,15 @@ void HistoryUI::hide() void HistoryUI::clearItems() { - hide(); BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + hide(); elm_genlist_clear(m_genListToday); elm_gengrid_clear(m_gengrid); elm_genlist_clear(m_genListActionBar); m_map_history_views.clear(); - m_history_item_data.clear(); + _history_item_data.clear(); setEmptyGengrid(true); } -void HistoryUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,in", "over2"); - - // selected manually - elm_gengrid_item_selected_set(item, EINA_TRUE); -} - -void HistoryUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,out", "over2"); - - // unselected manually - elm_gengrid_item_selected_set(item, EINA_FALSE); -} - } } diff --git a/services/HistoryUI/HistoryUI.h b/services/HistoryUI/HistoryUI.h index 89c26a3..20bcc53 100644 --- a/services/HistoryUI/HistoryUI.h +++ b/services/HistoryUI/HistoryUI.h @@ -30,8 +30,8 @@ namespace tizen_browser{ namespace base_ui{ class BROWSER_EXPORT HistoryUI - : public tizen_browser::interfaces::AbstractUIComponent - , public tizen_browser::core::AbstractService + : public tizen_browser::interfaces::AbstractUIComponent + , public tizen_browser::core::AbstractService { public: HistoryUI(); @@ -53,21 +53,14 @@ private: static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _history_grid_content_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); - static Evas_Object* listActionBarContentGet(void *data, Evas_Object *obj, const char *part); - static Evas_Object* listTodayContentGet(void *data, Evas_Object *obj, const char *part); - static void _itemSelected(void * data, Evas_Object * obj, void * event_info); - static void _item_deleted(void *data, Evas_Object *obj); - static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); - static void _deleteHistory(void *data, Evas_Object *obj, void *event_info); + static Evas_Object* _listActionBarContentGet(void *data, Evas_Object *obj, const char *part); static void _clearhistory_clicked(void *data, Evas_Object *obj, void *event_info); + static char* _listTodayTextGet(void* data, Evas_Object* obj , const char* part); + static void _close_clicked_cb(void *data, Evas_Object *obj, void *event_info); + void setEmptyGengrid(bool setEmpty); - static char* listTodayTextGet(void* data, Evas_Object* obj , const char* part); - static void close_clicked_cb(void *data, Evas_Object *obj, void *event_info); -private: - Evas_Object *m_history_layout; - Evas_Object *m_historyitem_layout; Evas_Object *m_genListActionBar; Evas_Object *m_genListToday; Elm_Genlist_Item_Class *m_itemClassActionBar; @@ -76,15 +69,10 @@ private: Evas_Object *m_parent; Elm_Gengrid_Item_Class * m_item_class; std::map m_map_history_views; - bool m_gengridSetup; - std::string edjFilePath; - Evas_Object *createNoHistorysLabel(); - - static void focusItem(void* data, Evas_Object* obj, void* event_info); - static void unFocusItem(void* data, Evas_Object* obj, void* event_info); + std::string m_edjFilePath; + Evas_Object *createNoHistoryLabel(); }; - } } -- 2.7.4 From 146f90a4a967dab0c4c5ffaa1e2cca48568b5328 Mon Sep 17 00:00:00 2001 From: Maciej Skrzypkowski Date: Wed, 12 Aug 2015 14:03:09 +0200 Subject: [PATCH 12/16] Improve sizes of tiles, remove unneeded medium style, small refactoring of white spaces. [Issue#] https://bugs.tizen.org/jira/browse/TT-73 [Problem] Sizes of most visited tiles were wrong. [Cause] N/A [Solution] Fixed style for small tiles, removed style for medium tiles. [Verify] Check if Most visited view has proper tiles sizes. Change-Id: I4d884e3d099056e553c99b492469b8abb03d8b16 Signed-off-by: Maciej Skrzypkowski --- services/MainUI/MainUI.cpp | 122 ++++++------- services/MainUI/MainUI.h | 7 +- services/MainUI/edc/MainUI.edc | 388 ++++++++++++----------------------------- 3 files changed, 170 insertions(+), 347 deletions(-) diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp index d45d22c..173e306 100644 --- a/services/MainUI/MainUI.cpp +++ b/services/MainUI/MainUI.cpp @@ -30,6 +30,8 @@ namespace tizen_browser{ namespace base_ui{ +const int SMALL_TILES_ROWS = 2; + EXPORT_SERVICE(MainUI, "org.tizen.browser.mainui") typedef struct _HistoryItemData @@ -56,7 +58,6 @@ MainUI::MainUI() , m_genListBottom(nullptr) , m_parent(nullptr) , m_big_item_class(nullptr) - , m_medium_item_class(nullptr) , m_small_item_class(nullptr) , m_bookmark_item_class(nullptr) { @@ -80,29 +81,29 @@ void MainUI::show(Evas_Object* parent) evas_object_show(m_layout); m_parent = m_layout; - m_genListMVBig = elm_genlist_add(m_layout); - elm_object_part_content_set(m_layout, "elm.swallow.mvBig", m_genListMVBig); - elm_genlist_homogeneous_set(m_genListMVBig, EINA_FALSE); - elm_genlist_multi_select_set(m_genListMVBig, EINA_FALSE); - elm_genlist_select_mode_set(m_genListMVBig, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genListMVBig, ELM_LIST_LIMIT); - evas_object_size_hint_weight_set(m_genListMVBig, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - m_genListMVMedium = elm_genlist_add(m_layout); - elm_object_part_content_set(m_layout, "elm.swallow.mvMedium", m_genListMVMedium); - elm_genlist_homogeneous_set(m_genListMVMedium, EINA_FALSE); - elm_genlist_multi_select_set(m_genListMVMedium, EINA_FALSE); - elm_genlist_select_mode_set(m_genListMVMedium, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genListMVMedium, ELM_LIST_LIMIT); - evas_object_size_hint_weight_set(m_genListMVMedium, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - m_genListMVSmall = elm_genlist_add(m_layout); - elm_object_part_content_set(m_layout, "elm.swallow.mvSmall", m_genListMVSmall); - elm_genlist_homogeneous_set(m_genListMVSmall, EINA_FALSE); - elm_genlist_multi_select_set(m_genListMVSmall, EINA_FALSE); - elm_genlist_select_mode_set(m_genListMVSmall, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genListMVSmall, ELM_LIST_LIMIT); - evas_object_size_hint_weight_set(m_genListMVSmall, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + m_genListLeft = elm_genlist_add(m_layout); + elm_object_part_content_set(m_layout, "elm.swallow.left", m_genListLeft); + elm_genlist_homogeneous_set(m_genListLeft, EINA_FALSE); + elm_genlist_multi_select_set(m_genListLeft, EINA_FALSE); + elm_genlist_select_mode_set(m_genListLeft, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListLeft, ELM_LIST_LIMIT); + evas_object_size_hint_weight_set(m_genListLeft, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + m_genListCenter = elm_genlist_add(m_layout); + elm_object_part_content_set(m_layout, "elm.swallow.center", m_genListCenter); + elm_genlist_homogeneous_set(m_genListCenter, EINA_FALSE); + elm_genlist_multi_select_set(m_genListCenter, EINA_FALSE); + elm_genlist_select_mode_set(m_genListCenter, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListCenter, ELM_LIST_LIMIT); + evas_object_size_hint_weight_set(m_genListCenter, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + m_genListRight = elm_genlist_add(m_layout); + elm_object_part_content_set(m_layout, "elm.swallow.right", m_genListRight); + elm_genlist_homogeneous_set(m_genListRight, EINA_FALSE); + elm_genlist_multi_select_set(m_genListRight, EINA_FALSE); + elm_genlist_select_mode_set(m_genListRight, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(m_genListRight, ELM_LIST_LIMIT); + evas_object_size_hint_weight_set(m_genListRight, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); if (!m_big_item_class) { m_big_item_class = elm_genlist_item_class_new(); @@ -113,15 +114,6 @@ void MainUI::show(Evas_Object* parent) m_big_item_class->func.del = nullptr; } - if (!m_medium_item_class) { - m_medium_item_class = elm_genlist_item_class_new(); - m_medium_item_class->item_style = "medium_grid_item"; - m_medium_item_class->func.text_get = _grid_text_get; - m_medium_item_class->func.content_get = _grid_content_get; - m_medium_item_class->func.state_get = nullptr; - m_medium_item_class->func.del = nullptr; - } - if (!m_small_item_class) { m_small_item_class = elm_genlist_item_class_new(); m_small_item_class->item_style = "small_grid_item"; @@ -222,7 +214,6 @@ void MainUI::showBottomButton() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); elm_theme_extension_add(nullptr, edjFilePath.c_str()); m_genListBottom = elm_genlist_add(m_layout); - elm_object_part_content_set(m_layout, "elm.swallow.genlistBottom", m_genListBottom); elm_genlist_homogeneous_set(m_genListBottom, EINA_FALSE); elm_genlist_multi_select_set(m_genListBottom, EINA_FALSE); elm_genlist_select_mode_set(m_genListBottom, ELM_OBJECT_SELECT_MODE_ALWAYS); @@ -318,22 +309,16 @@ void MainUI::addHistoryItem(std::shared_ptrmainUI = std::shared_ptr(this); Elm_Object_Item* historyView = nullptr; - switch(m_map_history_views.size()) + if (m_map_history_views.empty()) { - case 0: - BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); - historyView = elm_genlist_item_append(m_genListMVBig, m_big_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); - break; - case 1: - case 2: - BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); - historyView = elm_genlist_item_append(m_genListMVMedium, m_medium_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); - break; - case 3: - case 4: - BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); - historyView = elm_genlist_item_append(m_genListMVSmall, m_small_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); - break; + BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); + historyView = elm_genlist_item_append(m_genListLeft, m_big_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); + } else if (m_map_history_views.size() <= SMALL_TILES_ROWS) { + BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); + historyView = elm_genlist_item_append(m_genListCenter, m_small_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); + } else { + BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size()); + historyView = elm_genlist_item_append(m_genListRight, m_small_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this); } m_map_history_views.insert(std::pair(hi->getUrl(),historyView)); @@ -463,22 +448,24 @@ void MainUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* even void MainUI::clearHistoryGenlist() { - elm_genlist_clear(m_genListMVSmall); - elm_genlist_clear(m_genListMVBig); - elm_genlist_clear(m_genListMVMedium); + elm_genlist_clear(m_genListRight); + elm_genlist_clear(m_genListLeft); + elm_genlist_clear(m_genListCenter); m_map_history_views.clear(); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvBig")); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvSmall")); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvMedium")); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.left")); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.right")); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.center")); } void MainUI::showHistoryGenlist() { - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.grid")); - elm_object_part_content_unset(m_layout, "elm.swallow.grid"); - elm_object_part_content_set(m_layout, "elm.swallow.mvBig", m_genListMVBig); - elm_object_part_content_set(m_layout, "elm.swallow.mvSmall", m_genListMVSmall); - elm_object_part_content_set(m_layout, "elm.swallow.mvMedium", m_genListMVMedium); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.grid")); + elm_object_part_content_unset(m_layout, "elm.swallow.grid"); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.genlistBottom")); + elm_object_part_content_unset(m_layout, "elm.swallow.genlistBottom"); + elm_object_part_content_set(m_layout, "elm.swallow.left", m_genListLeft); + elm_object_part_content_set(m_layout, "elm.swallow.right", m_genListRight); + elm_object_part_content_set(m_layout, "elm.swallow.center", m_genListCenter); } void MainUI::clearBookmarkGengrid() @@ -490,13 +477,14 @@ void MainUI::clearBookmarkGengrid() void MainUI::showBookmarkGengrid() { - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvBig")); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvSmall")); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvMedium")); - elm_object_part_content_unset(m_layout, "elm.swallow.mvBig"); - elm_object_part_content_unset(m_layout, "elm.swallow.mvSmall"); - elm_object_part_content_unset(m_layout, "elm.swallow.mvMedium"); - elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.left")); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.right")); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.center")); + elm_object_part_content_unset(m_layout, "elm.swallow.left"); + elm_object_part_content_unset(m_layout, "elm.swallow.right"); + elm_object_part_content_unset(m_layout, "elm.swallow.center"); + elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid); + elm_object_part_content_set(m_layout, "elm.swallow.genlistBottom", m_genListBottom); } void MainUI::hide() diff --git a/services/MainUI/MainUI.h b/services/MainUI/MainUI.h index c0beb25..bd77d53 100644 --- a/services/MainUI/MainUI.h +++ b/services/MainUI/MainUI.h @@ -77,9 +77,9 @@ private: static void _bookmark_manager_clicked(void * data, Evas_Object * obj, void * event_info); private: Evas_Object *m_genListTop; - Evas_Object *m_genListMVBig; - Evas_Object *m_genListMVMedium; - Evas_Object *m_genListMVSmall; + Evas_Object *m_genListLeft; + Evas_Object *m_genListCenter; + Evas_Object *m_genListRight; Elm_Genlist_Item_Class *m_itemClassTop; Evas_Object *m_genListBottom; Elm_Genlist_Item_Class *m_itemClassBottom; @@ -87,7 +87,6 @@ private: Evas_Object *m_layout; Evas_Object *m_parent; Elm_Gengrid_Item_Class * m_big_item_class; - Elm_Gengrid_Item_Class * m_medium_item_class; Elm_Gengrid_Item_Class * m_small_item_class; Elm_Gengrid_Item_Class * m_bookmark_item_class; std::multimap m_map_history_views; diff --git a/services/MainUI/edc/MainUI.edc b/services/MainUI/edc/MainUI.edc index 8357ec7..f094d4e 100644 --- a/services/MainUI/edc/MainUI.edc +++ b/services/MainUI/edc/MainUI.edc @@ -141,37 +141,38 @@ group { name: "mv_bookmarks"; type: RECT; mouse_events: 0; description { state: "default" 0.0; - color: 255 255 255 255; - min: 1920 181; - max: 1920 181; - align: 0.0 0.0; + color: 255 255 255 255; + min: 0 181; + max: -1 181; + align: 0.0 0.0; fixed: 0 0; rel1 { - relative: 0 0; offset: 0 104; + relative: 0 0; offset: 0 104; } rel2{ - relative: 1 1; + relative: 1 1; } } } - part { name: "gengrid_bg"; + part { name: "gengrid_bg"; type: RECT; mouse_events: 0; description { state: "default" 0.0; - color: 255 255 255 255; - min: 1920 626; - max: 1920 626; - align: 0.0 0.0; + color: 255 255 255 255; + min: 1920 626; + max: -1 626; + align: 0.0 0.0; fixed: 0 0; rel1 { - relative: 0 1; to: "genlistTop_bg"; + to: "genlistTop_bg"; + relative: 0 1; } rel2{ - relative: 1 1; + relative: 1 1; } } } - part { name: "genlistBottom_bg"; + part { name: "genlistBottom_bg"; type: RECT; mouse_events: 0; description { state: "default" 0.0; @@ -205,15 +206,33 @@ group { name: "mv_bookmarks"; } } } - part { name: "elm.swallow.mvBig"; + + part { name: "most_visited"; + type: RECT; + description { state: "default" 0.0; + min: 1592 614; + max: 1592 614; + visible: 0; + align: 0.5 0.0; + rel1 { + to: "gengrid_bg"; + relative: 0 0; + } + rel2 { + to: "gengrid_bg"; + relative: 1 1; + } + } + } + part { name: "elm.swallow.left"; type: SWALLOW; description { state: "default" 0.0; - min: 800 626; - max: 800 626; + min: 784 614; + max: 784 614; align: 0.0 0.0; fixed: 0 0; rel1 { - relative: 0 0; to: "gengrid_bg"; offset: 63 0; + relative: 0 0; to: "most_visited"; } rel2 { relative: 1 1; @@ -221,38 +240,44 @@ group { name: "mv_bookmarks"; } } } - part { name: "elm.swallow.mvMedium"; + part { name: "elm.swallow.center"; type: SWALLOW; description { state: "default" 0.0; - min: 600 626; - max: 600 626; + min: 378 614; + max: 378 614; align: 0.0 0.0; fixed: 0 0; rel1 { - relative: 0 0; to: "gengrid_bg"; offset: 889 0; + to: "most_visited"; + relative: 0 0; + offset: 810 0; } rel2{ + to: "most_visited"; relative: 1 1; offset: 0 0; } - } - } - part { name: "elm.swallow.mvSmall"; + } + } + part { name: "elm.swallow.right"; type: SWALLOW; description { state: "default" 0.0; - min: 342 626; - max: 342 626; + min: 378 614; + max: 378 614; align: 0.0 0.0; fixed: 0 0; rel1 { - relative: 0 0; to: "gengrid_bg"; offset: 1515 0; + to: "most_visited"; + relative: 0 0; + offset: 1214 0; } rel2 { + to: "most_visited"; relative: 1 1; offset: 0 0; } } - } + } part { name: "elm.swallow.genlistTop"; type: SWALLOW; @@ -331,11 +356,10 @@ group { name: "elm/genlist/item/big_grid_item/default"; type: RECT; mouse_events: 0; description { state: "default" 0.0; - min: 800 613; - max: 800 613; + min: 784 614; + max: 784 614; visible: 1; color: 231 231 231 255; - rel1.offset: 0 13; } description { state: "selected"; inherit: "default" 0.0; @@ -349,8 +373,8 @@ group { name: "elm/genlist/item/big_grid_item/default"; fixed: 1 0; align: 0.0 0.0; color : 231 231 231 255; - min: 800 526; - max: 800 526; + min: 784 526; + max: 784 526; rel1 { relative: 0.0 0.0; to: "bg"; } @@ -389,8 +413,8 @@ group { name: "elm/genlist/item/big_grid_item/default"; part { name: "background"; type: RECT; description { state: "default" 0.0; - min: 800 87; - max: 800 87; + min: 784 87; + max: 784 87; align: 0.0 0.0; color: 231 231 231 255; rel1 { @@ -522,7 +546,7 @@ group { name: "elm/genlist/item/big_grid_item/default"; } } -group { name: "elm/genlist/item/medium_grid_item/default"; +group { name: "elm/genlist/item/small_grid_item/default"; data.item: "texts" "page_title page_url"; data.item: "contents" "elm.thumbnail elm.thumbButton"; images { @@ -530,218 +554,30 @@ group { name: "elm/genlist/item/medium_grid_item/default"; image: "ico_bg_round_shape_37x37.png" COMP; } parts { + part { name: "border"; + type: RECT; + description { state: "default" 0.0; + min: 378 320; + max: 378 320; + visible: 0; + } + } + part { name: "bg"; type: RECT; mouse_events: 0; description { state: "default" 0.0; - min: 600 300; - max: 600 300; + min: 378 294; + max: 378 294; visible: 1; color: 231 231 231 255; - rel1.offset: 0 13; - } - description { state: "selected"; - inherit: "default" 0.0; - color: 70 143 254 255; - } - } - - part { name: "elm.thumbnail"; - type: SWALLOW; - description { state: "default" 0.0; - fixed: 1 0; - align: 0.0 0.0; - color : 231 231 231 255; - min: 600 203; - max: 600 203; - rel1 { - relative: 0.0 0.0; to: "bg"; - } - rel2 { - relative: 1.0 1.0; to: "bg"; - } - } - description { state: "selected"; - inherit: "default" 0.0; - } - } - - part { name: "focus_highlight"; - type: IMAGE; - description { state: "default" 0.0; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 0.0; - } - rel2 { - to: "elm.thumbnail"; - relative: 1.0 1.0; - } - image.normal: "web_frame_selected.png"; - image.border: 8 8 8 0; - image.border_scale: 1; - image.middle: NONE; - visible: 0; - } - description { state: "selected"; - inherit: "default" 0.0; - visible: 1; - } - } - - part { name: "background"; - type: RECT; - description { state: "default" 0.0; - min: 600 87; - max: 600 87; - align: 0.0 0.0; - color: 231 231 231 255; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 1.0; - } - rel2 { - relative: 1.0 1.0; - } - } - description { state: "selected" 0.0; - inherit: "default" 0.0; - color: 70 143 254 255; - } - } - - part { name: "page_title"; - type: TEXT; - description { state: "default" 0.0; - min: 500 48; - max: 500 48; - align: 0.0 0.5; - rel1 { - to: "background"; - relative: 0.0 0.0; - offset: 17 0; - } - rel2 { - to: "background"; - relative: 1.0 1.0; - } - color: 51 51 51 255; - text { - text: "Web page title"; - font: "Sans"; - size: 27; - align: 0 0.5; - } + align: 0.0 0.0; + rel1 { + relative: 0.0 0.0; to: "border"; } - description { state: "focus" 0.0; - inherit: "default" 0.0; - //color: focusTextColor; + rel2 { + relative: 1.0 1.0; to: "border"; } - description { state: "highlight" 0.0; - inherit: "default" 0.0; - //color: highlightTextColor; - } - } - - part { name: "page_url"; - type: TEXT; - description { state: "default" 0.0; - min: 500 48; - max: 500 48; - align: 0 0.5; - rel1 { - to: "page_title"; - relative: 0.0 1.0; - } - rel2 { - to: "page_title"; - relative: 1.0 1.0; - } - color: 153 153 153 255; - text { - text: "Web page url"; - font: "Sans"; - size: 24; - align: 0 0.5; - } - } - description { state: "focus" 0.0; - inherit: "default" 0.0; - //color: focusTextColor; - } - description { state: "highlight" 0.0; - inherit: "default" 0.0; - //color: highlightTextColor; - } - } - - part { name: "elm.thumbButton"; - type: SWALLOW; - description { state: "default" 0.0; - rel1.to: "elm.thumbnail"; - rel2.to: "elm.thumbnail"; - } - } - - part { name: "over2"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - rel1.to: "bg"; - rel2.to: "background"; - } - } - part { name: "over3"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - rel1.to: "background"; - rel2.to: "background"; - } - } - } - - programs{ - program { name: "mouse_in"; - signal: "mouse,in"; - source: "over2"; - action: STATE_SET "selected" 0.0; - target: "background"; - target: "focus_highlight"; - target: "bg"; - } - program { name: "mouse_out"; - signal: "mouse,out"; - source: "over2"; - action: STATE_SET "default" 0.0; - target: "background"; - target: "focus_highlight"; - target: "bg"; - } - } -} - -group { name: "elm/genlist/item/small_grid_item/default"; - data.item: "texts" "page_title page_url"; - data.item: "contents" "elm.thumbnail elm.thumbButton"; - images { - image: "web_frame_selected.png" COMP; - image: "ico_bg_round_shape_37x37.png" COMP; - } - parts { - part { name: "bg"; - type: RECT; - mouse_events: 0; - description { state: "default" 0.0; - min: 342 300; - max: 342 300; - visible: 1; - color: 231 231 231 255; - rel1.offset: 0 13; } description { state: "selected"; inherit: "default" 0.0; @@ -1137,7 +973,7 @@ group { name: "elm/genlist/item/top_button_item/default"; data.item: "texts" "mostvisited_text bookmark_text"; data.item: "contents" "mostvisited_click bookmark_click"; parts{ - part { + part { name: "bg_clipper"; scale:1; mouse_events: 1; @@ -1152,7 +988,7 @@ group { name: "elm/genlist/item/top_button_item/default"; rel2 { relative: 1.0 1.0;} } } - part { + part { name: "mostvisited_button"; scale:1; mouse_events: 1; @@ -1163,8 +999,8 @@ group { name: "elm/genlist/item/top_button_item/default"; fixed: 1 1; color: 192 192 192 255; align: 0 0; - min: 348 65; - max: 348 65; + min: 348 64; + max: 348 64; rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 611 58;} rel2 { relative: 1.0 1.0; to: "bg_clipper"; } } @@ -1174,14 +1010,14 @@ group { name: "elm/genlist/item/top_button_item/default"; color_class: focusBgColor; visible: 1; } - description { + description { state: "focus" 0.0; inherit: "default" 0.0; color_class: focusbtBgColor; visible: 1; } } - part{ + part{ name: "mostvisited_text"; type: TEXT; scale: 1; @@ -1191,7 +1027,7 @@ group { name: "elm/genlist/item/top_button_item/default"; rel1 { relative: 0.0 0.0;to: "mostvisited_button";} rel2 { relative: 1.0 1.0;to: "mostvisited_button";} color: 0 0 0 255; - text { + text { text: "Most visited"; font: "Sans"; size: 27; @@ -1199,7 +1035,7 @@ group { name: "elm/genlist/item/top_button_item/default"; } } } - part { + part { name: "mostvisited_over"; scale:1; type: RECT; @@ -1209,14 +1045,14 @@ group { name: "elm/genlist/item/top_button_item/default"; visible: 1; align: 0 0; fixed: 1 1; - min: 348 65; - max: 348 65; + min: 348 64; + max: 348 64; rel1 { relative: 0.0 0.0; to: "mostvisited_button";} rel2 { relative: 1.0 1.0; to: "mostvisited_button";} color_class: transparent; } } - part { + part { name: "mostvisited_click"; scale:1; type: SWALLOW; @@ -1226,13 +1062,13 @@ group { name: "elm/genlist/item/top_button_item/default"; visible: 1; align: 0 0; fixed: 1 1; - min: 348 65; - max: 348 65; - rel1 { relative: 0.0 0.0; to: "mostvisited_over";} - rel2 { relative: 1.0 1.0; to: "mostvisited_over";} + min: 348 64; + max: 348 64; + rel1 { relative: 0.0 0.0; to: "mostvisited_button";} + rel2 { relative: 1.0 1.0; to: "mostvisited_button";} } } - part { + part { name: "bookmark_button"; scale:1; mouse_events: 1; @@ -1243,8 +1079,8 @@ group { name: "elm/genlist/item/top_button_item/default"; fixed: 1 1; color: 192 192 192 255; align: 0 0; - min: 348 65; - max: 348 65; + min: 348 64; + max: 348 64; rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 961 58;} rel2 { relative: 1.0 1.0; to: "bg_clipper"; } } @@ -1261,7 +1097,7 @@ group { name: "elm/genlist/item/top_button_item/default"; visible: 1; } } - part{ + part{ name: "bookmark_text"; type: TEXT; scale: 1; @@ -1271,7 +1107,7 @@ group { name: "elm/genlist/item/top_button_item/default"; rel1 { relative: 0.0 0.0;to: "bookmark_button";} rel2 { relative: 1.0 1.0;to: "bookmark_button";} color: 0 0 0 255; - text { + text { text: "Bookmark"; font: "Sans"; size: 27; @@ -1279,7 +1115,7 @@ group { name: "elm/genlist/item/top_button_item/default"; } } } - part { + part { name: "bookmark_over"; scale:1; type: RECT; @@ -1289,8 +1125,8 @@ group { name: "elm/genlist/item/top_button_item/default"; visible: 1; align: 0 0; fixed: 1 1; - min: 348 65; - max: 348 65; + min: 348 64; + max: 348 64; rel1 { relative: 0.0 0.0; to: "bookmark_button";} rel2 { relative: 1.0 1.0; to: "bookmark_button";} color_class: transparent; @@ -1306,8 +1142,8 @@ group { name: "elm/genlist/item/top_button_item/default"; visible: 1; align: 0 0; fixed: 1 1; - min: 348 65; - max: 348 65; + min: 348 64; + max: 348 64; rel1 { relative: 0.0 0.0; to: "bookmark_over";} rel2 { relative: 1.0 1.0; to: "bookmark_over";} color_class: transparent; @@ -1323,7 +1159,7 @@ group { name: "elm/genlist/item/top_button_item/default"; emit("elm,action,click", ""); } } - program { + program { name: "mouse_in_mostvisited_click"; signal: "mouse,in"; source: "mostvisited_*"; @@ -1349,7 +1185,7 @@ group { name: "elm/genlist/item/top_button_item/default"; emit("elm,action,click", ""); } } - program { + program { name: "mouse_in_bookmark_click"; signal: "mouse,in"; source: "bookmark_*"; @@ -1367,7 +1203,7 @@ group { name: "elm/genlist/item/top_button_item/default"; target: "bookmark_over"; target: "mostvisited_text"; } - } + } } } @@ -1377,7 +1213,7 @@ group { name: "elm/genlist/item/bottom_button_item/default"; data.item: "texts" "bookmarkmanager_text"; data.item: "contents" "bookmarkmanager_click"; parts{ - part { + part { name: "bg_clipper"; scale:1; mouse_events: 1; @@ -1392,7 +1228,7 @@ group { name: "elm/genlist/item/bottom_button_item/default"; rel2 { relative: 1.0 1.0;} } } - part { + part { name: "bookmarkmanager_button"; scale:1; mouse_events: 1; @@ -1421,7 +1257,7 @@ group { name: "elm/genlist/item/bottom_button_item/default"; visible: 1; } } - part{ + part{ name: "bookmarkmanager_text"; type: TEXT; scale: 1; @@ -1431,7 +1267,7 @@ group { name: "elm/genlist/item/bottom_button_item/default"; rel1 { relative: 0.0 0.0;to: "bookmarkmanager_button";} rel2 { relative: 1.0 1.0;to: "bookmarkmanager_button";} color: 0 0 0 255; - text { + text { text: "Bookmark Manager"; font: "Sans"; size: 27; @@ -1439,7 +1275,7 @@ group { name: "elm/genlist/item/bottom_button_item/default"; } } } - part { + part { name: "bookmarkmanager_over"; scale:1; type: RECT; @@ -1456,7 +1292,7 @@ group { name: "elm/genlist/item/bottom_button_item/default"; color_class: transparent; } } - part { + part { name: "bookmarkmanager_click"; scale:1; type: SWALLOW; @@ -1482,7 +1318,7 @@ group { name: "elm/genlist/item/bottom_button_item/default"; emit("elm,action,click", ""); } } - program { + program { name: "mouse_in_bookmarkmanager_click"; signal: "mouse,in"; source: "bookmarkmanager_*"; -- 2.7.4 From 2e79d3bfb763dd55387dbb0df445c28c2bad8f15 Mon Sep 17 00:00:00 2001 From: Marcin Lapinski Date: Wed, 12 Aug 2015 15:31:53 +0200 Subject: [PATCH 13/16] Added action on clear history button clicked. [Issue#] https://bugs.tizen.org/jira/browse/TT-99 [Problem] 'Clear History' button does not work. [Cause] Buttons callback was empty. [Solution] Trigger history clear on button click. [Verify] 1. (History is not empty) 2. Open More menu -> history. 3. Click 'Clear History' button. 4. History should be deleted. Change-Id: I7d9b5d40451398d21ef88359f37660261ce1e6e6 --- services/HistoryUI/HistoryUI.cpp | 33 ++++++++++----------------------- services/HistoryUI/HistoryUI.h | 7 ++++--- services/SimpleUI/SimpleUI.cpp | 7 +++++++ services/SimpleUI/SimpleUI.h | 4 +++- 4 files changed, 24 insertions(+), 27 deletions(-) diff --git a/services/HistoryUI/HistoryUI.cpp b/services/HistoryUI/HistoryUI.cpp index c2724da..c562a18 100644 --- a/services/HistoryUI/HistoryUI.cpp +++ b/services/HistoryUI/HistoryUI.cpp @@ -125,28 +125,14 @@ void HistoryUI::showActionBar() m_itemClassActionBar->func.state_get = nullptr; m_itemClassActionBar->func.del = nullptr; - ItemData *id = new ItemData; - id->historyUI = this; Elm_Object_Item *elmItem = elm_genlist_item_append(m_genListActionBar, //genlist m_itemClassActionBar, //item Class - id, + this, nullptr, //parent item ELM_GENLIST_ITEM_NONE, //item type nullptr, nullptr //data passed to above function ); - id->e_item = elmItem; - ItemData *id2 = new ItemData; - id2->historyUI = this; - Elm_Object_Item *elmItem2 = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - id2, - nullptr, //parent item - ELM_GENLIST_ITEM_NONE, //item type - nullptr, - nullptr //data passed to above function - ); - id2->e_item = elmItem2; } Evas_Object* HistoryUI::_listActionBarContentGet(void* data, Evas_Object* obj , const char* part) @@ -161,7 +147,7 @@ Evas_Object* HistoryUI::_listActionBarContentGet(void* data, Evas_Object* obj , if (!strncmp(part_name1, part, part_name1_len)) { Evas_Object *clearHistoryButton = elm_button_add(obj); elm_object_style_set(clearHistoryButton, "history_button"); - evas_object_smart_callback_add(clearHistoryButton, "clicked", tizen_browser::base_ui::HistoryUI::_clearhistory_clicked, data); + evas_object_smart_callback_add(clearHistoryButton, "clicked", HistoryUI::_clearHistory_clicked, data); return clearHistoryButton; } if (!strncmp(part_name2, part, part_name2_len)) { @@ -178,9 +164,9 @@ void HistoryUI::_close_clicked_cb(void * data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { - ItemData *id = static_cast(data); - id->historyUI->closeHistoryUIClicked(std::string()); - id->historyUI->clearItems(); + HistoryUI *historyUI = static_cast(data); + historyUI->closeHistoryUIClicked(std::string()); + historyUI->clearItems(); } } @@ -202,12 +188,13 @@ char* HistoryUI::_listTodayTextGet(void* data, Evas_Object*, const char* part) return nullptr; } -void HistoryUI::_clearhistory_clicked(void*, Evas_Object*, void*) +void HistoryUI::_clearHistory_clicked(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -// ItemData *itemData = static_cast(data); -// itemData->tabUI->clearItems(); -// itemData->tabUI->newTabClicked(std::string()); + + HistoryUI *historyUI = static_cast(data); + historyUI->clearHistoryClicked(std::string()); + historyUI->clearItems(); } void HistoryUI::addItems() diff --git a/services/HistoryUI/HistoryUI.h b/services/HistoryUI/HistoryUI.h index 20bcc53..4556327 100644 --- a/services/HistoryUI/HistoryUI.h +++ b/services/HistoryUI/HistoryUI.h @@ -43,18 +43,19 @@ public: void removeHistoryItem(const std::string& uri); void clearItems(); void hide(); - void showActionBar(); + void showActionBar(); void show(Evas_Object *main_layout); void addItems(); boost::signals2::signal closeHistoryUIClicked; + boost::signals2::signal clearHistoryClicked; boost::signals2::signal)> historyItemClicked; boost::signals2::signal)> historyDeleteClicked; private: static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); - static Evas_Object * _history_grid_content_get(void *data, Evas_Object *obj, const char *part); + static Evas_Object * _history_grid_content_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); static Evas_Object* _listActionBarContentGet(void *data, Evas_Object *obj, const char *part); - static void _clearhistory_clicked(void *data, Evas_Object *obj, void *event_info); + static void _clearHistory_clicked(void *data, Evas_Object *obj, void *event_info); static char* _listTodayTextGet(void* data, Evas_Object* obj , const char* part); static void _close_clicked_cb(void *data, Evas_Object *obj, void *event_info); diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 0ccc4d0..4aa6931 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -588,6 +588,12 @@ void SimpleUI::onHistoryClicked(std::shared_ptrclearAllHistory(); +} + void SimpleUI::onMostVisitedClicked(const std::string&) { BROWSER_LOGD("[%s]", __func__); @@ -1057,6 +1063,7 @@ void SimpleUI::showHistoryUI(const std::string& str) std::dynamic_pointer_cast (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,_1)); m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onHistoryClicked, this,_1)); m_historyUI->addHistoryItems(getHistory()); diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index 31bd390..482fcde 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -132,6 +132,8 @@ private: void onHistoryAdded(std::shared_ptr historyItem); void onHistoryRemoved(const std::string& uri); void onHistoryClicked(std::shared_ptr historyItem); + void onClearHistoryClicked(const std::string&); + void onMostVisitedClicked(const std::string&); void onBookmarkButtonClicked(const std::string&); void onBookmarkManagerButtonClicked(const std::string&); @@ -225,7 +227,7 @@ private: void showMoreMenu(); void closeMoreMenu(const std::string& str); void showHistoryUI(const std::string& str); - void closeHistoryUI(const std::string& str); + void closeHistoryUI(const std::string&); void showMainUI(); void hideMainUI(); void showURIBar(); -- 2.7.4 From 0fd97134fc1fb5a49e44279c777eae023833d0ae Mon Sep 17 00:00:00 2001 From: Marcin Lapinski Date: Thu, 13 Aug 2015 11:58:37 +0200 Subject: [PATCH 14/16] Refactor of HistoryUI::showActionBar function. [Issue#] https://bugs.tizen.org/jira/browse/TT-72 [Problem] HistoryUI::showActionBar is too complicated. Uses unnecessary genlist, with only one item to create action bar. This makes code long and unclear as it is not the proper use of genlist. [Cause] N/A [Solution] Use layout instead the genlist to make the code shorter and more self-explaining. [Verify] 1. Browser builds. 2. Run the browser and check history ui to see if the change is not introducing any new issues. Change-Id: I9b1ad458d7497af9d85741978e844ebb4f918079 --- services/HistoryUI/HistoryUI.cpp | 72 +++++++++++--------------------------- services/HistoryUI/HistoryUI.h | 3 +- services/HistoryUI/edc/History.edc | 12 +++---- 3 files changed, 26 insertions(+), 61 deletions(-) diff --git a/services/HistoryUI/HistoryUI.cpp b/services/HistoryUI/HistoryUI.cpp index c562a18..11ab3ed 100644 --- a/services/HistoryUI/HistoryUI.cpp +++ b/services/HistoryUI/HistoryUI.cpp @@ -48,7 +48,7 @@ static std::vector _history_item_data; HistoryUI::HistoryUI() : m_history_layout(nullptr) - , m_genListActionBar(nullptr) + , m_actionBar(nullptr) , m_genListToday(nullptr) , m_itemClassToday(nullptr) , m_gengrid(nullptr) @@ -108,56 +108,25 @@ void HistoryUI::show(Evas_Object* parent) void HistoryUI::showActionBar() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); - m_genListActionBar = elm_genlist_add(m_history_layout); - elm_object_part_content_set(m_history_layout, "action_bar_history_genlist", m_genListActionBar); - elm_genlist_homogeneous_set(m_genListActionBar, EINA_FALSE); - elm_genlist_multi_select_set(m_genListActionBar, EINA_FALSE); - elm_genlist_select_mode_set(m_genListActionBar, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genListActionBar, ELM_LIST_LIMIT); - elm_genlist_decorate_mode_set(m_genListActionBar, EINA_TRUE); - evas_object_size_hint_weight_set(m_genListActionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - m_itemClassActionBar = elm_genlist_item_class_new(); - m_itemClassActionBar->item_style = "action_bar_history_items"; - m_itemClassActionBar->func.text_get = nullptr; // &listTopItemTextGet; - m_itemClassActionBar->func.content_get = &_listActionBarContentGet; - m_itemClassActionBar->func.state_get = nullptr; - m_itemClassActionBar->func.del = nullptr; - - Elm_Object_Item *elmItem = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - this, - nullptr, //parent item - ELM_GENLIST_ITEM_NONE, //item type - nullptr, - nullptr //data passed to above function - ); -} -Evas_Object* HistoryUI::_listActionBarContentGet(void* data, Evas_Object* obj , const char* part) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (obj && part) { - const char *part_name1 = "clearhistory_click"; - static const int part_name1_len = strlen(part_name1); - const char *part_name2 = "close_click"; - static const int part_name2_len = strlen(part_name2); - - if (!strncmp(part_name1, part, part_name1_len)) { - Evas_Object *clearHistoryButton = elm_button_add(obj); - elm_object_style_set(clearHistoryButton, "history_button"); - evas_object_smart_callback_add(clearHistoryButton, "clicked", HistoryUI::_clearHistory_clicked, data); - return clearHistoryButton; - } - if (!strncmp(part_name2, part, part_name2_len)) { - Evas_Object *close_click = elm_button_add(obj); - elm_object_style_set(close_click, "history_button"); - evas_object_smart_callback_add(close_click, "clicked", HistoryUI::_close_clicked_cb, data); - return close_click; - } - } - return nullptr; + m_actionBar = elm_layout_add(m_history_layout); + elm_object_part_content_set(m_history_layout, "action_bar_history", m_actionBar); + evas_object_size_hint_weight_set(m_actionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_actionBar, EVAS_HINT_FILL, EVAS_HINT_FILL); + + elm_layout_file_set(m_actionBar, m_edjFilePath.c_str(), "action_bar"); + + Evas_Object *button = elm_button_add(m_actionBar); + elm_object_style_set(button, "history_button"); + evas_object_smart_callback_add(button, "clicked", HistoryUI::_clearHistory_clicked, this); + elm_object_part_content_set(m_actionBar, "clearhistory_click", button); + + button = elm_button_add(m_actionBar); + elm_object_style_set(button, "history_button"); + evas_object_smart_callback_add(button, "clicked", HistoryUI::_close_clicked_cb, this); + elm_object_part_content_set(m_actionBar, "close_click", button); + + evas_object_show(m_actionBar); } void HistoryUI::_close_clicked_cb(void * data, Evas_Object*, void*) @@ -310,7 +279,7 @@ void HistoryUI::hide() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); evas_object_hide(elm_layout_content_get(m_history_layout, "m_genListToday")); evas_object_hide(elm_layout_content_get(m_history_layout, "m_gengrid")); - evas_object_hide(elm_layout_content_get(m_history_layout, "m_genListActionBar")); + evas_object_hide(elm_layout_content_get(m_history_layout, "m_ActionBar")); evas_object_hide(m_history_layout); } @@ -320,7 +289,6 @@ void HistoryUI::clearItems() hide(); elm_genlist_clear(m_genListToday); elm_gengrid_clear(m_gengrid); - elm_genlist_clear(m_genListActionBar); m_map_history_views.clear(); _history_item_data.clear(); setEmptyGengrid(true); diff --git a/services/HistoryUI/HistoryUI.h b/services/HistoryUI/HistoryUI.h index 4556327..7070ff8 100644 --- a/services/HistoryUI/HistoryUI.h +++ b/services/HistoryUI/HistoryUI.h @@ -62,9 +62,8 @@ private: void setEmptyGengrid(bool setEmpty); Evas_Object *m_history_layout; - Evas_Object *m_genListActionBar; + Evas_Object *m_actionBar; Evas_Object *m_genListToday; - Elm_Genlist_Item_Class *m_itemClassActionBar; Elm_Genlist_Item_Class *m_itemClassToday; Evas_Object *m_gengrid; Evas_Object *m_parent; diff --git a/services/HistoryUI/edc/History.edc b/services/HistoryUI/edc/History.edc index 4f36aef..cda9200 100644 --- a/services/HistoryUI/edc/History.edc +++ b/services/HistoryUI/edc/History.edc @@ -109,7 +109,7 @@ group { image: "web_shadow.png" COMP; } parts { - part { name: "action_bar_history_genlist_bg"; + part { name: "action_bar_bg"; type: RECT; mouse_events: 0; description { state: "default" 0.0; @@ -136,7 +136,7 @@ group { max: 1920 976; color: 231 231 231 255; rel1 { - relative: 0 1; to: "action_bar_history_genlist_bg"; + relative: 0 1; to: "action_bar_bg"; } rel2{ @@ -144,7 +144,7 @@ group { } } } - part { name: "action_bar_history_genlist"; + part { name: "action_bar_history"; type : SWALLOW; scale: 1; description { @@ -154,7 +154,7 @@ group { max: 1920 104; align: 0.0 0.0; fixed: 0 0; - rel1 { relative: 0.0 0.0; to: "action_bar_history_genlist_bg";} + rel1 { relative: 0.0 0.0; to: "action_bar_bg";} rel2 { relative: 1.0 1.0; } } description { @@ -200,7 +200,6 @@ group { min: 500 600; max: 500 600; data.item: "texts" "history_url_text"; - //data.item: "contents" "clearhistory_click"; parts{ part { name: "bg_clipper"; @@ -254,10 +253,9 @@ group { } } - group { name: "elm/genlist/item/action_bar_history_items/default"; + group { name: "action_bar"; min: 1920 104; max: 1920 104; - data.item: "texts" "clearhistory_text"; data.item: "contents" "clearhistory_click close_click"; parts{ part { -- 2.7.4 From ce14505e000b735ff8fcb63dc7ba124447e865e9 Mon Sep 17 00:00:00 2001 From: Albert Malewski Date: Wed, 12 Aug 2015 12:32:04 +0200 Subject: [PATCH 15/16] Fixed tabs addition [Issue#] https://bugs.tizen.org/jira/browse/TT-92 [Problem] Multiple tabs are added when navigating a page from Most Visited or Bookmarks. [Cause] Slots were added to signals every time the ShowMainUI function was called. [Solution] Changed time of adding slots. Now they are added in function exec only once (if m_initialised is false). [Verify] Launch Browser > Create new tabs > Obs Number of open tabs should be correct. Change-Id: I0401061a1cc75984c739a582be6bb83465849556 --- services/SimpleUI/SimpleUI.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 4aa6931..7c821c8 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -298,6 +298,16 @@ int SimpleUI::exec(const std::string& _url) } m_initialised = true; + m_mainUI = std::dynamic_pointer_cast + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.mainui")); + M_ASSERT(m_mainUI.get()); + + m_historyService->historyAllDeleted.connect(boost::bind(&tizen_browser::base_ui::MainUI::clearHistoryGenlist, m_mainUI.get())); + m_mainUI->historyClicked.connect(boost::bind(&SimpleUI::onHistoryClicked, this,_1)); + m_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this,_1)); + m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this,_1)); + m_mainUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this,_1)); + // only when first run if (url.empty()) { BROWSER_LOGD("[%s]: changing to homeUrl", __func__); @@ -1043,16 +1053,11 @@ void SimpleUI::showMainUI() std::dynamic_pointer_cast (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.mainui")); - M_ASSERT(m_mainUI); + M_ASSERT(m_mainUI); hideWebView(); - m_mainUI->show(m_window.get()); + m_mainUI->show(m_window.get()); m_mainUI->addHistoryItems(getHistory()); - m_historyService->historyAllDeleted.connect(boost::bind(&tizen_browser::base_ui::MainUI::clearHistoryGenlist, m_mainUI.get())); - m_mainUI->historyClicked.connect(boost::bind(&SimpleUI::onHistoryClicked, this,_1)); - m_mainUI->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this,_1)); - m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this,_1)); - m_mainUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this,_1)); m_isHomePageActive = true; } -- 2.7.4 From e1880e27029ccdbf44ef15de4707e8c08e219635 Mon Sep 17 00:00:00 2001 From: Marcin Lapinski Date: Mon, 17 Aug 2015 14:28:24 +0200 Subject: [PATCH 16/16] Disabled START_MINIBROWSER and READ_MODE features [Issue#] https://bugs.tizen.org/jira/browse/TT-129 [Problem] N/A [Cause] N/A [Solution] N/A [Verify] 1. Change builds. 2. Feature buttons in More Menu should be not visible. Change-Id: I9aec51faabafb9503a31e30955cd92d0ed31b10b --- services/MoreMenuUI/MoreMenuUI.cpp | 16 +++++++++++++++- services/MoreMenuUI/MoreMenuUI.h | 7 ++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/services/MoreMenuUI/MoreMenuUI.cpp b/services/MoreMenuUI/MoreMenuUI.cpp index 2670648..ff31301 100644 --- a/services/MoreMenuUI/MoreMenuUI.cpp +++ b/services/MoreMenuUI/MoreMenuUI.cpp @@ -282,7 +282,7 @@ void MoreMenuUI::hide() void MoreMenuUI::addItems() { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - for (size_t i = 0; i < 10; i++) { + for (size_t i = 0; i < static_cast(END_OF_RANGE); i++) { MoreMenuItemData *itemData = new MoreMenuItemData(); itemData->item = static_cast(i);; itemData->moreMenuUI = std::shared_ptr(this); @@ -304,9 +304,11 @@ char* MoreMenuUI::_grid_text_get(void* data, Evas_Object*, const char* part) if (!strncmp(part_name, part, part_name_len)) { const char* item_name = NULL; switch (itemData->item) { +#ifdef READER_MODE_ENABLED case READER_MODE: item_name = "Reader mode"; break; +#endif case BOOKMARK_MANAGER: item_name = "Bookmark manager"; break; @@ -316,9 +318,11 @@ char* MoreMenuUI::_grid_text_get(void* data, Evas_Object*, const char* part) case SCREEN_ZOOM: item_name = "Screen zoom"; break; +#ifdef START_MINIBROWSER_ENABLED case START_MINIBROWSER: item_name = "Start minibrowser"; break; +#endif case FOCUS_MODE: item_name = "Focus mode"; break; @@ -347,9 +351,11 @@ static const char* getImageFileNameForType(ItemType type, bool focused) { const char* file_name = NULL; switch (type) { +#ifdef READER_MODE_ENABLED case READER_MODE: file_name = focused ? "ic_more_readermode_foc.png" : "ic_more_readermode_nor.png"; break; +#endif case BOOKMARK_MANAGER: file_name = focused ? "ic_more_bookmark_foc.png" : "ic_more_bookmark_nor.png"; break; @@ -359,9 +365,11 @@ static const char* getImageFileNameForType(ItemType type, bool focused) case SCREEN_ZOOM: file_name = focused ? "ic_more_zoom_foc.png" : "ic_more_zoom_nor.png"; break; +#ifdef START_MINIBROWSER_ENABLED case START_MINIBROWSER: file_name = focused ? "ic_more_minibrowser_foc.png" : "ic_more_minibrowser_nor.png"; break; +#endif case FOCUS_MODE: file_name = focused ? "ic_more_focusmode_foc.png" : "ic_more_focusmode_nor.png"; break; @@ -455,9 +463,15 @@ void MoreMenuUI::_thumbSelected(void* data, Evas_Object*, void*) case BOOKMARK_MANAGER: itemData->moreMenuUI->bookmarkManagerClicked(std::string()); break; +#ifdef READER_MODE_ENABLED case READER_MODE: + //TODO: Implement reader mode +#endif case SCREEN_ZOOM: +#ifdef START_MINIBROWSER_ENABLED case START_MINIBROWSER: + //TODO: Implement minibrowser launching +#endif case FOCUS_MODE: case VIEW_MOBILE_WEB: case SHARE: diff --git a/services/MoreMenuUI/MoreMenuUI.h b/services/MoreMenuUI/MoreMenuUI.h index a837fad..1d87456 100644 --- a/services/MoreMenuUI/MoreMenuUI.h +++ b/services/MoreMenuUI/MoreMenuUI.h @@ -38,16 +38,21 @@ namespace base_ui{ class SimpleUI; enum ItemType { +#ifdef READER_MODE_ENABLED READER_MODE, +#endif BOOKMARK_MANAGER, HISTORY, SCREEN_ZOOM, +#ifdef START_MINIBROWSER_ENABLED START_MINIBROWSER, +#endif FOCUS_MODE, VIEW_MOBILE_WEB, SHARE, SETTINGS, - EXIT_BROWSER + EXIT_BROWSER, + END_OF_RANGE } item; class BROWSER_EXPORT MoreMenuUI -- 2.7.4