From f3c7262dd08ea78fa364c2012b51b3b3f085e008 Mon Sep 17 00:00:00 2001 From: "k.lis2" Date: Wed, 29 Jul 2015 15:44:44 +0200 Subject: [PATCH] Task TT-75 Implement "Main page loading UI" view Merge main page UI from the new ui imeplementation. This commit includes the following major changes: * Remove BookmarksUI service * Add MainUI service * Add BookmarksManager * Merge all changes in SimpleUI, code which refers to parts which are to be merged in consecutive tasks is currently ifdef'ed * Merge all changes in BookmarkService and HistoryService Change-Id: Idbdfd334d61af3370be79fa936a31a5e044e514c --- browser_config.h | 3 + core/AbstractInterfaces/AbstractFavoriteService.h | 31 +- core/Config/Config.h | 2 - core/Tools/BookmarkItem.cpp | 1 - core/Tools/BookmarkItem.h | 14 +- core/main.cpp | 5 +- scripts/astylerc | 20 + services/BookmarkService/BookmarkService.cpp | 1260 +++++++++++++++- services/BookmarkService/BookmarkService.h | 78 +- services/BookmarksUI/BookmarksUI.cpp | 276 ---- services/BookmarksUI/BookmarksUI.h | 75 - services/BookmarksUI/edc/Bookmarks.edc | 440 ------ services/BookmarksUI/images/ico_delete.png | Bin 18365 -> 0 bytes services/CMakeLists.txt | 11 +- services/HistoryService/CMakeLists.txt | 4 +- services/HistoryService/{src => }/HistoryItem.cpp | 12 + services/HistoryService/HistoryItem.h | 8 +- services/HistoryService/HistoryService.cpp | 396 +++++ services/HistoryService/HistoryService.h | 9 +- services/HistoryService/src/HistoryService.cpp | 256 ---- services/{BookmarksUI => MainUI}/CMakeLists.txt | 16 +- services/MainUI/MainUI.cpp | 559 ++++++++ services/MainUI/MainUI.h | 106 ++ services/MainUI/edc/MainUI.edc | 1505 ++++++++++++++++++++ services/{BookmarksUI => MainUI}/edc/error.edc | 0 .../images/web_frame_selected.png | Bin .../images/web_shadow.png} | Bin 18109 -> 17700 bytes .../PlatformInputManager/PlatformInputManager.cpp | 5 +- services/SimpleUI/BookmarksManager.cpp | 411 ++++++ services/SimpleUI/BookmarksManager.h | 99 ++ services/SimpleUI/CMakeLists.txt | 31 +- services/SimpleUI/HistoryList.cpp | 8 + services/SimpleUI/SimplePopup.cpp | 9 +- services/SimpleUI/SimpleUI.cpp | 801 +++++++---- services/SimpleUI/SimpleUI.h | 114 +- services/SimpleUI/edc/BookmarksManager.edc | 574 ++++++++ services/SimpleUI/edc/LeftButtonBar.edc | 39 +- services/SimpleUI/edc/MainLayout.edc | 64 +- services/SimpleUI/edc/RightButtonBar.edc | 92 +- services/SimpleUI/edc/webview.edc | 91 ++ services/SimpleUI/images/Black_dot.png | Bin 0 -> 1232 bytes services/SimpleUI/images/btn_bar_back_nor.png | Bin 0 -> 3362 bytes services/SimpleUI/images/btn_bar_forward_nor.png | Bin 0 -> 3385 bytes services/SimpleUI/images/btn_bar_manager_nor.png | Bin 0 -> 2988 bytes services/SimpleUI/images/btn_bar_more_nor.png | Bin 0 -> 3032 bytes services/SimpleUI/images/btn_bar_reload_nor.png | Bin 0 -> 3547 bytes services/SimpleUI/images/btn_bar_stop_nor.png | Bin 0 -> 3255 bytes .../SimpleUI/images/btn_bar_vertical_settings.png | Bin 0 -> 3123 bytes services/SimpleURI/edc/URIEntry.edc | 198 +-- .../WebKitEngineService/WebKitEngineService.cpp | 28 +- services/WebKitEngineService/WebView.cpp | 37 +- 51 files changed, 5940 insertions(+), 1748 deletions(-) create mode 100644 scripts/astylerc delete mode 100644 services/BookmarksUI/BookmarksUI.cpp delete mode 100644 services/BookmarksUI/BookmarksUI.h delete mode 100644 services/BookmarksUI/edc/Bookmarks.edc delete mode 100644 services/BookmarksUI/images/ico_delete.png rename services/HistoryService/{src => }/HistoryItem.cpp (92%) create mode 100644 services/HistoryService/HistoryService.cpp delete mode 100644 services/HistoryService/src/HistoryService.cpp rename services/{BookmarksUI => MainUI}/CMakeLists.txt (62%) create mode 100644 services/MainUI/MainUI.cpp create mode 100644 services/MainUI/MainUI.h create mode 100644 services/MainUI/edc/MainUI.edc rename services/{BookmarksUI => MainUI}/edc/error.edc (100%) rename services/{BookmarksUI => MainUI}/images/web_frame_selected.png (100%) rename services/{BookmarksUI/images/ico_bg_round_shape_37x37.png => MainUI/images/web_shadow.png} (91%) create mode 100644 services/SimpleUI/BookmarksManager.cpp create mode 100644 services/SimpleUI/BookmarksManager.h create mode 100644 services/SimpleUI/edc/BookmarksManager.edc create mode 100644 services/SimpleUI/edc/webview.edc create mode 100644 services/SimpleUI/images/Black_dot.png create mode 100644 services/SimpleUI/images/btn_bar_back_nor.png create mode 100644 services/SimpleUI/images/btn_bar_forward_nor.png create mode 100644 services/SimpleUI/images/btn_bar_manager_nor.png create mode 100644 services/SimpleUI/images/btn_bar_more_nor.png create mode 100644 services/SimpleUI/images/btn_bar_reload_nor.png create mode 100644 services/SimpleUI/images/btn_bar_stop_nor.png create mode 100644 services/SimpleUI/images/btn_bar_vertical_settings.png diff --git a/browser_config.h b/browser_config.h index 6d4258b..3ccb510 100644 --- a/browser_config.h +++ b/browser_config.h @@ -21,4 +21,7 @@ #define PLATFORM(_pl) (defined PLATFORM_##_pl && PLATFORM_##_pl) +// Remove this define when merging from new ui implementation is finished +#define MERGE_ME 0 + #endif diff --git a/core/AbstractInterfaces/AbstractFavoriteService.h b/core/AbstractInterfaces/AbstractFavoriteService.h index a940058..5c24c4f 100644 --- a/core/AbstractInterfaces/AbstractFavoriteService.h +++ b/core/AbstractInterfaces/AbstractFavoriteService.h @@ -25,10 +25,6 @@ #include "browser_config.h" -#include -#include -#include - #include "AbstractService.h" #include "service_macros.h" #include "BookmarkItem.h" @@ -62,7 +58,19 @@ public: std::shared_ptr thumbnail=std::shared_ptr(), std::shared_ptr favicon = std::shared_ptr(), unsigned int dirId = 0) = 0; - /** + /** + * @brief Creates a new folder with name "title" in a folder with id, parent_id + * @return folder_id of created folder + */ + virtual int save_folder(const char *title, int *saved_bookmark_id, int parent_id=0, int by_operator=0)=0; + + /** + * @brief get folder id of a folder with name "title" in folder with id, parent_id + * @return true if found, false otherwise + */ + virtual bool get_folder_id(const char *title, int parent_id, int *folder_id) = 0 ; + + /** * @brief Count bookmarks and subfolders * @return Number of bookmarks and subfolders */ @@ -77,11 +85,18 @@ public: virtual bool bookmarkExists(const std::string & url)= 0; /** - * @brief Get bookmarks from platform service and store it in private m_bookmarksList + * @brief Get bookmarks in a folder from platform service and store it in private m_bookmarksList + * + * @return list of bookmark items in folder with id, folder_id + */ + virtual std::vector > getBookmarks(int folder_id = 0)= 0; + + /** + * @brief Get bookmark folders from platform service and store it in private m_bookmarkFoldersList * - * @return list of bookmark items + * @return list of bookmark folders */ - virtual std::vector > getBookmarks()= 0; + virtual std::vector > getBookmarkFolders()= 0; /** * @brief Delete all bookmarks diff --git a/core/Config/Config.h b/core/Config/Config.h index cd82869..b342c86 100644 --- a/core/Config/Config.h +++ b/core/Config/Config.h @@ -21,8 +21,6 @@ #include #include -//#include -//#include namespace tizen_browser { diff --git a/core/Tools/BookmarkItem.cpp b/core/Tools/BookmarkItem.cpp index 10f7c23..3f994fd 100644 --- a/core/Tools/BookmarkItem.cpp +++ b/core/Tools/BookmarkItem.cpp @@ -54,7 +54,6 @@ BookmarkItem::BookmarkItem( } - BookmarkItem::~BookmarkItem() { } diff --git a/core/Tools/BookmarkItem.h b/core/Tools/BookmarkItem.h index faff1b2..84fe489 100644 --- a/core/Tools/BookmarkItem.h +++ b/core/Tools/BookmarkItem.h @@ -23,10 +23,8 @@ #ifndef BOOKMARKITEM_H #define BOOKMARKITEM_H -#include -#include -#include - +#include "BrowserLogger.h" +#include "Config.h" #include "BrowserImage.h" namespace tizen_browser{ @@ -69,6 +67,12 @@ public: void setTags(const std::vector& tags) { m_tags = tags; }; std::vector getTags() const { return m_tags; }; + bool is_folder(void) const { return m_is_folder; } + bool is_editable(void) const { return m_is_editable; } + + void set_folder_flag(bool flag) { m_is_folder = flag; } + void set_editable_flag(bool flag) { m_is_editable = flag; } + private: unsigned int m_saved_id; std::string m_url; @@ -78,6 +82,8 @@ private: std::shared_ptr m_favicon; unsigned int m_directory; std::vector m_tags; + bool m_is_folder; + bool m_is_editable; }; typedef std::shared_ptr SharedBookmarkItem; diff --git a/core/main.cpp b/core/main.cpp index 9342b05..83d48f0 100755 --- a/core/main.cpp +++ b/core/main.cpp @@ -38,8 +38,9 @@ const std::string DEFAULT_URL = ""; static bool app_create(void * /*app_data*/) { -// elm_config_accel_preference_set("opengl"); - elm_config_accel_preference_set("3d"); +// MERGE_ME not sure which should be chosen +// elm_config_accel_preference_set("opengl"); + elm_config_accel_preference_set("3d"); elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK); // Enabling focus diff --git a/scripts/astylerc b/scripts/astylerc new file mode 100644 index 0000000..22d7cba --- /dev/null +++ b/scripts/astylerc @@ -0,0 +1,20 @@ +# It might not be enough so please keep the code in your eyes. +# for example, +# 1. It does not check below +# a) class Child: public Parent +# b) class Child : public Parent + +style=kr +indent=spaces=4 +pad-oper +pad-header +lineend=linux +add-brackets +indent-switches +unpad-paren +convert-tabs +align-pointer=middle +align-reference=middle +max-instatement-indent=80 +keep-one-line-statements +indent-preprocessor diff --git a/services/BookmarkService/BookmarkService.cpp b/services/BookmarkService/BookmarkService.cpp index 99b14e2..a1ffdae 100644 --- a/services/BookmarkService/BookmarkService.cpp +++ b/services/BookmarkService/BookmarkService.cpp @@ -22,8 +22,8 @@ #include "browser_config.h" #include "BookmarkService.h" +#include -#include #include #include @@ -56,6 +56,7 @@ BookmarkService::BookmarkService() BookmarkService::~BookmarkService() { bp_bookmark_adaptor_deinitialize(); + free_path_history(); } /*private*/ std::shared_ptr BookmarkService::getStorageManager() { @@ -76,40 +77,68 @@ std::shared_ptr BookmarkService::addToBookmarks( unsigned int dirId) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - std::shared_ptr bookmark = std::make_shared(address, tittle, note, dirId); - bookmark->setThumbnail(thumbnail); - bookmark->setFavicon(favicon); + bp_bookmark_property_cond_fmt properties; + properties.parent = -1; + properties.type = 0; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; - int bookmark_id = -1; - int ret = bp_bookmark_adaptor_create(&bookmark_id); - if (ret<0){ - BROWSER_LOGE("Error! Could not create new bookmark!"); - return bookmark; - } - int *ids = NULL; - int ids_count = 0; - ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, -1, -1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); - if (ret<0){ + int id = -1; + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, address.c_str(), 0); + free(ids); + if (ret < 0){ BROWSER_LOGE("Error! Could not get ids!"); return std::make_shared(); } - bp_bookmark_adaptor_set_url(bookmark_id, address.c_str()); + bp_bookmark_info_fmt info; + info.type = 0; + info.parent = dirId; + info.sequence = -1; + info.access_count = -1; + info.editable = 1; + + if (!address.empty()) { + info.url = (char*) address.c_str(); + } + if (!tittle.empty()) + info.title = (char*) tittle.c_str(); + + ret = bp_bookmark_adaptor_easy_create(&id, &info); + if (ret < 0){ + BROWSER_LOGE("Error! Could not create new bookmark!"); + return std::make_shared(); + } - bp_bookmark_adaptor_set_title(bookmark_id, tittle.c_str()); - if (thumbnail) { - std::unique_ptr thumb_blob = tizen_browser::tools::EflTools::getBlobPNG(thumbnail); - unsigned char * thumb = std::move((unsigned char*)thumb_blob->getData()); - bp_bookmark_adaptor_set_snapshot(bookmark_id, thumbnail->width, thumbnail->height, thumb, thumb_blob->getLength()); - } - if (favicon) { - std::unique_ptr favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon); - unsigned char * fav = std::move((unsigned char*)favicon_blob->getData()); - bp_bookmark_adaptor_set_icon(bookmark_id, favicon->width, favicon->height, fav, favicon_blob->getLength()); - } + // max sequence + ret = bp_bookmark_adaptor_set_sequence(id, -1); + if(thumbnail) + { + std::unique_ptr thumb_blob = tizen_browser::tools::EflTools::getBlobPNG(thumbnail); + unsigned char * thumb = std::move((unsigned char*)thumb_blob->getData()); + bp_bookmark_adaptor_set_snapshot(id, thumbnail->width, thumbnail->height, thumb, thumb_blob->getLength()); + } + if(favicon) + { + std::unique_ptr favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon); + unsigned char * fav = std::move((unsigned char*)favicon_blob->getData()); + bp_bookmark_adaptor_set_icon(id, favicon->width, favicon->height, fav, favicon_blob->getLength()); + } + std::shared_ptr bookmark = std::make_shared(address, tittle, note, dirId, id); + bookmark->setThumbnail(thumbnail); + bookmark->setFavicon(favicon); m_bookmarks.push_back(bookmark); - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); bookmarkAdded(bookmark); return bookmark; } @@ -135,35 +164,36 @@ bool BookmarkService::bookmarkExists(const std::string & url) int BookmarkService::getBookmarkId(const std::string & url) { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); bp_bookmark_property_cond_fmt properties; - bp_bookmark_rows_cond_fmt conds; properties.parent = -1; properties.type = 0; properties.is_operator = 0; properties.is_editable = -1; + bp_bookmark_rows_cond_fmt conds; conds.limit = -1; conds.offset = 0; conds.order_offset = BP_BOOKMARK_O_DATE_CREATED; conds.ordering = 0; conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; conds.period_type = BP_BOOKMARK_DATE_ALL; - int *ids = 0; + int *ids = nullptr; int ids_count = 0; - int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, - &properties, &conds, BP_BOOKMARK_O_URL, url.c_str(), 0); - if (ids_count!=0){ - int i = *ids; - free(ids); - return i; + int i = 0; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, url.c_str(), 0); + if (ids_count > 0){ + i = *ids; } - return 0; + free(ids); + return i; } -std::vector > BookmarkService::getBookmarks() +std::vector > BookmarkService::getBookmarks(int folder_id) { - int *ids = NULL; + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + int *ids = nullptr; int ids_count = 0; - int ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, -1, -1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + int ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, 0, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); if (ret<0){ BROWSER_LOGE("Error! Could not get ids!"); return std::vector>(); @@ -178,7 +208,7 @@ std::vector > BookmarkService::getBookmarks() 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(""), 0); + 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::shared_ptr bi = std::make_shared(); bi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; @@ -204,14 +234,1164 @@ std::vector > BookmarkService::getBookmarks() return m_bookmarks; } +std::vector > BookmarkService::getBookmarkFolders() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + int *ids = nullptr; + int ids_count = 0; + int ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, -1, 1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + if (ret<0){ + BROWSER_LOGE("Error! Could not get ids!"); + return std::vector>(); + } + + m_bookmarks.clear(); + + BROWSER_LOGD("Bookmark items: %d", ids_count); + + for(int i = 0; i bookmark = std::make_shared(std::string(bookmark_info.url ? bookmark_info.url : ""),std::string(bookmark_info.title ? bookmark_info.title : ""), std::string(""),(int) bookmark_info.parent, ids[i]); + std::shared_ptr bi = std::make_shared(); + bi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; + bi->width = bookmark_info.thumbnail_width; + bi->height = bookmark_info.thumbnail_height; + bi->dataSize = bookmark_info.thumbnail_length; + bi->imageData = (void*)malloc(bookmark_info.thumbnail_length); + memcpy(bi->imageData, (void*)bookmark_info.thumbnail, bookmark_info.thumbnail_length); + bookmark->setThumbnail(bi); + + std::shared_ptr fav = std::make_shared(); + unsigned char *image_bytes; + bp_bookmark_adaptor_get_icon(ids[i], &fav->width, &fav->height, &image_bytes, &fav->dataSize); + fav->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; + + fav->imageData = (void*)malloc(bookmark_info.favicon_length); + memcpy(fav->imageData, (void*)image_bytes, bookmark_info.favicon_length); + bookmark->setFavicon(fav); + if(!bookmark_info.is_operator) + m_bookmarks.push_back(bookmark); + else + m_bookmarks.insert(m_bookmarks.begin(),bookmark); + } + free(ids); + return m_bookmarks; +} + + bool BookmarkService::deleteAllBookmarks() { + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); bp_bookmark_adaptor_reset(); m_bookmarks.clear(); bookmarksDeleted(); return true; } +int BookmarkService::get_root_folder_id(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + int root_id = 0; + bp_bookmark_adaptor_get_root(&root_id); + return root_id; +} + +int BookmarkService::save_folder(const char *title, int *saved_folder_id, int parent_id, int by_operator) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + bp_bookmark_property_cond_fmt properties; + properties.parent = parent_id; + properties.type = 1; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + int id = -1; + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_TITLE, title, 0); + free(ids); + + if (ret < 0) + return -1; + + if (ids_count > 0) { + return 0; + } + + bp_bookmark_info_fmt info; + info.type = 1; + info.parent = parent_id; + info.sequence = -1; + info.is_operator = by_operator; + info.access_count = -1; + info.editable = 1; + if (title != nullptr && strlen(title) > 0) + { + info.title = (char *)title; + } + ret = bp_bookmark_adaptor_easy_create(&id, &info); + + if (ret == 0) { + ret = bp_bookmark_adaptor_set_sequence(id, -1); // max sequence + if (ret == 0) { + *saved_folder_id = id; + BROWSER_LOGD("bmsvc_add_bookmark is success(id:%d)", *saved_folder_id); + bp_bookmark_adaptor_publish_notification(); + return id; + } + } + BROWSER_LOGD("bmsvc_add_bookmark is failed"); + return -1; +} + +bool BookmarkService::delete_by_id(int id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id[%d]", id); + if (bp_bookmark_adaptor_delete(id) < 0) + return false; + else { + bp_bookmark_adaptor_publish_notification(); + return true; + } +} + +bool BookmarkService::delete_by_id_notify(int id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id[%d]", id); + + BookmarkItem item; + get_item_by_id(id, &item); + return delete_by_id(id); +} + +bool BookmarkService::delete_by_uri(const char *uri) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("uri[%s]", uri); + bp_bookmark_property_cond_fmt properties; + properties.parent = -1; + properties.type = 0; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0); + bool result = false; + if (ret >= 0 && ids_count > 0) + { + delete_by_id_notify(ids[0]); + free(ids); + } + + return result; +} + +int BookmarkService::update_bookmark(int id, const char *title, const char *uri, int parent_id, int order, + bool is_duplicate_check_needed, bool is_URI_check_needed) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + bool is_URI_exist = (uri != nullptr && strlen(uri) > 0); + bool is_title_exist = (title != nullptr && strlen(title) > 0); + int ret = -1; + if (is_duplicate_check_needed) { + bp_bookmark_property_cond_fmt properties; + properties.parent = -1; + properties.type = 0; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + int *ids = nullptr; + int ids_count = -1; + //This is a bookmark item so check for any such URL already exists + if (is_URI_exist && is_URI_check_needed) { + ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0); + free(ids); + if (ret < 0) + return -1; + } + //This is a bookmark folder so check for any such folder with same title already exists + else if (is_title_exist) { + ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_TITLE, title, 0); + free(ids); + if (ret < 0) + return -1; + } + + if (ids_count > 0) { + BROWSER_LOGD("same bookmark already exist"); + return 0; + } + } + bp_bookmark_info_fmt info; + info.type = -1; + info.parent = parent_id; + info.sequence = order; + info.editable = -1; + if (is_URI_exist) + info.url = (char *)uri; + if (is_title_exist) + info.title = (char *)title; + + ret = bp_bookmark_adaptor_easy_create(&id, &info); + if (ret == 0) { + BROWSER_LOGD("bp_bookmark_adaptor_easy_create is success"); + bp_bookmark_adaptor_publish_notification(); + return 1; + } + int errcode = bp_bookmark_adaptor_get_errorcode(); + BROWSER_LOGD("bp_bookmark_adaptor_easy_create is failed[%d]", errcode); + return -1; +} + +int BookmarkService::update_bookmark_notify(int id, const char *title, const char *uri, int parent_id, int order, + bool is_duplicate_check_needed, bool is_URI_check_needed) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + int ret = update_bookmark(id, title, uri, parent_id, order, is_duplicate_check_needed, is_URI_check_needed); + return ret; +} + +bool BookmarkService::is_in_bookmark(const char *uri) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("uri[%s]", uri); + + int id = 0; + return get_id(uri, &id); +} + +bool BookmarkService::is_in_folder(int parent_folder, const char *title) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + + bp_bookmark_property_cond_fmt properties; + properties.parent = parent_folder; + properties.type = 1; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_TITLE, title, 0); + free(ids); + return ((ret >= 0) && (ids_count > 0)); +} + +bool BookmarkService::get_id(const char *uri, int *bookmark_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + bp_bookmark_property_cond_fmt properties; + properties.parent = -1; + properties.type = 0; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0); + free(ids); + bool result = ((ret >= 0) && (ids_count > 0)); + if (result) { + *bookmark_id = ids[0]; + } + return result; +} + +bool BookmarkService::get_folder_id(const char *title, int parent_id, int *folder_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + bp_bookmark_property_cond_fmt properties; + properties.parent = parent_id; + properties.type = 1; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = 1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_SEQUENCE; + conds.ordering = 0; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + + int *ids = nullptr; + int ids_count = -1; + int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_TITLE, title, 0); + free(ids); + bool result = ((ret >= 0) && (ids_count > 0)); + if (result) { + *folder_id = ids[0]; + } + return false; +} + +bool BookmarkService::get_item_by_id(int id, BookmarkItem *item) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("ID: %d", id); + if (!item) { + BROWSER_LOGE("item is nullptr"); + return false; + } + + if (id == get_root_folder_id()) { + item->setTittle("Bookmarks"); + item->setAddress(""); + item->setId(id); + item->set_folder_flag(1); + item->set_editable_flag(1); + item->setDir(-1); + return true; + } + bp_bookmark_info_fmt info; + if (bp_bookmark_adaptor_get_info(id, (BP_BOOKMARK_O_TYPE | BP_BOOKMARK_O_PARENT | BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL |BP_BOOKMARK_O_TITLE), &info) == 0) { + item->setId(id); + item->set_folder_flag(static_cast(info.type)); + item->setDir(info.parent); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + bp_bookmark_adaptor_easy_free(&info); + return true; + } + BROWSER_LOGD("bp_bookmark_adaptor_get_easy_all is failed"); + return false; +} + +std::vector BookmarkService::get_list_by_folder(const int folder_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + std::vector list; + BROWSER_LOGD("folder ID: %d", folder_id); + int *ids = nullptr; + int ids_count = -1; + + if (bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, -1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 1) < 0) { + BROWSER_LOGD("bp_bookmark_adaptor_get_sequence_child_ids_p is failed"); + return list; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return list; + } + + bp_bookmark_info_fmt info; + for(int i = 0; i < ids_count; i++) { + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE | BP_BOOKMARK_O_IS_OPERATOR), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + + item->set_folder_flag(static_cast(info.type)); + item->setDir(folder_id); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + list.push_back(item); + bp_bookmark_adaptor_easy_free(&info); + } + } + free(ids); + return list; +} + +bool BookmarkService::get_list_users_by_folder(const int folder_id, std::vector &list) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + int *ids = nullptr; + int ids_count = -1; + if (bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, -1, 0, -1, BP_BOOKMARK_O_SEQUENCE, 1) < 0) { + BROWSER_LOGD("bp_bookmark_adaptor_get_ids_p is failed"); + return false; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return false; + } + + bp_bookmark_info_fmt info; + for(int i = 0; i < ids_count; i++) { + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE | + BP_BOOKMARK_O_IS_OPERATOR), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + item->set_folder_flag(static_cast(info.type)); + item->setDir(folder_id); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + if (info.is_operator > 0) { + delete item; + } else { + list.push_back(item); + } + bp_bookmark_adaptor_easy_free(&info); + } + } + free(ids); + return (list.empty() == false); +} + +bool BookmarkService::get_list_by_dividing(const int folder_id, std::vector &list, int *list_item_count, int genlist_block_size) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + + int *ids = nullptr; + int ids_count = -1; + if (bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, genlist_block_size, *list_item_count, folder_id, -1, -1, -1, + BP_BOOKMARK_O_SEQUENCE, 1) < 0) { + BROWSER_LOGD("bp_bookmark_adaptor_get_ids_p is failed"); + return false; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return false; + } + + bp_bookmark_info_fmt info; + for(int i = 0; i < ids_count; i++) { + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE | BP_BOOKMARK_O_IS_OPERATOR), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + item->set_folder_flag(static_cast(info.type)); + item->setDir(folder_id); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + list.push_back(item); + bp_bookmark_adaptor_easy_free(&info); + } + } + free(ids); + return true; +} + +bool BookmarkService::get_list_users_by_dividing(const int folder_id, std::vector &list, int *list_item_count, int genlist_block_size) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + int *ids = nullptr; + int ids_count = -1; + if (bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, genlist_block_size, *list_item_count, folder_id, -1, 0, 1, + BP_BOOKMARK_O_SEQUENCE, 1) < 0) { + BROWSER_LOGD("bp_bookmark_adaptor_get_ids_p is failed"); + return false; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return false; + } + + bp_bookmark_info_fmt info; + BROWSER_LOGD("list.size() before : %d", list.size()); + BROWSER_LOGD("ids_count: %d", ids_count); + for(int i = 0; i < ids_count; i++) { + BROWSER_LOGD("list.size(): %d", list.size()); + BROWSER_LOGD("index : %d", i); + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE | + BP_BOOKMARK_O_IS_OPERATOR), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + item->set_folder_flag(static_cast(info.type)); + item->setDir(folder_id); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + if (info.is_operator > 0) { + BROWSER_LOGD("this is operator bookmark"); + delete item; + } else { + BROWSER_LOGD("item is pushed"); + list.push_back(item); + } + bp_bookmark_adaptor_easy_free(&info); + } + } + BROWSER_LOGD("list.size() after: %d", list.size()); + free(ids); + return (list.empty() == false); +} + +int BookmarkService::_get_folder_count(const int folder_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + + int *ids = nullptr; + int ids_count = -1; + bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, 1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + free(ids); + return ids_count; +} + + +int BookmarkService::_get_bookmarks_count(const int folder_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + + int *ids = nullptr; + int ids_count = -1; + bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, 0, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + free(ids); + return ids_count; +} + + +int BookmarkService::_get_total_contents_count(const int folder_id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + + int *ids = nullptr; + int ids_count = -1; + bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, 0, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + free(ids); + return ids_count; +} + +bool BookmarkService::get_list_operators(const int folder_id, std::vector &list) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("folder ID: %d", folder_id); + int *ids = nullptr; + int ids_count = -1; + + if (bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, -1, 1, -1, BP_BOOKMARK_O_SEQUENCE, 1) < 0) { + BROWSER_LOGD("bp_bookmark_adaptor_get_ids_p is failed"); + return false; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return false; + } + + bp_bookmark_info_fmt info; + for(int i = 0; i < ids_count; i++) { + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + item->set_folder_flag(static_cast(info.type)); + item->setDir(folder_id); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + list.push_back(item); + bp_bookmark_adaptor_easy_free(&info); + } + } + free(ids); + return (list.empty() == false); +} + +bool BookmarkService::get_list_by_keyword(const char *keyword, std::vector &list) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + + if (!keyword || (strlen(keyword) == 0)) { + BROWSER_LOGD("keyword is nullptr"); + return false; + } + + std::string buf_str(keyword); + buf_str = "%" + buf_str + "%"; + + bp_bookmark_property_cond_fmt properties; + properties.parent = -1; + properties.type = 0; + properties.is_operator = -1; + properties.is_editable = -1; + //conditions for querying + bp_bookmark_rows_cond_fmt conds; + conds.limit = -1; + conds.offset = 0; + conds.order_offset = BP_BOOKMARK_O_TITLE; + conds.ordering = -1; + conds.period_offset = BP_BOOKMARK_O_DATE_CREATED; + conds.period_type = BP_BOOKMARK_DATE_ALL; + + int *ids = nullptr; + int ids_count = -1; + if (bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, + (BP_BOOKMARK_O_TITLE | BP_BOOKMARK_O_URL), buf_str.c_str(), 1) < 0) { + BROWSER_LOGE("bp_bookmark_adaptor_get_cond_ids_p is failed"); + return false; + } + + if (ids_count <= 0) { + BROWSER_LOGD("bookmark list is empty"); + free(ids); + return false; + } + + bp_bookmark_info_fmt info; + for(int i = 0; i < ids_count; i++) { + if (bp_bookmark_adaptor_get_info(ids[i], (BP_BOOKMARK_O_TYPE | + BP_BOOKMARK_O_PARENT | BP_BOOKMARK_O_SEQUENCE | + BP_BOOKMARK_O_IS_EDITABLE | BP_BOOKMARK_O_URL | + BP_BOOKMARK_O_TITLE), &info) == 0) { + BookmarkItem *item = new BookmarkItem(); + item->setId(ids[i]); + item->set_folder_flag(static_cast(info.type)); + item->setDir(info.parent); + item->set_editable_flag(static_cast(info.editable)); + + if (info.url != nullptr && strlen(info.url) > 0) + item->setAddress(info.url); + + if (info.title != nullptr && strlen(info.title) > 0) + item->setTittle(info.title); + + list.push_back(item); + bp_bookmark_adaptor_easy_free(&info); + } + } + free(ids); + return true; +} + +void BookmarkService::destroy_list(std::vector &list) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + + for(unsigned int i = 0 ; i < list.size() ; i++) { + delete list[i]; + } + list.clear(); +} + +bool BookmarkService::get_folder_depth_count(int *depth_count) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("depth_count: %d", *depth_count); + return _get_depth_count_recursive(get_root_folder_id(), 0, depth_count); +} + +bool BookmarkService::_get_depth_count_recursive(int folder_id, int cur_depth, int *depth_count) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("current_depth: %d, depth_count:%d", cur_depth, *depth_count); + + std::vector bookmark_list = get_list_by_folder(folder_id); + if (!bookmark_list.empty()) { + BROWSER_LOGE("get_list_by_folder is failed(folder id:%d)",folder_id); + return false; + } + + for(unsigned int j = 0 ; j < bookmark_list.size() ; j++) { + if (bookmark_list[j]->is_folder()) { + /* Folder item is found. get sub list */ + if ((cur_depth+1) > *depth_count) + *depth_count = cur_depth+1; + + _get_depth_count_recursive(bookmark_list[j]->getId(), cur_depth+1, depth_count); + } + } + destroy_list(bookmark_list); + return true; +} + +bool BookmarkService::set_thumbnail(int id, Evas_Object *thumbnail) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + + int w = 0; + int h = 0; + int stride = 0; + int len = 0; + + //platform_Service ps. + //ps.evas_image_size_get(thumbnail, &w, &h, &stride); + len = stride * h; + BROWSER_LOGD("thumbnail w=[%d], h=[%d], stride=[%d], len=[%d]", w, h, stride, len); + + if (len == 0) + return false; + + void *thumbnail_data = evas_object_image_data_get(thumbnail, true); + int ret = bp_bookmark_adaptor_set_snapshot(id, w, h, (const unsigned char *)thumbnail_data, len); + if (ret < 0) { + BROWSER_LOGE("bp_bookmark_adaptor_set_thumbnail is failed"); + return false; + } + return true; +} + +Evas_Object *BookmarkService::get_thumbnail(int id, Evas_Object *parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + void *thumbnail_data = nullptr; + int w = 0; + int h = 0; + int len = 0; + Evas_Object *icon = nullptr; + + int ret = bp_bookmark_adaptor_get_snapshot(id, &w, &h, (unsigned char **)&thumbnail_data, &len); + BROWSER_LOGE("len: %d, w:%d, h:%d", len, w, h); + if (len > 0){ + /* gengrid event area has scaled with original image if it is evas image. + therefore use elm_image*/ + icon = elm_image_add(parent); + Evas_Object *icon_object = elm_image_object_get(icon); + evas_object_image_colorspace_set(icon_object, EVAS_COLORSPACE_ARGB8888); + evas_object_image_size_set(icon_object, w, h); + evas_object_image_fill_set(icon_object, 0, 0, w, h); + evas_object_image_filled_set(icon_object, true); + evas_object_image_alpha_set(icon_object,true); + + void *target_image_data = evas_object_image_data_get(icon_object, true); + memcpy(target_image_data, thumbnail_data, len); + evas_object_image_data_set(icon_object, target_image_data); + } + + return icon; +} + +bool BookmarkService::set_favicon(int id, Evas_Object *favicon) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + + int w = 0; + int h = 0; + int stride = 0; + int len = 0; + + //platform_Service ps. + //ps.evas_image_size_get(favicon, &w, &h, &stride); + len = stride * h; + BROWSER_LOGD("favicon w=[%d], h=[%d], stride=[%d], len=[%d]", w, h, stride, len); + + if (len == 0) + return false; + + void *favicon_data = evas_object_image_data_get(favicon, true); + int ret = bp_bookmark_adaptor_set_icon(id, w, h, (const unsigned char *)favicon_data, len); + if (ret < 0) { + BROWSER_LOGE("bp_bookmark_adaptor_set_favicon is failed"); + return false; + } + return true; +} + +Evas_Object *BookmarkService::get_favicon(int id, Evas_Object *parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + void *favicon_data = nullptr; + int w = 0; + int h = 0; + int len = 0; + + Evas *e = nullptr; + e = evas_object_evas_get(parent); + if (!e) { + BROWSER_LOGE("canvas is nullptr"); + return nullptr; + } + int ret = bp_bookmark_adaptor_get_icon(id, &w, &h, (unsigned char **)&favicon_data, &len); + if (ret < 0) { + BROWSER_LOGE("bp_bookmark_adaptor_set_favicon is failed"); + return nullptr; + } + + Evas_Object *icon = nullptr; + BROWSER_LOGE("len: %d, w:%d, h:%d", len, w, h); + if (len > 0){ + icon = evas_object_image_filled_add(e); + if (w == 0 || h == 0) { + // Android bookmark. + evas_object_image_memfile_set(icon, favicon_data, len, nullptr, nullptr); + } else { + // Tizen bookmark. + evas_object_image_colorspace_set(icon, EVAS_COLORSPACE_ARGB8888); + evas_object_image_size_set(icon, w, h); + evas_object_image_fill_set(icon, 0, 0, w, h); + evas_object_image_filled_set(icon, true); + evas_object_image_alpha_set(icon,true); + + void *target_image_data = evas_object_image_data_get(icon, true); + memcpy(target_image_data, favicon_data, len); + evas_object_image_data_set(icon, target_image_data); + } + } + return icon; +} + +bool BookmarkService::set_webicon(int id, Evas_Object *webicon) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + + int w = 0; + int h = 0; + int stride = 0; + int len = 0; + + //platform_Service ps; + //ps.evas_image_size_get(webicon, &w, &h, &stride); + len = stride * h; + BROWSER_LOGD("webicon w=[%d], h=[%d], stride=[%d], len=[%d]", w, h, stride, len); + + if (len == 0) + return false; + + void *webicon_data = evas_object_image_data_get(webicon, true); + int ret = bp_bookmark_adaptor_set_webicon(id, w, h, (const unsigned char *)webicon_data, len); + if (ret != 0) + BROWSER_LOGE("set webicon is failed"); + return false; +} + +Evas_Object *BookmarkService::get_webicon(int id, Evas_Object *parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("id : %d", id); + void *webicon_data = nullptr; + int w = 0; + int h = 0; + int len = 0; + + int ret = bp_bookmark_adaptor_get_webicon(id, &w, &h, (unsigned char **)&webicon_data, &len); + if (ret != 0) { + BROWSER_LOGE("bp_bookmark_adaptor_set_webicon is failed"); + return nullptr; + } + + Evas_Object *icon = nullptr; + BROWSER_LOGE("len: %d, w:%d, h:%d", len, w, h); + if (len > 0){ + Evas *e = evas_object_evas_get(parent); + icon = evas_object_image_filled_add(e); + + evas_object_image_colorspace_set(icon, EVAS_COLORSPACE_ARGB8888); + evas_object_image_size_set(icon, w, h); + evas_object_image_fill_set(icon, 0, 0, w, h); + evas_object_image_filled_set(icon, true); + evas_object_image_alpha_set(icon,true); + + void *target_image_data = evas_object_image_data_get(icon, true); + memcpy(target_image_data, webicon_data, len); + evas_object_image_data_set(icon, target_image_data); + } + + return icon; +} + +bool BookmarkService::set_access_count(int id, int count) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + return !bp_bookmark_adaptor_set_access_count(id, count); +} + +bool BookmarkService::get_access_count(int id, int *count) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + return !bp_bookmark_adaptor_get_access_count(id, count); +} + +bool BookmarkService::increase_access_count(int id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + int count; + if(get_access_count(id, &count) == false) { + BROWSER_LOGD("get_access_count is failed"); + return false; + } + + if(set_access_count(id, count + 1) == false) { + BROWSER_LOGD("set_access_count is failed"); + return false; + } + + return true; +} + +bool BookmarkService::set_last_sequence(int id) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + return (bp_bookmark_adaptor_set_sequence(id, -1) == -1); +} + +const char* BookmarkService::get_path_info(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%s", m_path_string.c_str()); + return m_path_string.c_str(); +} + +BookmarkService::folder_info *BookmarkService::get_path_by_index(unsigned int index) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%s", m_path_history[index]->folder_name); + return m_path_history[index]; +} + +int BookmarkService::get_path_size(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%d", m_path_history.size()); + return m_path_history.size(); +} + +void BookmarkService::push_back_path(folder_info *item) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("path size before push: %d", m_path_history.size()); + m_path_history.push_back(item); +} + +void BookmarkService::pop_back_path(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("path size before pop: %d", m_path_history.size()); + m_path_history.pop_back(); +} + +void BookmarkService::clear_path_history(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + free_path_history(); + m_path_history.clear(); +} + +void BookmarkService::free_path_history(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + for(unsigned int i = 0 ; i < m_path_history.size() ; i++) { + if (m_path_history[i]) { + if (m_path_history[i]->folder_name) + free(m_path_history[i]->folder_name); + + free(m_path_history[i]); + } + } +} + +void BookmarkService::change_path_lang(void) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + m_path_string.clear(); + + char *old_str = m_path_history[0]->folder_name; + m_path_history[0]->folder_name = strdup("Bookmarks"); + free(old_str); + + for(int i = 0 ; i < get_path_size(); i++) { + if (get_path_by_index(i)) { + if (m_path_string.empty()) { + m_path_string = m_path_history[0]->folder_name; + } else { + m_path_string += "/"; + m_path_string += get_path_by_index(i)->folder_name; + } + } + } + BROWSER_LOGD("str: %s", m_path_string.c_str()); +} + +void BookmarkService::path_into_sub_folder(int folder_id, const char *folder_name) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + + folder_info *item = (folder_info *)calloc(1, sizeof(folder_info)); + + item->folder_id = folder_id; + if (folder_id == get_root_folder_id()) { + item->folder_name = strdup("Bookmarks"); + } else + item->folder_name = strdup(folder_name); + push_back_path(item); + + m_path_string.clear(); + for(int i = 0 ; i < get_path_size() ; i++) { + if (get_path_by_index(i)) { + if (m_path_string.empty()) { + m_path_string = get_path_by_index(i)->folder_name; + } else { + m_path_string += "/"; + m_path_string += get_path_by_index(i)->folder_name; + } + } + } + char *path_string = (elm_entry_utf8_to_markup(m_path_string.c_str())); + m_path_string = path_string; + free(path_string); + BROWSER_LOGD("m_path_string: %s", m_path_string.c_str()); + + m_curr_folder = folder_id; +} + +bool BookmarkService::path_to_upper_folder(int *curr_folder) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD(""); + + int current_depth = get_path_size(); + BROWSER_LOGD("current_depth: %d", current_depth); + + if (current_depth <= 0) { + BROWSER_LOGE("[ERROR] top folder is not valid"); + return true; + } + + int curr_depth = current_depth - 1; + if (curr_depth > 0) { + *curr_folder = get_path_by_index(curr_depth - 1)->folder_id; + if (get_path_by_index(curr_depth) && get_path_by_index(curr_depth)->folder_name) { + free(get_path_by_index(curr_depth)->folder_name); + free(get_path_by_index(curr_depth)); + } + pop_back_path(); + } else { + /* Current folder is root folder */ + if (*curr_folder != get_root_folder_id()) { + BROWSER_LOGE("[ERROR] top folder is not root folder"); + return true; + } + if (get_path_by_index(curr_depth) && get_path_by_index(curr_depth)->folder_name) { + free(get_path_by_index(curr_depth)->folder_name); + free(get_path_by_index(curr_depth)); + } + pop_back_path(); + m_path_string.clear(); + return false; + } + + m_path_string.clear(); + for(int i = 0 ; i < get_path_size() ; i++) { + if (get_path_by_index(i)) { + if (m_path_string.empty()) { + m_path_string = get_path_by_index(i)->folder_name; + } else { + m_path_string += "/"; + m_path_string += get_path_by_index(i)->folder_name; + } + } + } + BROWSER_LOGD("m_path_string: %s", m_path_string.c_str()); + + m_curr_folder = *curr_folder; + return true; +} } /* end of namespace services*/ } /* end of namespace tizen_browser */ diff --git a/services/BookmarkService/BookmarkService.h b/services/BookmarkService/BookmarkService.h index f33db1d..75ed2f2 100644 --- a/services/BookmarkService/BookmarkService.h +++ b/services/BookmarkService/BookmarkService.h @@ -24,7 +24,6 @@ #define BOOKMARKSERVICE_H #include "browser_config.h" - #include #include #include @@ -82,11 +81,12 @@ public: /** * @brief Get bookmarks from platform service and store it in private m_bookmarksList * - * @return list of bookmark items + * @return list of bookmark items, bookmark items in a folder & bookmark folders */ - std::vector > getBookmarks(); + std::vector > getBookmarks(int folder_id = 0); + std::vector > getBookmarkFolders(); - /** + /** * @brief Delete all bookmarks * * @return true if success, false on error @@ -104,19 +104,77 @@ public: void synchronizeBookmarks(); -private: + typedef struct _folder_info { + int folder_id; + char *folder_name; + } folder_info; + + int get_root_folder_id(void); + int save_folder(const char *title, int *saved_bookmark_id, int parent_id=0,int by_operator = 0); + bool delete_by_id(int id); + bool delete_by_id_notify(int id); + bool delete_by_uri(const char *uri); + int update_bookmark(int id, const char *title, const char *uri, int parent_id, int order, + bool is_duplicate_check_needed = false, bool is_URI_check_needed = false); + int update_bookmark_notify(int id, const char *title, const char *uri, int parent_id, int order, + bool is_duplicate_check_needed = false, bool is_URI_check_needed = false); + bool delete_all(void); + bool get_item_by_id(int id, BookmarkItem *item); + std::vector get_list_by_folder(const int folder_id); + bool get_list_users_by_folder(const int folder_id, std::vector &list); + bool get_list_by_dividing(const int folder_id, std::vector &list, int *last_item, int genlist_block_size); + bool get_list_users_by_dividing(const int folder_id, std::vector &list, int *last_item, int genlist_block_size); + int _get_folder_count(const int folder_id); + int _get_bookmarks_count(const int folder_id); + int _get_total_contents_count(const int folder_id); + bool get_list_operators(const int folder_id, std::vector &list); + bool get_list_by_keyword(const char *keyword, std::vector &list); + void destroy_list(std::vector &list); + int get_count(void); + bool get_id(const char *uri, int *bookmark_id); + bool get_folder_id(const char *title, int parent_id, int *folder_id); + bool is_in_bookmark(const char *uri); + bool is_in_folder(int parent_folder, const char *title); + bool get_folder_depth_count(int *depth_count); + bool set_thumbnail(int id, Evas_Object *thumbnail); + Evas_Object *get_thumbnail(int id, Evas_Object *parent); + bool set_favicon(int id, Evas_Object *favicon); + Evas_Object *get_favicon(int id, Evas_Object *parent); + bool set_webicon(int id, Evas_Object *webicon); + Evas_Object *get_webicon(int id, Evas_Object *parent); + bool set_access_count(int id, int count); + bool get_access_count(int id, int *count); + bool increase_access_count(int id); + bool set_last_sequence(int id); + const char* get_path_info(void); + folder_info *get_path_by_index(unsigned int index); + int get_path_size(void); + void push_back_path(folder_info *item); + void pop_back_path(void); + void clear_path_history(void); + void free_path_history(void); + void change_path_lang(void); + void path_into_sub_folder(int folder_id, const char *folder_name); + bool path_to_upper_folder(int *curr_folder); + + bool get_memory_full(void) { return m_memory_full; } + int get_current_folder_id(void) { return m_curr_folder; } +private: + bool _get_depth_count_recursive(int folder_id, int cur_depth, int *depth_count); + + std::vector m_bookmark_list; + std::vector m_path_history; + std::string m_path_string; + bool m_memory_full; + bool m_bookmark_adaptor_initialize; + int m_curr_folder; std::shared_ptr m_storageManager; - std::vector > m_bookmarks; - - /// \todo Need to change getBookmarkId function for finding stored bookmark - check getBookmarkExists function int getBookmarkId(const std::string & url); - std::shared_ptr getStorageManager(); - config::DefaultConfig config; }; diff --git a/services/BookmarksUI/BookmarksUI.cpp b/services/BookmarksUI/BookmarksUI.cpp deleted file mode 100644 index 5e9a505..0000000 --- a/services/BookmarksUI/BookmarksUI.cpp +++ /dev/null @@ -1,276 +0,0 @@ -/* - * 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 "BookmarksUI.h" -#include "ServiceManager.h" -#include "BrowserLogger.h" -#include "Tools/EflTools.h" -#include "../Tools/BrowserImage.h" - - -namespace tizen_browser{ -namespace base_ui{ - -EXPORT_SERVICE(BookmarksUI, "org.tizen.browser.bookmarksui") - - -typedef struct _BookmarkItemData -{ - std::shared_ptr item; - std::shared_ptr bookmarksUI; -} BookmarkItemData; - -BookmarksUI::BookmarksUI() - : m_gengrid(NULL) - , m_parent(NULL) - , m_item_class(NULL) - , m_gengridSetup(false) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -} - -BookmarksUI::~BookmarksUI() -{ - -} - -void BookmarksUI::init(Evas_Object* p) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_parent = p; - m_gengrid = elm_gengrid_add(m_parent); - - 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_genlist_item_class_new(); - m_item_class->item_style = "bookmark_item"; - m_item_class->func.text_get = NULL; - m_item_class->func.content_get = _grid_content_get; - m_item_class->func.state_get = NULL; - m_item_class->func.del = NULL; - } -} - - -Evas_Object * BookmarksUI::getContent() -{ - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - M_ASSERT(m_parent); - - if(m_map_bookmark_views.size() == 0) { - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoBookmarksLabel()); - } - - - if(!m_gengridSetup) { - std::string edjFilePath = EDJE_DIR; - edjFilePath.append("BookmarksUI/Bookmarks.edj"); - elm_theme_extension_add(NULL, edjFilePath.c_str()); - - - elm_object_style_set(m_gengrid, "bookmarks"); - - elm_gengrid_align_set(m_gengrid, 0, 0); - elm_gengrid_item_size_set(m_gengrid, 395, 357); - 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); - - m_gengridSetup = true; - } - return m_gengrid; -} - -void BookmarksUI::addBookmarkItem(std::shared_ptr bi) -{ - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - BookmarkItemData *itemData = new BookmarkItemData(); - itemData->item = bi; - itemData->bookmarksUI = std::shared_ptr(this); - Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, NULL, this); - m_map_bookmark_views.insert(std::pair(bi->getAddress(),bookmarkView)); - - // unselect by default - elm_gengrid_item_selected_set(bookmarkView, EINA_FALSE); - - setEmptyGengrid(false); -} - -void BookmarksUI::addBookmarkItems(std::vector > items) -{ - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - for (auto it = items.begin(); it != items.end(); ++it) { - addBookmarkItem(*it); - } -} - -void BookmarksUI::removeBookmarkItem(const std::string& uri) -{ - BROWSER_LOGD("[%s] uri=%s", __func__, uri.c_str()); - if(m_map_bookmark_views.find(uri) == m_map_bookmark_views.end()) { - return; - } - - Elm_Object_Item* bookmarkView = m_map_bookmark_views.at(uri); - elm_object_item_del(bookmarkView); - m_map_bookmark_views.erase(uri); - - setEmptyGengrid(0 == m_map_bookmark_views.size()); -} - -void BookmarksUI::_item_deleted(void * /* data */, Evas_Object * /* obj */) -{ - -} - -Evas_Object * BookmarksUI::_grid_content_get(void *data, Evas_Object *obj, const char *part) -{ - BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); - BookmarkItemData *itemData = reinterpret_cast(data); - - if (!strcmp(part, "elm.thumbnail")) { - if (itemData->item->getThumbnail()) { - Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->bookmarksUI->m_parent); - return thumb; - } - else { - return NULL; - } - } - else if (!strcmp(part, "favicon")) { - Evas_Object * favicon = NULL; - if(itemData->item->getFavicon().get()){ - favicon = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getFavicon(), obj); - } - return favicon; - } - else if (!strcmp(part, "elm.label")) { - Evas_Object *label = elm_label_add(obj); - elm_object_style_set(label, "bookmarks_label"); - elm_object_text_set(label, itemData->item->getTittle().c_str()); - return label; - } - else if (!strcmp(part, "elm.deleteButton")) { - Evas_Object *deleteButton = elm_button_add(obj); - elm_object_style_set(deleteButton, "deleteButton"); - evas_object_smart_callback_add(deleteButton, "clicked", tizen_browser::base_ui::BookmarksUI::_deleteBookmark, data); - return deleteButton; - } - else if (!strcmp(part, "elm.thumbButton")) { - Evas_Object *thumbButton = elm_button_add(obj); - elm_object_style_set(thumbButton, "thumbButton"); - evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::BookmarksUI::_thumbSelected, data); - return thumbButton; - } - return NULL; -} - -void BookmarksUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info) -{ - Elm_Object_Item * selected = reinterpret_cast(event_info); - BookmarkItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); - BookmarksUI * self = reinterpret_cast(data); - - self->bookmarkClicked(itemData->item); -} - -void BookmarksUI::_deleteBookmark(void *data, Evas_Object * /* obj */, void * /* event_info */) -{ - BookmarkItemData * itemData = reinterpret_cast(data); - itemData->bookmarksUI->bookmarkDeleteClicked(itemData->item); -} - -void BookmarksUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) -{ - BookmarkItemData * itemData = reinterpret_cast(data); - itemData->bookmarksUI->bookmarkClicked(itemData->item); -} - -Evas_Object* BookmarksUI::createNoBookmarksLabel() -{ - 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 BookmarksUI::setEmptyGengrid(bool setEmpty) -{ - if(setEmpty) { - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoBookmarksLabel()); - } else { - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", NULL); - } -} - -void BookmarksUI::deleteAllItems() -{ - BROWSER_LOGD("Deleting all items from gengrid"); - elm_gengrid_clear(m_gengrid); - m_map_bookmark_views.clear(); - setEmptyGengrid(true); -} - -void BookmarksUI::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 BookmarksUI::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); -} - -std::shared_ptr BookmarksUI::getSelectedBookmarkItem() -{ - Elm_Object_Item * selected = elm_gengrid_selected_item_get(m_gengrid); - - if (!selected) { - BROWSER_LOGD("none selected"); - return std::make_shared(); - } - BookmarkItemData * itemData = reinterpret_cast(elm_object_item_data_get(selected)); - return itemData->item; -} - - -} -} diff --git a/services/BookmarksUI/BookmarksUI.h b/services/BookmarksUI/BookmarksUI.h deleted file mode 100644 index 33bb924..0000000 --- a/services/BookmarksUI/BookmarksUI.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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 BOOKMARKSUI_H -#define BOOKMARKSUI_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 BROWSER_EXPORT BookmarksUI - : public tizen_browser::interfaces::AbstractUIComponent - , public tizen_browser::core::AbstractService -{ -public: - BookmarksUI(); - ~BookmarksUI(); - void init(Evas_Object *main_layout); - Evas_Object *getContent(); - virtual std::string getName(); - void addBookmarkItem(std::shared_ptr); - void addBookmarkItems(std::vector >); - void removeBookmarkItem(const std::string& uri); - void deleteAllItems(); - std::shared_ptr getSelectedBookmarkItem(); - - - boost::signals2::signal)> bookmarkClicked; - boost::signals2::signal)> bookmarkDeleteClicked; -private: - 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 _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); - void setEmptyGengrid(bool setEmpty); - -private: - Evas_Object *m_gengrid; - Evas_Object *m_parent; - Elm_Gengrid_Item_Class * m_item_class; - std::map m_map_bookmark_views; - bool m_gengridSetup; - Evas_Object *createNoBookmarksLabel(); - - 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/BookmarksUI/edc/Bookmarks.edc b/services/BookmarksUI/edc/Bookmarks.edc deleted file mode 100644 index 7638300..0000000 --- a/services/BookmarksUI/edc/Bookmarks.edc +++ /dev/null @@ -1,440 +0,0 @@ -#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/label/base/bookmarks_label"; - styles { - style { name: "textblock_white"; - base: "font=Sans font_size="30" color=#D3D3D3"; - } - } - styles { - style { name: "textblock_white_bold"; - base: "font=Sans:style=Bold font_size="30" color=#D3D3D3"; - } - } - - parts { - part { name: "elm.text"; - type: TEXTBLOCK; - description { state: "default" 0.0; - rel1.relative: 0.0 0.0; - rel2.relative: 1.0 1.0; - align: 0.0 0.0; - fixed: 1 1; - text { - style: "textblock_white"; - min: 0 1; - } - } - description { state: "bold" 0.0; - inherit: "default" 0.0; - text { - style: "textblock_white_bold"; - min: 0 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; - } - } - } - } -} -group { name: "elm/gengrid/item/bookmark_item/default"; - data.item: "texts" "elm.text"; - data.item: "contents" "elm.thumbnail favicon elm.text elm.label elm.deleteButton elm.thumbButton"; - images { - image: "web_frame_selected.png" COMP; - image: "ico_bg_round_shape_37x37.png" COMP; - } - parts { - part { name: "bg"; - clip_to: "disclip"; - mouse_events: 0; - description { state: "default" 0.0; - visible: 0; - color: 255 255 255 0; - } - } - - part { name: "elm.thumbnail"; - clip_to: "disclip"; - type: SWALLOW; - description { state: "default" 0.0; - fixed: 1 0; - align: 0.0 0.0; - min: 373 240; - max: 373 240; - rel1 { - relative: 0.0 0.0; - } - rel2 { - relative: 1.0 1.0; - } - } - 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"; - clip_to: "disclip"; - type: RECT; - description { state: "default" 0.0; - min: 373 87; - max: 373 87; - align: 0.0 0.0; - color: 30 38 50 255; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 1.0; - offset: 0 0; - } - rel2 { - relative: 1.0 1.0; - } - } - description { state: "selected" 0.0; - inherit: "default" 0.0; - color: 70 143 254 255; - } - } - - part { name: "favicon_bg"; - clip_to: "disclip"; - type: IMAGE; - description { state: "default" 0.0; - fixed: 1 0; - align: 0.0 0.0; - min: 37 37; - max: 37 37; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 1.0; - offset: 25 25; - } - rel2 { - relative: 1.0 1.0; - } - // image.normal: "ico_bg_round_shape_37x37.png"; - } - } - - part { name: "favicon"; - clip_to: "disclip"; - type: SWALLOW; - description { state: "default" 0.0; - fixed: 1 0; - align: 0.5 0.5; - min: 37 37; - max: 37 37; - rel1.to: "favicon_bg"; - rel2.to: "favicon_bg"; - } - } - - part { name: "elm.label"; - clip_to: "disclip"; - type: SWALLOW; - description { state: "default" 0.0; - min: 273 41; - max: 273 41; - align: 0.0 0.0; - rel1 { - to: "favicon_bg"; - relative: 1.0 0.0; - offset: 13 0; - } - rel2 { - relative: 1.0 1.0; - } - } - } - - part { name: "delete_bg"; - clip_to: "disclip"; - type: RECT; - description { state: "default" 0.0; - min: 373 87; - max: 373 87; - align: 0.0 0.0; - color: 70 143 254 204; - rel1.to: "background"; - rel2.to: "background"; - visible: 0; - } - description { state: "over" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - - part { name: "disclip"; - type: RECT; - description { state: "default" 0.0; - rel1.to: "bg"; - rel2.to: "bg"; - } - } - - part { name: "elm.deleteButton"; - clip_to: "disclip"; - type: SWALLOW; - description { state: "default" 0.0; - min: 373 87; - max: 373 87; - align: 0.0 0.0; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 1.0; - offset: 0 0; - } - rel2 { - relative: 1.0 1.0; - } - visible: 1; - } - description { state: "over" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - - part { name: "elm.thumbButton"; - clip_to: "disclip"; - 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: "elm.thumbnail"; - } - program { name: "mouse_out"; - signal: "mouse,out"; - source: "over2"; - action: STATE_SET "default" 0.0; - target: "background"; - target: "focus_highlight"; - target: "elm.thumbnail"; - } - program { name: "mouse_in_delete"; - signal: "mouse,in"; - source: "over3"; - action: STATE_SET "over" 0.0; - target: "delete_bg"; - target: "elm.deleteButton"; - } - program { name: "mouse_out_delete"; - signal: "mouse,out"; - source: "over3"; - action: STATE_SET "default" 0.0; - target: "delete_bg"; - target: "elm.deleteButton"; - } - } -} -} diff --git a/services/BookmarksUI/images/ico_delete.png b/services/BookmarksUI/images/ico_delete.png deleted file mode 100644 index 92f42cccdae78c7360bfd8d7015de1e91a8440b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18365 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 diff --git a/services/CMakeLists.txt b/services/CMakeLists.txt index 8952538..1d32393 100644 --- a/services/CMakeLists.txt +++ b/services/CMakeLists.txt @@ -1,9 +1,18 @@ project(services) add_subdirectory(WebKitEngineService) -add_subdirectory(BookmarksUI) +# MERGE_ME +#add_subdirectory(MoreMenuUI) +add_subdirectory(MainUI) +# MERGE_ME +#add_subdirectory(HistoryUI) +#add_subdirectory(TabUI) add_subdirectory(SimpleUI) +#MERGE_ME +#add_subdirectory(SettingsUI) add_subdirectory(SimpleURI) +#MERGE_ME +#add_subdirectory(BookmarkManagerUI) add_subdirectory(StorageService) add_subdirectory(HistoryService) add_subdirectory(PlatformInputManager) diff --git a/services/HistoryService/CMakeLists.txt b/services/HistoryService/CMakeLists.txt index 7acc4b9..0a5dcf7 100644 --- a/services/HistoryService/CMakeLists.txt +++ b/services/HistoryService/CMakeLists.txt @@ -1,8 +1,8 @@ PROJECT(HistoryService) set(HistoryService_SOURCES - src/HistoryService.cpp - src/HistoryItem.cpp + HistoryService.cpp + HistoryItem.cpp ) set(HistoryService_HEADERS diff --git a/services/HistoryService/src/HistoryItem.cpp b/services/HistoryService/HistoryItem.cpp similarity index 92% rename from services/HistoryService/src/HistoryItem.cpp rename to services/HistoryService/HistoryItem.cpp index ac61514..1d9ce89 100644 --- a/services/HistoryService/src/HistoryItem.cpp +++ b/services/HistoryService/HistoryItem.cpp @@ -32,6 +32,7 @@ HistoryItem::HistoryItem(const std::string & url, : m_url(url) , m_title(title) , m_favIcon(image) + , m_lastVisit() { } @@ -141,6 +142,17 @@ std::shared_ptr HistoryItem::getFavIcon() return m_favIcon; } +void HistoryItem::setThumbnail(std::shared_ptr thumbnail) +{ + m_thumbnail = thumbnail; +}; + +std::shared_ptr HistoryItem::getThumbnail() const +{ + + return m_thumbnail; +}; + void HistoryItem::setUriFavicon(const std::string & uri) { m_urifavicon = uri; } diff --git a/services/HistoryService/HistoryItem.h b/services/HistoryService/HistoryItem.h index 98049c0..1d1e7ab 100644 --- a/services/HistoryService/HistoryItem.h +++ b/services/HistoryService/HistoryItem.h @@ -34,7 +34,9 @@ public: std::shared_ptr image); HistoryItem(HistoryItem && other) throw(); + HistoryItem(const std::string& url); + HistoryItem(const std::string& url, int& date_created); HistoryItem(const HistoryItem& source); virtual ~HistoryItem(); @@ -64,7 +66,10 @@ public: void setVisitCounter(int visitCounter); int getVisitCounter(); - void setFavIcon(std::shared_ptr favIcon); + void setThumbnail(std::shared_ptr thumbnail); + std::shared_ptr getThumbnail() const ; + + void setFavIcon(std::shared_ptr favIcon); std::shared_ptr getFavIcon(); void setUriFavicon(const std::string & uri); @@ -77,6 +82,7 @@ private: std::string m_title; boost::gregorian::date m_visitDate; boost::posix_time::ptime m_lastVisit; + std::shared_ptr m_thumbnail; std::shared_ptr m_favIcon; std::string m_urifavicon; int m_visitCounter; diff --git a/services/HistoryService/HistoryService.cpp b/services/HistoryService/HistoryService.cpp new file mode 100644 index 0000000..f2ebbfb --- /dev/null +++ b/services/HistoryService/HistoryService.cpp @@ -0,0 +1,396 @@ +/* + * 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 +#include + +#include "ServiceManager.h" +#include "HistoryService.h" +#include "HistoryItem.h" +#include "AbstractWebEngine.h" +#include "EflTools.h" + + + + +namespace tizen_browser +{ +namespace services +{ + +EXPORT_SERVICE(HistoryService, DOMAIN_HISTORY_SERVICE) + +HistoryService::HistoryService() : m_testDbMod(false) +{ + BROWSER_LOGD("HistoryService"); +} + +HistoryService::~HistoryService() +{ +} + +std::shared_ptr HistoryService::getStorageManager() +{ + if (!m_storageManager) { + m_storageManager = std::dynamic_pointer_cast < + tizen_browser::services::StorageService, + tizen_browser::core::AbstractService > ( + tizen_browser::core::ServiceManager::getInstance().getService( + DOMAIN_STORAGE_SERVICE)); + } + + M_ASSERT(m_storageManager); + m_storageManager->init(m_testDbMod); + + return m_storageManager; +} + +void HistoryService::setStorageServiceTestMode(bool testmode) { + m_testDbMod = testmode; +} + +int HistoryService::getHistoryItemsCount(){ + int *ids = nullptr; + int count=0; + bp_history_rows_cond_fmt conds; + conds.limit = 20; //no of rows to get negative means no limitation + conds.offset = -1; //the first row's index + conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort + conds.ordering = 1; //way of ordering 0 asc 1 desc + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_TODAY; + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + if (ret<0){ + BROWSER_LOGD("Error! Could not get ids!"); + } + + BROWSER_LOGD("[%s:%d] History Count %d", __PRETTY_FUNCTION__, __LINE__, count); + return count; +} + +static int __get_duplicated_ids_p(int **ids, int *count, const int limit, const int offset, + const bp_history_offset order_column_offset, const int ordering, + const bp_history_offset check_column_offset, + const char *keyword, const int is_like) +{ + bp_history_rows_cond_fmt conds; + conds.limit = limit; + conds.offset = offset; + conds.ordering = ordering; + conds.order_offset = order_column_offset; + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_ALL; + + return bp_history_adaptor_get_cond_ids_p(ids, count, &conds, check_column_offset, keyword, is_like); +} + +bool isDuplicate(const char* title) +{ + int *ids=nullptr; + int count=0; + bp_history_rows_cond_fmt conds; + conds.limit = 20; //no of rows to get negative means no limitation + conds.offset = -1; //the first row's index + conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort + conds.ordering = 1; //way of ordering 0 asc 1 desc + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_TODAY; + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + if (ret<0){ + BROWSER_LOGD("Error! Could not get ids!"); + } + + bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); + + for(int i = 0; i< count; i++){ + bp_history_info_fmt history_info; + bp_history_adaptor_get_info(ids[i],offset,&history_info); + if(!strcmp(history_info.title, title)) { + int freq; + bp_history_adaptor_get_frequency(ids[i], &freq); + bp_history_adaptor_set_frequency(ids[i], freq + 1); + return true; + } + } + return false; + +} + + +HistoryItemVector& HistoryService::getMostVisitedHistoryItems() +{ + history_list.clear(); + + int *ids=nullptr; + int count=-1; + bp_history_rows_cond_fmt conds; + conds.limit = 20; //no of rows to get negative means no limitation + conds.offset = -1; //the first row's index + conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort + conds.ordering = 1; //way of ordering 0 asc 1 desc + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_TODAY; + + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + if (ret<0){ + BROWSER_LOGD("Error! Could not get ids!"); + } + + bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); + + int freq_arr[1000]; + for(int i = 0; i< count; i++){ + bp_history_info_fmt history_info; + bp_history_adaptor_get_info(ids[i],offset,&history_info); + + int freq; + if (0 == bp_history_adaptor_get_frequency(ids[i], &freq)) + { + freq_arr[i] = freq; + } + } + + int index_array[6]; + int j=0; + int maximum = freq_arr[0]; + int position = 0; + + for(int k=1; k<=5;k++){ + if(k > count || count == 0) + break; + + maximum = freq_arr[0]; + position = 0; + + for(int i =1;i maximum) + { + maximum = freq_arr[i]; + position = i; + } + } + index_array[j++] = position; + freq_arr[position] = -1; + } + + for(int i = 0; i < j; i++){ + bp_history_info_fmt history_info; + bp_history_adaptor_get_info(ids[index_array[i]],offset,&history_info); + + std::shared_ptr history = std::make_shared(std::string(history_info.url)); + history->setUrl(std::string(history_info.url ? history_info.url : "")); + history->setTitle(std::string(history_info.title ? history_info.title : "")); + + //thumbail + std::shared_ptr hi = std::make_shared(); + hi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; + hi->width = history_info.thumbnail_width; + hi->height = history_info.thumbnail_height; + hi->dataSize = history_info.thumbnail_length; + hi->imageData = (void*)malloc(history_info.thumbnail_length); + memcpy(hi->imageData, (void*)history_info.thumbnail, history_info.thumbnail_length); + history->setThumbnail(hi); + + history_list.push_back(history); + } + free(ids); + return history_list; +} + +void HistoryService::addHistoryItem(std::shared_ptr his,std::shared_ptr thumbnail){ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + his->setFavIcon(his->getFavIcon()); + his->setThumbnail(thumbnail); + + if(isDuplicate(his->getTitle().c_str())) + return; + + int id = -1; + int ret = bp_history_adaptor_create(&id); + if (ret<0){ + BROWSER_LOGE("Error! Could not create new bookmark!"); + } + + int *ids=nullptr; + int count=-1; + bp_history_rows_cond_fmt conds; + conds.limit = 20; //no of rows to get negative means no limitation + conds.offset = -1; //the first row's index + conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort + conds.ordering = 1; //way of ordering 0 asc 1 desc + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_TODAY; + + ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + if (ret<0){ + BROWSER_LOGE("Error! Could not get ids!"); + } + + bp_history_adaptor_set_url(id, (his->getUrl()).c_str()); + bp_history_adaptor_set_title(id, (his->getTitle()).c_str()); + bp_history_adaptor_set_date_visited(id,-1); + bp_history_adaptor_set_frequency(id, 1); + + if (thumbnail) { + std::unique_ptr thumb_blob = tizen_browser::tools::EflTools::getBlobPNG(thumbnail); + unsigned char * thumb = std::move((unsigned char*)thumb_blob->getData()); + bp_history_adaptor_set_snapshot(id, thumbnail->width, thumbnail->height, thumb, thumb_blob->getLength()); + } + + std::shared_ptr favicon = his->getFavIcon(); + if (favicon) { + std::unique_ptr favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon); + unsigned char * fav = std::move((unsigned char*)favicon_blob->getData()); + bp_history_adaptor_set_icon(id, favicon->width, favicon->height, fav, favicon_blob->getLength()); + } + + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + historyAdded(his); +} + + +void HistoryService::insertOrRefresh(std::shared_ptr hi) { + /** + * No browser- provider implementation till now. Needs to be done + */ + //getStorageManager()->insertOrRefresh(hi); +} + +/** + * @throws HistoryException on error + */ +void HistoryService::clearAllHistory() +{ + bp_history_adaptor_reset(); + history_list.clear(); + historyAllDeleted(); +} + +int HistoryService::getHistoryId(const std::string & url) +{ + bp_history_rows_cond_fmt conds; + conds.limit = -1; + conds.offset = 0; + conds.order_offset = BP_HISTORY_O_DATE_CREATED; + conds.ordering = 0; + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_ALL; + int *ids = nullptr; + int ids_count = 0; + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&ids_count, &conds, BP_HISTORY_O_URL, url.c_str(), 0); + if (ids_count!=0){ + int i = *ids; + free(ids); + return i; + } + return 0; +} + + +/** + * @throws HistoryException on error + */ +void HistoryService::clearURLHistory(const std::string & url) +{ + int id = getHistoryId(url); + if (id!=0) + bp_history_adaptor_delete(id); + if(0 == getHistoryItemsCount()) + historyEmpty(true); + historyDeleted(url); +} + + +HistoryItemVector& HistoryService::getHistoryItems(int historyDepthInDays, int maxItems) +{ + history_list.clear(); + + int *ids=nullptr; + int count=-1; + bp_history_rows_cond_fmt conds; + conds.limit = 20; //no of rows to get negative means no limitation + conds.offset = -1; //the first row's index + conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort + conds.ordering = 1; //way of ordering 0 asc 1 desc + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = BP_HISTORY_DATE_TODAY; + + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + if (ret<0){ + BROWSER_LOGD("Error! Could not get ids!"); + } + + bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); + + for(int i = 0; i< count; i++){ + bp_history_info_fmt history_info; + bp_history_adaptor_get_info(ids[i],offset,&history_info); + + int date; + bp_history_adaptor_get_date_created(ids[i], &date); + + struct tm *item_time_info; + time_t item_time = (time_t)date; + item_time_info = localtime(&item_time); + + int m_year = item_time_info->tm_year; + int m_month = item_time_info->tm_mon + 1; + int m_day = item_time_info->tm_yday; + int m_month_day = item_time_info->tm_mday; + int m_date = date; + int min = item_time_info->tm_min; + int hour= item_time_info->tm_hour; + int sec = item_time_info->tm_sec; + + m_year = 2000 + m_year % 100; + + std::shared_ptr history = std::make_shared(std::string(history_info.url)); + boost::gregorian::date d(m_year,m_month,m_month_day); + boost::posix_time::ptime t(d,boost::posix_time::time_duration(hour,min,sec)); + history->setLastVisit(t); + history->setUrl(std::string(history_info.url ? history_info.url : "")); + history->setTitle(std::string(history_info.title ? history_info.title : "")); + + //thumbail + std::shared_ptr hi = std::make_shared(); + hi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; + hi->width = history_info.thumbnail_width; + hi->height = history_info.thumbnail_height; + hi->dataSize = history_info.thumbnail_length; + hi->imageData = (void*)malloc(history_info.thumbnail_length); + memcpy(hi->imageData, (void*)history_info.thumbnail, history_info.thumbnail_length); + history->setThumbnail(hi); + + history_list.push_back(history); + } + free(ids); + return history_list; +} + +int HistoryService::getHistoryVisitCounter(const std::string & url) +{ /** + * No browser- provider implementation till now. Needs to be done + */ +// return getStorageManager()->getHistoryVisitCounter(url); + +} + +} +} diff --git a/services/HistoryService/HistoryService.h b/services/HistoryService/HistoryService.h index 0e09cab..3f2c44e 100644 --- a/services/HistoryService/HistoryService.h +++ b/services/HistoryService/HistoryService.h @@ -44,10 +44,12 @@ public: virtual std::string getName(); int getHistoryId(const std::string & url); + /** * @throws HistoryException on error */ - void addHistoryItem(std::shared_ptr hi); + void addHistoryItem(std::shared_ptr hi, + std::shared_ptr thumbnail=std::shared_ptr()); /** * If hi->getUrl() exists on a table HISTORY update visit_counter and visit_date, unless insert hi to database. @@ -75,6 +77,7 @@ public: * @throws HistoryException on error */ HistoryItemVector & getHistoryItems(int historyDepthInDays = 7, int maxItems = 50); + HistoryItemVector & getMostVisitedHistoryItems(); /** * @throws HistoryException on error @@ -89,6 +92,10 @@ public: void setStorageServiceTestMode(bool testmode = true); boost::signals2::signalhistoryEmpty; + boost::signals2::signal)> historyAdded; + boost::signals2::signal historyDeleted; + boost::signals2::signal historyAllDeleted; + private: bool m_testDbMod;; std::vector> history_list; diff --git a/services/HistoryService/src/HistoryService.cpp b/services/HistoryService/src/HistoryService.cpp deleted file mode 100644 index 5aff218..0000000 --- a/services/HistoryService/src/HistoryService.cpp +++ /dev/null @@ -1,256 +0,0 @@ -/* - * 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 -#include - -#include "ServiceManager.h" -#include "HistoryService.h" -#include "HistoryItem.h" -#include "AbstractWebEngine.h" -#include "EflTools.h" - -namespace tizen_browser -{ -namespace services -{ - -EXPORT_SERVICE(HistoryService, DOMAIN_HISTORY_SERVICE) - -HistoryService::HistoryService() : m_testDbMod(false) -{ - BROWSER_LOGD("HistoryService"); -} - -HistoryService::~HistoryService() -{ -} - -std::shared_ptr HistoryService::getStorageManager() -{ - if (!m_storageManager) { - m_storageManager = std::dynamic_pointer_cast < - tizen_browser::services::StorageService, - tizen_browser::core::AbstractService > ( - tizen_browser::core::ServiceManager::getInstance().getService( - DOMAIN_STORAGE_SERVICE)); - } - - M_ASSERT(m_storageManager); - m_storageManager->init(m_testDbMod); - - return m_storageManager; -} - -void HistoryService::setStorageServiceTestMode(bool testmode) { - m_testDbMod = testmode; -} - -int HistoryService::getHistoryItemsCount(){ - return history_list.size(); -} - -static int __get_duplicated_ids_p(int **ids, int *count, const int limit, const int offset, - const bp_history_offset order_column_offset, const int ordering, - const bp_history_offset check_column_offset, - const char *keyword, const int is_like) -{ - bp_history_rows_cond_fmt conds; - memset(&conds, 0x00, sizeof(bp_history_rows_cond_fmt)); - - conds.limit = limit; - conds.offset = offset; - conds.ordering = ordering; - conds.order_offset = order_column_offset; - conds.period_offset = BP_HISTORY_O_DATE_CREATED; - conds.period_type = BP_HISTORY_DATE_ALL; - - return bp_history_adaptor_get_cond_ids_p - (ids, count, - &conds, - check_column_offset, - keyword, - is_like); -} - -void HistoryService::addHistoryItem(std::shared_ptr his){ - - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - his->setFavIcon(his->getFavIcon()); - std::shared_ptr favicon = his->getFavIcon(); - - int id = -1; - int ret = bp_history_adaptor_create(&id); - if (ret<0){ - BROWSER_LOGE("Error! Could not create new bookmark!"); - } - - int *ids=NULL; - int count=-1; - int **id1=&ids; - int *count1=&count; - - bp_history_rows_cond_fmt conds; - conds.limit = 20; //no of rows to get negative means no limitation - - conds.offset = -1; //the first row's index - conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort - - conds.ordering = 1; //way of ordering 0 asc 1 desc - - conds.period_offset = BP_HISTORY_O_DATE_CREATED; - conds.period_type = BP_HISTORY_DATE_TODAY; - - ret = bp_history_adaptor_get_cond_ids_p(id1 ,count1, &conds, 0, NULL, 0); - if (ret<0){ - BROWSER_LOGE("Error! Could not get ids!"); - } - - bp_history_adaptor_set_url(id, (his->getUrl()).c_str()); - bp_history_adaptor_set_title(id, (his->getTitle()).c_str()); - bp_history_adaptor_set_date_visited(id,-1); - - std::unique_ptr favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon); - unsigned char * fav = std::move((unsigned char*)favicon_blob->getData()); - bp_history_adaptor_set_icon(id, favicon->width, favicon->height, fav, favicon_blob->getLength()); - history_list.push_back(his); - - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -} - - -void HistoryService::insertOrRefresh(std::shared_ptr hi) { - getStorageManager()->insertOrRefresh(hi); -} - -/** - * @throws HistoryException on error - */ -void HistoryService::clearAllHistory() -{ - bp_history_adaptor_reset(); - history_list.clear(); -} - -int HistoryService::getHistoryId(const std::string & url) -{ - bp_history_rows_cond_fmt conds; - conds.limit = -1; - conds.offset = 0; - conds.order_offset = BP_HISTORY_O_DATE_CREATED; - conds.ordering = 0; - conds.period_offset = BP_HISTORY_O_DATE_CREATED; - conds.period_type = BP_HISTORY_DATE_ALL; - int *ids = 0; - int ids_count = 0; - int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&ids_count, &conds, BP_HISTORY_O_URL, url.c_str(), 0); - if (ids_count!=0){ - int i = *ids; - free(ids); - return i; - } - return 0; -} - -/** - * @throws HistoryException on error - */ -void HistoryService::clearURLHistory(const std::string & url) -{ - int id = getHistoryId(url); - if (id != 0) - bp_history_adaptor_delete(id); - if (0 == (getHistoryItemsCount() - 1)) { - historyEmpty(true); - history_list.clear(); - } -} - - -HistoryItemVector& HistoryService::getHistoryItems(int historyDepthInDays, int maxItems) -{ - history_list.clear(); - - int *ids=NULL; - int count=-1; - int **id1=&ids; - int *count1=&count; - - bp_history_rows_cond_fmt conds; - conds.limit = 20; //no of rows to get negative means no limitation - - conds.offset = -1; //the first row's index - conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort - - conds.ordering = 1; //way of ordering 0 asc 1 desc - - conds.period_offset = BP_HISTORY_O_DATE_CREATED; - - conds.period_type = BP_HISTORY_DATE_TODAY; - - int ret = bp_history_adaptor_get_cond_ids_p(id1 ,count1, &conds, 0, NULL, 0); - if (ret<0){ - BROWSER_LOGD("Error! Could not get ids!"); - } - - bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); - - for(int i = 0; i< (*count1); i++){ - bp_history_info_fmt history_info; - bp_history_adaptor_get_info(ids[i],offset,&history_info); - - int date; - bp_history_adaptor_get_date_created(ids[i], &date); - - struct tm *item_time_info; - time_t item_time = (time_t)date; - item_time_info = localtime(&item_time); - - int m_year = item_time_info->tm_year; - int m_month = item_time_info->tm_mon + 1; - int m_day = item_time_info->tm_yday; - int m_month_day = item_time_info->tm_mday; - int m_date = date; - int min = item_time_info->tm_min; - int hour= item_time_info->tm_hour; - int sec = item_time_info->tm_sec; - m_year = 2000 + m_year % 100; - - std::shared_ptr history = std::make_shared(std::string(history_info.url)); - boost::gregorian::date d(m_year,m_month,m_month_day); - boost::posix_time::ptime t(d,boost::posix_time::time_duration(hour,min,sec)); - history->setLastVisit(t); - history->setUrl(std::string(history_info.url ? history_info.url : "")); - history->setTitle(std::string(history_info.title ? history_info.title : "")); - history_list.push_back(history); - } - ids = NULL; - free(ids); - - return history_list; -} - -int HistoryService::getHistoryVisitCounter(const std::string & url) -{ - return getStorageManager()->getHistoryVisitCounter(url); -} - -} -} diff --git a/services/BookmarksUI/CMakeLists.txt b/services/MainUI/CMakeLists.txt similarity index 62% rename from services/BookmarksUI/CMakeLists.txt rename to services/MainUI/CMakeLists.txt index 1806b0f..fd1710f 100644 --- a/services/BookmarksUI/CMakeLists.txt +++ b/services/MainUI/CMakeLists.txt @@ -1,11 +1,11 @@ -project(BookmarksUI) +project(MainUI) -set(BookmarksUI_SRCS - BookmarksUI.cpp +set(MainUI_SRCS + MainUI.cpp ) -set(BookmarksUI_HEADERS - BookmarksUI.h +set(MainUI_HEADERS + MainUI.h ) include(Coreheaders) @@ -13,7 +13,7 @@ include(EFLHelpers) include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) -add_library(${PROJECT_NAME} SHARED ${BookmarksUI_SRCS}) +add_library(${PROJECT_NAME} SHARED ${MainUI_SRCS}) if(TIZEN_BUILD) target_link_libraries(${PROJECT_NAME} ${pkgs_LDFLAGS}) @@ -24,6 +24,6 @@ install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION services/static) include(EDCCompile) -EDJ_TARGET(Bookmarks.edj - ${CMAKE_CURRENT_SOURCE_DIR}/edc/Bookmarks.edc +EDJ_TARGET(MainUI.edj + ${CMAKE_CURRENT_SOURCE_DIR}/edc/MainUI.edc ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp new file mode 100644 index 0000000..d45d22c --- /dev/null +++ b/services/MainUI/MainUI.cpp @@ -0,0 +1,559 @@ +/* + * 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 "MainUI.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(MainUI, "org.tizen.browser.mainui") + +typedef struct _HistoryItemData +{ + std::shared_ptr item; + std::shared_ptr mainUI; +} HistoryItemData; + +typedef struct _BookmarkItemData +{ + std::shared_ptr item; + std::shared_ptr mainUI; +} BookmarkItemData; + +struct ItemData{ + tizen_browser::base_ui::MainUI * mainUI; + const char* button_name; + Elm_Object_Item * e_item; +}; + +MainUI::MainUI() + : m_gengrid(nullptr) + , m_genListTop(nullptr) + , 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) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + edjFilePath = EDJE_DIR; + edjFilePath.append("MainUI/MainUI.edj"); +} + +MainUI::~MainUI() +{ +} + +void MainUI::show(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(nullptr, edjFilePath.c_str()); + m_layout = elm_layout_add(parent); + elm_layout_file_set(m_layout, edjFilePath.c_str(), "mv_bookmarks"); + evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + 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); + + if (!m_big_item_class) { + m_big_item_class = elm_genlist_item_class_new(); + m_big_item_class->item_style = "big_grid_item"; + m_big_item_class->func.text_get = _grid_text_get; + m_big_item_class->func.content_get = _grid_content_get; + m_big_item_class->func.state_get = nullptr; + 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"; + m_small_item_class->func.text_get = _grid_text_get; + m_small_item_class->func.content_get = _grid_content_get; + m_small_item_class->func.state_get = nullptr; + m_small_item_class->func.del = nullptr; + } + + /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); + evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/ + + + m_gengrid = elm_gengrid_add(m_layout); + //elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid); + + 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_bookmark_item_class) { + m_bookmark_item_class = elm_gengrid_item_class_new(); + m_bookmark_item_class->item_style = "grid_item"; + m_bookmark_item_class->func.text_get = _grid_bookmark_text_get; + m_bookmark_item_class->func.content_get = _grid_bookmark_content_get; + m_bookmark_item_class->func.state_get = nullptr; + m_bookmark_item_class->func.del = nullptr; + } + + M_ASSERT(m_parent); + elm_theme_extension_add(nullptr, edjFilePath.c_str()); + 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); + + showTopButtons(); + showBottomButton(); +} + + +void MainUI::showTopButtons() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_theme_extension_add(nullptr, edjFilePath.c_str()); + m_genListTop = elm_genlist_add(m_layout); + elm_object_part_content_set(m_layout, "elm.swallow.genlistTop", 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, nullptr);*/ + + m_itemClassTop = elm_genlist_item_class_new(); + m_itemClassTop->item_style = "top_button_item"; + m_itemClassTop->func.text_get = nullptr; // &listTopItemTextGet; + m_itemClassTop->func.content_get = &listTopItemContentGet; + m_itemClassTop->func.state_get = 0; + m_itemClassTop->func.del = 0; + + ItemData * id = new ItemData; + id->mainUI = this; + 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; + id2->mainUI = this; + 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__); +} + +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); + elm_genlist_mode_set(m_genListBottom, ELM_LIST_LIMIT); + //elm_genlist_decorate_mode_set(m_genListBottom, EINA_TRUE); + evas_object_size_hint_weight_set(m_genListBottom, 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_itemClassBottom = elm_genlist_item_class_new(); + m_itemClassBottom->item_style = "bottom_button_item"; + m_itemClassBottom->func.text_get = nullptr; + m_itemClassBottom->func.content_get = &listItemBottomContentGet; + m_itemClassBottom->func.state_get = 0; + m_itemClassBottom->func.del = 0; + + ItemData * id = new ItemData; + id->mainUI = this; + Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListBottom, //genlist + m_itemClassBottom, //item Class + id, + nullptr, //parent item + ELM_GENLIST_ITEM_NONE,//item type + nullptr, + nullptr //data passed to above function + ); + id->e_item = elmItem; +} + +Evas_Object* MainUI::listTopItemContentGet(void* data, Evas_Object* obj, const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!strcmp(part, "mostvisited_click")) + { + Evas_Object *mvButton = elm_button_add(obj); + elm_object_style_set(mvButton, "invisible_button"); + evas_object_smart_callback_add(mvButton, "clicked", tizen_browser::base_ui::MainUI::_mostVisited_clicked, data); + return mvButton; + } + else if(!strcmp(part, "bookmark_click")) + { + Evas_Object *bmButton = elm_button_add(obj); + elm_object_style_set(bmButton, "invisible_button"); + evas_object_smart_callback_add(bmButton, "clicked", tizen_browser::base_ui::MainUI::_bookmark_clicked, data); + return bmButton; + } + return nullptr; +} + +void MainUI::_mostVisited_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->mainUI->mostVisitedClicked(std::string()); +} + +void MainUI::_bookmark_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->mainUI->bookmarkClicked(std::string()); +} + +void MainUI::_bookmark_manager_clicked(void * data, Evas_Object * /* obj */, void * event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + ItemData* itemData = reinterpret_cast(data); + itemData->mainUI->bookmarkManagerClicked(std::string()); +} + +Evas_Object* MainUI::listItemBottomContentGet(void* data, Evas_Object* obj, const char* part) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!strcmp(part, "bookmarkmanager_click")) + { + Evas_Object *bmButton = elm_button_add(obj); + elm_object_style_set(bmButton, "invisible_button"); + evas_object_smart_callback_add(bmButton, "clicked", tizen_browser::base_ui::MainUI::_bookmark_manager_clicked, data); + return bmButton; + } + return nullptr; +} + +void MainUI::addHistoryItem(std::shared_ptr hi) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + if (m_map_history_views.size() >= 5) + return; + + HistoryItemData *itemData = new HistoryItemData(); + itemData->item = hi; + itemData->mainUI = std::shared_ptr(this); + Elm_Object_Item* historyView = nullptr; + + switch(m_map_history_views.size()) + { + 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; + } + + m_map_history_views.insert(std::pair(hi->getUrl(),historyView)); + + setEmptyGengrid(false); +} + +void MainUI::addHistoryItems(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 > 5) break; + addHistoryItem(*it); + } +} + +void MainUI::addBookmarkItem(std::shared_ptr bi) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + BookmarkItemData *itemData = new BookmarkItemData(); + itemData->item = bi; + itemData->mainUI = std::shared_ptr(this); + Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_bookmark_item_class, itemData, nullptr, this); + m_map_bookmark_views.insert(std::pair(bi->getAddress(),bookmarkView)); + + // unselect by default + elm_gengrid_item_selected_set(bookmarkView, EINA_FALSE); + + setEmptyGengrid(false); +} + +void MainUI::addBookmarkItems(std::vector > items) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + for (auto it = items.begin(); it != items.end(); ++it) { + addBookmarkItem(*it); + } +} + +char* MainUI::_grid_text_get(void *data, Evas_Object *obj, const char *part) +{ + HistoryItemData *itemData = reinterpret_cast(data); + if (!strcmp(part, "page_title")) { + return strdup(itemData->item->getTitle().c_str()); + } + if (!strcmp(part, "page_url")) { + return strdup(itemData->item->getUrl().c_str()); + } + return strdup(""); +} + +char* MainUI::_grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part) +{ + BookmarkItemData *itemData = reinterpret_cast(data); + if (!strcmp(part, "page_title")) { + return strdup(itemData->item->getTittle().c_str()); + } + if (!strcmp(part, "page_url")) { + return strdup(itemData->item->getAddress().c_str()); + } + return strdup(""); +} + +Evas_Object * MainUI::_grid_content_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); + + if (!strcmp(part, "elm.thumbnail")) { + if (itemData->item->getThumbnail()) { + Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->mainUI->m_parent); + return thumb; + } + else { + return nullptr; + } + } + else if (!strcmp(part, "elm.thumbButton")) { + Evas_Object *thumbButton = elm_button_add(obj); + elm_object_style_set(thumbButton, "thumbButton"); + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MainUI::_thumbSelected, data); + return thumbButton; + } + return nullptr; +} + +Evas_Object * MainUI::_grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part) +{ + BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part); + BookmarkItemData *itemData = reinterpret_cast(data); + + if (!strcmp(part, "elm.thumbnail")) { + if (itemData->item->getThumbnail()) { + Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->mainUI->m_parent); + return thumb; + } + else { + return nullptr; + } + } + else if (!strcmp(part, "elm.thumbButton")) { + Evas_Object *thumbButton = elm_button_add(obj); + elm_object_style_set(thumbButton, "thumbButton"); + evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MainUI::_thumbSelected, data); + return thumbButton; + } + return nullptr; +} + + +void MainUI::_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)); + MainUI * self = reinterpret_cast(data); + + self->historyClicked(itemData->item); +} + +void MainUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */) +{ + HistoryItemData * itemData = reinterpret_cast(data); + itemData->mainUI->historyClicked(itemData->item); +} + +void MainUI::clearHistoryGenlist() +{ + elm_genlist_clear(m_genListMVSmall); + elm_genlist_clear(m_genListMVBig); + elm_genlist_clear(m_genListMVMedium); + 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")); +} + +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); +} + +void MainUI::clearBookmarkGengrid() +{ + elm_gengrid_clear(m_gengrid); + m_map_bookmark_views.clear(); + evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.grid")); +} + +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); +} + +void MainUI::hide() +{ + BROWSER_LOGD("MainUI Hide"); + evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.genlistTop")); + evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.genlistBottom")); + evas_object_hide(m_layout); + clearItems(); +} + +void MainUI::clearItems() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + clearHistoryGenlist(); + clearBookmarkGengrid(); + elm_genlist_clear(m_genListTop); + elm_genlist_clear(m_genListBottom); +} + +Evas_Object* MainUI::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 MainUI::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); + } +} + +void MainUI::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 MainUI::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/MainUI/MainUI.h b/services/MainUI/MainUI.h new file mode 100644 index 0000000..c0beb25 --- /dev/null +++ b/services/MainUI/MainUI.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 MAINUI_H +#define MAINUI_H + +#include +#include + +#include "AbstractUIComponent.h" +#include "AbstractService.h" +#include "ServiceFactory.h" +#include "service_macros.h" +#include "services/HistoryService/HistoryItem.h" +#include "BookmarkItem.h" + +namespace tizen_browser{ +namespace base_ui{ + +class BROWSER_EXPORT MainUI + : public tizen_browser::interfaces::AbstractUIComponent + , public tizen_browser::core::AbstractService +{ +public: + MainUI(); + ~MainUI(); + void show(Evas_Object *main_layout); + void hide(); + virtual std::string getName(); + void clearHistoryGenlist(); + void clearBookmarkGengrid(); + void showHistoryGenlist(); + void showBookmarkGengrid(); + void showTopButtons(); + void showBottomButton(); + void clearItems(); + + void addHistoryItem(std::shared_ptr); + void addHistoryItems(std::vector >); + void addBookmarkItem(std::shared_ptr); + void addBookmarkItems(std::vector >); + + boost::signals2::signal)> historyClicked; + boost::signals2::signal mostVisitedClicked; + boost::signals2::signal bookmarkClicked; + boost::signals2::signal bookmarkManagerClicked; +private: + static Evas_Object* listItemBottomContentGet(void *data, Evas_Object *obj, const char *part); + static Evas_Object* listTopItemContentGet(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 * _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 _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); + void setEmptyGengrid(bool setEmpty); + + static void _mostVisited_clicked(void * data, Evas_Object * obj, void * event_info); + static void _bookmark_clicked(void * data, Evas_Object * obj, void * event_info); + 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; + Elm_Genlist_Item_Class *m_itemClassTop; + Evas_Object *m_genListBottom; + Elm_Genlist_Item_Class *m_itemClassBottom; + Evas_Object *m_gengrid; + 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; + std::map m_map_bookmark_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/MainUI/edc/MainUI.edc b/services/MainUI/edc/MainUI.edc new file mode 100644 index 0000000..8357ec7 --- /dev/null +++ b/services/MainUI/edc/MainUI.edc @@ -0,0 +1,1505 @@ +#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 +#define PARENT_ITEM_HEIGHT 36 + + group{ + name: "elm/button/base/invisible_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/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: "mv_bookmarks"; + data { + item: "focus_highlight" "off"; + } + images { + image: "web_shadow.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; + } + } + + parts { + part { name: "genlistTop_bg"; + 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; + fixed: 0 0; + rel1 { + relative: 0 0; offset: 0 104; + } + rel2{ + relative: 1 1; + } + } + } + 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; + fixed: 0 0; + rel1 { + relative: 0 1; to: "genlistTop_bg"; + } + rel2{ + relative: 1 1; + } + } + } + part { name: "genlistBottom_bg"; + 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; + fixed: 0 0; + rel1 { + relative: 0 1; to: "gengrid_bg"; + } + rel2{ + relative: 1 1; + } + } + } + + part { name: "elm.swallow.grid"; + type: SWALLOW; + description { state: "default" 0.0; + min: 1920 614; + max: 1920 614; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "gengrid_bg"; offset: 63 0; + } + rel2 { + relative: 1 1; + offset: 0 0; + } + } + } + part { name: "elm.swallow.mvBig"; + type: SWALLOW; + description { state: "default" 0.0; + min: 800 626; + max: 800 626; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "gengrid_bg"; offset: 63 0; + } + rel2 { + relative: 1 1; + offset: 0 0; + } + } + } + part { name: "elm.swallow.mvMedium"; + type: SWALLOW; + description { state: "default" 0.0; + min: 600 626; + max: 600 626; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "gengrid_bg"; offset: 889 0; + } + rel2{ + relative: 1 1; + offset: 0 0; + } + } + } + part { name: "elm.swallow.mvSmall"; + type: SWALLOW; + description { state: "default" 0.0; + min: 342 626; + max: 342 626; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "gengrid_bg"; offset: 1515 0; + } + rel2 { + relative: 1 1; + offset: 0 0; + } + } + } + + part { name: "elm.swallow.genlistTop"; + type: SWALLOW; + description { state: "default" 0.0; + min: 1920 181; + max: 1920 181; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "genlistTop_bg"; + } + rel2 { + relative: 1 1; + offset: 0 0; + } + } + } + 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; to: "elm.swallow.genlistTop"; } + rel2 { relative: 1.0 1.0; } + } + } + part { name: "elm.swallow.genlistBottom"; + type: SWALLOW; + description { state: "default" 0.0; + min: 1920 181; + max: 1920 181; + align: 0.0 0.0; + fixed: 0 0; + rel1 { + relative: 0 0; to: "genlistBottom_bg"; + } + 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/genlist/item/big_grid_item/default"; + data.item: "texts" "page_title page_url"; + data.item: "contents" "elm.thumbnail elm.thumbButton"; + min: 600 614; + max: 600 614; + 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: 800 613; + max: 800 613; + 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: 800 526; + max: 800 526; + 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: 800 87; + max: 800 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: 700 48; + max: 700 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: 700 48; + max: 700 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/medium_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: 600 300; + max: 600 300; + 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; + } + } + 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: 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; + 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: 342 203; + max: 342 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: 342 87; + max: 342 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: 320 48; + max: 320 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: 320 48; + max: 320 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/gengrid/item/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: 338 294; + max: 338 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: 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: "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: 338 87; + max: 338 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: 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"; + } + } +} + +group { name: "elm/genlist/item/top_button_item/default"; + min: 1920 181; + max: 1920 181; + data.item: "texts" "mostvisited_text bookmark_text"; + data.item: "contents" "mostvisited_click bookmark_click"; + parts{ + part { + name: "bg_clipper"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 255 255 255 255; + align: 0 0; + min: 1920 181; + max: 1920 181; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + } + } + part { + name: "mostvisited_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + 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 58;} + 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: "mostvisited_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + 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: "Most visited"; + font: "Sans"; + size: 27; + align: 0.5 0.5; + } + } + } + part { + name: "mostvisited_over"; + scale:1; + type: RECT; + mouse_events: 1; + 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: "mostvisited_button";} + rel2 { relative: 1.0 1.0; to: "mostvisited_button";} + color_class: transparent; + } + } + part { + name: "mostvisited_click"; + scale:1; + type: SWALLOW; + mouse_events: 1; + 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: "mostvisited_over";} + rel2 { relative: 1.0 1.0; to: "mostvisited_over";} + } + } + part { + name: "bookmark_button"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + visible: 1; + fixed: 1 1; + 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 58;} + 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: "bookmark_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + 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: "Bookmark"; + font: "Sans"; + size: 27; + align: 0.5 0.5; + } + } + } + part { + name: "bookmark_over"; + scale:1; + type: RECT; + mouse_events: 1; + 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: "bookmark_button";} + rel2 { relative: 1.0 1.0; to: "bookmark_button";} + color_class: transparent; + } + } + part { + name: "bookmark_click"; + scale:1; + type: SWALLOW; + mouse_events: 1; + 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: "bookmark_over";} + rel2 { relative: 1.0 1.0; to: "bookmark_over";} + color_class: transparent; + } + } + + programs{ + program { + name: "mouse_click_mostvisited"; + signal: "mouse,clicked,1"; + source: "mostvisited_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_mostvisited_click"; + signal: "mouse,in"; + source: "mostvisited_*"; + action: STATE_SET "highlight" 0.0; + target: "mostvisited_button"; + target: "mostvisited_over"; + target: "mostvisited_text"; + } + program { + name: "mouse_out_mostvisited_click"; + signal: "mouse,out"; + source: "mostvisited_*"; + action: STATE_SET "default" 0.0; + target: "mostvisited_button"; + target: "mostvisited_over"; + target: "mostvisited_text"; + } + program { + name: "mouse_click_bookmark"; + signal: "mouse,clicked,1"; + source: "bookmark_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_bookmark_click"; + signal: "mouse,in"; + source: "bookmark_*"; + action: STATE_SET "highlight" 0.0; + target: "bookmark_button"; + target: "bookmark_over"; + target: "bookmark_text"; + } + program { + name: "mouse_out_bookmark_click"; + signal: "mouse,out"; + source: "bookmark_*"; + action: STATE_SET "default" 0.0; + target: "bookmark_button"; + target: "bookmark_over"; + target: "mostvisited_text"; + } + } + } +} + +group { name: "elm/genlist/item/bottom_button_item/default"; + min: 1920 181; + max: 1920 181; + data.item: "texts" "bookmarkmanager_text"; + data.item: "contents" "bookmarkmanager_click"; + parts{ + part { + name: "bg_clipper"; + scale:1; + mouse_events: 1; + type: RECT; + description { + state: "default" 0.0; + color: 255 255 255 255; + align: 0 0; + min: 1920 181; + max: 1920 181; + rel1 { relative: 0.0 0.0;} + rel2 { relative: 1.0 1.0;} + } + } + part { + name: "bookmarkmanager_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; + color: 192 192 192 255; + rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 786 58;} + 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: "bookmarkmanager_text"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + visible: 1; + fixed: 1 1; + 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: "Bookmark Manager"; + font: "Sans"; + size: 27; + align: 0.5 0.5; + } + } + } + part { + name: "bookmarkmanager_over"; + scale:1; + type: RECT; + mouse_events: 1; + 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: "bookmarkmanager_button";} + rel2 { relative: 1.0 1.0; to: "bookmarkmanager_button";} + color_class: transparent; + } + } + part { + name: "bookmarkmanager_click"; + scale:1; + type: SWALLOW; + mouse_events: 1; + 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: "bookmarkmanager_over";} + rel2 { relative: 1.0 1.0; to: "bookmarkmanager_over";} + } + } + } + programs{ + program { + name: "mouse_click_bookmarkmanager"; + signal: "mouse,clicked,1"; + source: "bookmarkmanager_over"; + script { + emit("elm,action,click", ""); + } + } + program { + name: "mouse_in_bookmarkmanager_click"; + signal: "mouse,in"; + source: "bookmarkmanager_*"; + action: STATE_SET "highlight" 0.0; + target: "bookmarkmanager_button"; + target: "bookmarkmanager_over"; + target: "bookmarkmanager_text"; + } + program { + name: "mouse_out_bookmarkmanager_click"; + signal: "mouse,out"; + source: "bookmarkmanager_*"; + action: STATE_SET "default" 0.0; + target: "bookmarkmanager_button"; + target: "bookmarkmanager_over"; + target: "bookmarkmanager_text"; + } + } + } +} diff --git a/services/BookmarksUI/edc/error.edc b/services/MainUI/edc/error.edc similarity index 100% rename from services/BookmarksUI/edc/error.edc rename to services/MainUI/edc/error.edc diff --git a/services/BookmarksUI/images/web_frame_selected.png b/services/MainUI/images/web_frame_selected.png similarity index 100% rename from services/BookmarksUI/images/web_frame_selected.png rename to services/MainUI/images/web_frame_selected.png diff --git a/services/BookmarksUI/images/ico_bg_round_shape_37x37.png b/services/MainUI/images/web_shadow.png similarity index 91% rename from services/BookmarksUI/images/ico_bg_round_shape_37x37.png rename to services/MainUI/images/web_shadow.png index 00182eda393bba8bd7548044060c54661dd2e1bd..f9018b0a6e15ae5670b67d580b890d1950636066 100644 GIT binary patch delta 422 zcmdnn%ebVAQL!_?&z+Y`ii?4Pf!EW+B?w3}0x=&48<2eGTo$uYv6zcdX!BGqGiDA$ z3o9TpGMRjt*ABsvRJMMx=ASpNxBv$#zx7e$%$#n zMk$l`@mVOF86+neC8g;an3$RCrWpg(S*9gh>LwXknx+}18k?jUnoO4DcOXh#4gUk8 z)G-R#BAo6fR6F^bkl5sK!8YPtjjVgKo6sI6M#IT0qUKD7CYx2;uunK%jSq7pMwJf%Ylun1AeWGKmAl{;sWEN2Lx>n%ElbzaVrq3-YA;A@z37Y adl@qre>2b^V%Uel6***Vz= zdi9JaJzX3_DsG*b;jiryC~>U*d&EQ!9UmQ4pS$N1o)~ZVz?oCasj9g#WXTl!c*h@H zS3Hs|HwqdnhZ*;ut$ro6v%IbPeDM3ESu;QXt9tkH&Uc%MDn_fsXKe0j^h~(0DzB6~ zhA}iq>`p*?nQH)<66^)i{4-Fvdu%7E2|X~z-q z*Q|_*wb%c$zrP|9@Rw=k_FE2;J3b0%voil&zU|T6S6kC99X_sNUd%Uxm*vF!wOyOH z*Ltk7khXUUdeczfd0>H>jDd{A6%Un_q6Z2mgq&tPdtgpg>4D&c0Drz6{5-GDF-~uE zjJ15AWU%71N09snffK8jF;0>Bz&3~F(Iw6g&z`T`bT^}W-twdcuM}4u2t24KD|LLi zWG&AQy^MU*2FV5AO5N5oo@U*-T$i`te;)Fy_sn(nNhohmcJD(olyCW`Ll!S t#7e$Mv0r>P>PF{_ABa?(z4RcNVL893?FdKd%4) diff --git a/services/PlatformInputManager/PlatformInputManager.cpp b/services/PlatformInputManager/PlatformInputManager.cpp index e7cc333..4fc5fbc 100644 --- a/services/PlatformInputManager/PlatformInputManager.cpp +++ b/services/PlatformInputManager/PlatformInputManager.cpp @@ -170,8 +170,9 @@ Eina_Bool PlatformInputManager::__filter(void *data, void */*loop_data*/, int ty self->rightPressed(); else if(!keyName.compare("KEY_ENTER")) self->enterPressed(); -// else if(!keyName.compare("BackSpace")) -// self->backPressed(); + // MERGE_ME dont know if should be commented out + else if(!keyName.compare("BackSpace")) + self->backPressed(); } else if(type == ECORE_EVENT_KEY_UP) { M_ASSERT(event); Ecore_Event_Key *ev = static_cast(event); diff --git a/services/SimpleUI/BookmarksManager.cpp b/services/SimpleUI/BookmarksManager.cpp new file mode 100644 index 0000000..8d82016 --- /dev/null +++ b/services/SimpleUI/BookmarksManager.cpp @@ -0,0 +1,411 @@ +/* + * 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 "BookmarksManager.h" +#include +#include +#include +#include +#include +#include "BrowserLogger.h" + +namespace tizen_browser +{ +namespace base_ui +{ + +BookmarksManagerItem::BookmarksManagerItem() + : action(std::make_shared()) +{ + +} +BookmarksManagerItem::BookmarksManagerItem( std::shared_ptr action) + : action(action) +{ + +} + + +BookmarksManagerItem::BookmarksManagerItem(const BookmarksManagerItem& source) + : action(source.action) +{ + +} +BookmarksManagerItem::BookmarksManagerItem(const BookmarksManagerItem* source) + : action(source->action) +{ + +} + + +BookmarksManagerItem::~BookmarksManagerItem() +{ + //elm_genlist_item_class_free(m_itemClass);?? +} + +BookmarksManager::BookmarksManager(std::shared_ptr< Evas_Object > mainWindow, Evas_Object* parentButton) + : MenuButton(mainWindow, parentButton) + , m_popup (nullptr) + , m_isPopupShown (false) + , m_genlist(nullptr) + , m_itemClass(nullptr) + , m_internalPopup(nullptr) + , m_internalPopupVisible(false) + , m_pointerModeEnabled(true) +{ + std::string edjFilePath = EDJE_DIR; + edjFilePath.append("SimpleUI/BookmarksManager.edj"); + elm_theme_extension_add(0, edjFilePath.c_str()); + + m_genlist = elm_genlist_add(m_window.get()); + + evas_object_smart_callback_add(m_genlist, "item,focused", focusItem, nullptr); + evas_object_smart_callback_add(m_genlist, "item,unfocused", unFocusItem, nullptr); + + elm_object_style_set(m_genlist, "bookmarks_manager"); + elm_genlist_homogeneous_set(m_genlist, EINA_TRUE); + elm_genlist_multi_select_set(m_genlist, EINA_FALSE); + + elm_genlist_select_mode_set(m_genlist, ELM_OBJECT_SELECT_MODE_ALWAYS); + + m_itemClass = elm_genlist_item_class_new(); + m_itemClass->item_style = "bookmarks_manager_item"; + + m_itemClass->func.text_get = &gridTextGet; + m_itemClass->func.content_get = &gridOptionLabelGet; + m_itemClass->func.state_get = 0; + m_itemClass->func.del = 0; +} + +BookmarksManager::~BookmarksManager() +{ + +} + +Evas_Object* BookmarksManager::getContent() +{ + return m_genlist; +} + +tizen_browser::base_ui::MenuButton::ListSize BookmarksManager::calculateSize() +{ + ListSize result; + + result.width = 490; + result.height = 426; + + return result; +} + +Evas_Object* BookmarksManager::getFirstFocus() +{ + return m_genlist; +} + +void BookmarksManager::addAction(sharedAction action) +{ + std::shared_ptr bookmarks_managerItem = std::make_shared(action); + BROWSER_LOGD("[%s] %x: %s", __func__ , bookmarks_managerItem.get(), bookmarks_managerItem->action->getText().c_str() ); + Elm_Object_Item* elmItem= elm_genlist_item_append(m_genlist, //genlist + m_itemClass, //item Class + bookmarks_managerItem.get(), //item data + 0, //parent item + ELM_GENLIST_ITEM_NONE,//item type + itemClicked, + this + ); + m_bookmarks_managerItemsMap[elmItem] = bookmarks_managerItem; + BROWSER_LOGD("[%s:%d] \n\t %x:%s ", __PRETTY_FUNCTION__, __LINE__, elmItem, bookmarks_managerItem->action->getText().c_str()); + if(!bookmarks_managerItem->action->isEnabled()){ + elm_object_item_disabled_set(elmItem, EINA_TRUE); + } + if(bookmarks_managerItem->action->isCheckable()){ + elm_object_item_signal_emit(elmItem, + (bookmarks_managerItem->action->isChecked() ? "switch,on" : "switch,off") + , "BookmarksManagerModel"); + } else { + elm_object_item_signal_emit(elmItem, "switch,hide", "BookmarksManagerModel"); + } + action->enabledChanged.connect(boost::bind(&BookmarksManager::onEnabledChanged, this, action)); + m_actionButtonMap[action] = elmItem; +} + +void BookmarksManager::onEnabledChanged(sharedAction action) +{ + BROWSER_LOGD("[%s]", __func__); + refreshAction(action); +} + +void BookmarksManager::refreshAction(sharedAction action) +{ + BROWSER_LOGD("[%s]", __func__); + if(action->isEnabled()) + elm_object_item_disabled_set(m_actionButtonMap[action], EINA_FALSE); + else + elm_object_item_disabled_set(m_actionButtonMap[action], EINA_TRUE); +} + +char* BookmarksManager::gridTextGet(void* data, Evas_Object* /*obj*/, const char* part) +{ + BROWSER_LOGD("[%s]", __func__); + BookmarksManagerItem *bookmarks_managerItem =reinterpret_cast(data); + if(!strcmp(part, "optionName")){ + if(!bookmarks_managerItem->action->getText().empty()){ + return strdup(bookmarks_managerItem->action->getText().c_str()); + } + } + return strdup(""); +} + +Evas_Object* BookmarksManager::gridOptionLabelGet(void* data, Evas_Object* obj, const char* part) +{ + BookmarksManagerItem *bookmarks_managerItem =reinterpret_cast(data); + if(!strcmp(part, "optionValue")){ + if(bookmarks_managerItem->action->isEnabled() && bookmarks_managerItem->action->isCheckable()){ + Evas_Object *label = elm_label_add(obj); + elm_object_text_set(label, (bookmarks_managerItem->action->isChecked() ? "On" :"Off" )); + elm_object_style_set(label, "bookmarks_manager_label"); + return label; + } + } + return nullptr; + +} + +void BookmarksManager::itemClicked(void* data, Evas_Object* /*o*/, void* event_info) +{ + BROWSER_LOGD("[%s]", __func__); + + BookmarksManager* bookmarks_manager = reinterpret_cast(data); + Elm_Object_Item* elmItem = reinterpret_cast(event_info); + BROWSER_LOGD("[%s:%d] \n\t %x", __PRETTY_FUNCTION__, __LINE__, elmItem); + if(bookmarks_manager->m_bookmarks_managerItemsMap.count(elmItem)){ + std::shared_ptr bookmarks_managerItem(bookmarks_manager->m_bookmarks_managerItemsMap[elmItem]);// elm_object_item_data_get(elmItem) + if(bookmarks_managerItem->action->isEnabled()){ + if(bookmarks_managerItem->action->isCheckable()) { + bookmarks_manager->showInternalPopup(elmItem); + } else{ + bookmarks_managerItem->action->trigger(); + } + } + } +} + +void BookmarksManager::showPopup() +{ + BROWSER_LOGD("[%s:%d] this: %x ", __PRETTY_FUNCTION__, __LINE__, this); + + if (isPopupShown()){ + m_isPopupShown = false; + unbindFocus(); + evas_object_hide(m_popup); + return; + } + + if(!m_popup) { + m_popup = elm_popup_add(m_window.get()); + BROWSER_LOGD("[%s:%d] - new popup: %x ", __PRETTY_FUNCTION__, __LINE__, m_popup); + evas_object_smart_callback_add(m_popup, "block,clicked", block_clicked, this); + // elm_object_content_set(m_popup, getContent()); + elm_object_part_text_set(m_popup, "title,text", "Add to Bookmark"); + + Evas_Coord w,h,x,y; + evas_object_geometry_get(m_window.get(), &x, &y, &w, &h); + evas_object_geometry_set(m_popup,0,0,w,h); + + //elm_object_style_set(m_popup, "message_popup"); + } + //evas_object_resize(m_popup, 480, 800); + realShow(m_popup); +} + +void BookmarksManager::realShow(Evas_Object* popup) +{ + elm_object_focus_next_object_set(m_parentButton, getFirstFocus(), ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(getFirstFocus(), m_parentButton, ELM_FOCUS_UP); + + // ListSize listSize = calculateSize(); + // evas_object_size_hint_min_set(m_popup, listSize.width, listSize.height); + // evas_object_size_hint_max_set(m_popup, listSize.width, listSize.height); + elm_popup_item_append(popup,"Folde 1",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 2",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 3",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 4",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 5",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 6",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 7",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 8",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 8",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 10",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 11",nullptr,nullptr,this); + elm_popup_item_append(popup,"Folde 12",nullptr,nullptr,this); + evas_object_show(popup); + m_isPopupShown=true; +} + +void BookmarksManager::unbindFocus() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_object_focus_next_object_set(m_parentButton, nullptr, ELM_FOCUS_DOWN); +} + +bool BookmarksManager::isPopupShown() +{ + return m_isPopupShown; +} + +void BookmarksManager::block_clicked(void *data, Evas_Object *obj, void *event_info) +{ + evas_object_hide(obj); +} + +void BookmarksManager::hidePopup() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + evas_object_hide(m_popup); + m_isPopupShown = false; +} + +void BookmarksManager::showInternalPopup(Elm_Object_Item* listItem) +{ + BROWSER_LOGD("[%s]", __func__); + m_internalPopupVisible = true; + m_trackedItem = listItem; + + if(!m_internalPopup){ + m_internalPopup = elm_ctxpopup_add(m_window.get()); + evas_object_smart_callback_add(m_internalPopup, "dismissed", BookmarksManager::dismissedCtxPopup, this); + } + Evas_Object * buttonBox = elm_box_add(m_internalPopup); + Evas_Object * radioOn = elm_radio_add(m_internalPopup); + Evas_Object * radioOff = elm_radio_add(m_internalPopup); + + + elm_object_text_set(radioOn, "On"); + elm_object_text_set(radioOff, "Off"); + + elm_object_style_set(radioOn, "bookmarks_manager_radio"); + elm_object_style_set(radioOff, "bookmarks_manager_radio"); + + elm_box_pack_end(buttonBox, radioOn); + elm_box_pack_end(buttonBox, radioOff); + + m_checkState = (m_bookmarks_managerItemsMap[m_trackedItem]->action->isChecked() ? CheckStateOn : CheckStateOff ); + + elm_radio_state_value_set(radioOn, CheckStateOn);//true + elm_radio_value_pointer_set(radioOn, reinterpret_cast(&m_checkState)); + + elm_radio_state_value_set(radioOff, CheckStateOff);//false + elm_radio_value_pointer_set(radioOff, reinterpret_cast(&m_checkState)); + + elm_radio_group_add(radioOff, radioOn); + + evas_object_smart_callback_add(radioOn, "changed", radioChanged, this); + evas_object_smart_callback_add(radioOff, "changed", radioChanged, this); + + evas_object_size_hint_weight_set(buttonBox, EVAS_HINT_EXPAND,EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(buttonBox, EVAS_HINT_FILL, EVAS_HINT_FILL); + + evas_object_show(buttonBox); + evas_object_show(radioOn); + evas_object_show(radioOff); + + + elm_object_content_set(m_internalPopup, buttonBox); + elm_ctxpopup_direction_priority_set(m_internalPopup, + ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_DOWN); + Evas_Coord w,h,x,y; + +#if PLATFORM(TIZEN) + evas_object_geometry_get(elm_object_item_track(m_trackedItem), &x, &y, &w, &h); + + BROWSER_LOGD("[%s:%d] \n\tx:%d; y:%d; w:%d; h:%d ", __PRETTY_FUNCTION__, __LINE__, + x, y, w, h); + evas_object_move(m_internalPopup, x + 354, y);//354 is proper value +#endif + + elm_object_style_set(m_internalPopup, "bookmarks_manager_button"); + evas_object_show(m_internalPopup); + if(!m_pointerModeEnabled) + elm_object_focus_set(radioOn, EINA_TRUE); + elm_object_item_signal_emit(m_trackedItem, "selected", "BookmarksManagerModel"); + elm_object_signal_emit(m_genlist, "show_popup", "BookmarksManagerModel"); +} + +void BookmarksManager::dismissedCtxPopup(void* data, Evas_Object* obj, void* /*event_info*/) +{ + BROWSER_LOGD("[%s]", __func__); + BookmarksManager* bookmarks_manager = static_cast(data); + evas_object_hide(obj); + bookmarks_manager->m_internalPopup = 0; + elm_object_signal_emit(bookmarks_manager->m_genlist, "hide_popup", "BookmarksManagerModel"); + elm_object_item_signal_emit(bookmarks_manager->m_trackedItem, "unselected", "BookmarksManagerModel"); + +#if PLATFORM(TIZEN) + elm_object_item_untrack(bookmarks_manager->m_trackedItem); +#endif + bookmarks_manager->m_internalPopupVisible = false; +} + +void BookmarksManager::radioChanged(void* data, Evas_Object* /*obj*/, void* /*event_info*/) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BookmarksManager *bookmarks_manager = static_cast(data); + std::shared_ptr bookmarks_managerItem(bookmarks_manager->m_bookmarks_managerItemsMap[bookmarks_manager->m_trackedItem]); + bookmarks_managerItem->action->toggle(); + elm_object_item_signal_emit(bookmarks_manager->m_trackedItem, + (bookmarks_managerItem->action->isChecked() ? "switch,on" : "switch,off") + , "BookmarksManagerModel"); + elm_genlist_item_update(bookmarks_manager->m_trackedItem); + elm_object_signal_emit(bookmarks_manager->m_internalPopup, "elm,state,hide", "elm"); +} + +void BookmarksManager::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", "option*"); +} + +void BookmarksManager::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", "option*"); +} + +void BookmarksManager::setPointerModeEnabled (bool enabled) +{ + m_pointerModeEnabled = enabled; +} + +bool BookmarksManager::canBeDismissed() +{ + BROWSER_LOGD("[%s]", __func__); + bool internalPopupVisible = m_internalPopup && m_internalPopupVisible; + if(internalPopupVisible) { + elm_ctxpopup_dismiss(m_internalPopup); + return false; + } + return true; +} + +}//namespace base_ui + +}//namespace tizen_browser diff --git a/services/SimpleUI/BookmarksManager.h b/services/SimpleUI/BookmarksManager.h new file mode 100644 index 0000000..b2dbde0 --- /dev/null +++ b/services/SimpleUI/BookmarksManager.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 BOOKSMARK_MANAGER_H +#define BOOKSMARK_MANAGER_H +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Action.h" +#include "MenuButton.h" + +namespace tizen_browser +{ +namespace base_ui +{ + +struct BookmarksManagerItem{ + std::shared_ptr action; + BookmarksManagerItem(); + BookmarksManagerItem(std::shared_ptr action); + BookmarksManagerItem(const BookmarksManagerItem& source); + BookmarksManagerItem(const BookmarksManagerItem* source); + ~BookmarksManagerItem(); +}; + + +class BookmarksManager: public MenuButton +{ +public: + BookmarksManager(std::shared_ptr< Evas_Object > mainWindow, Evas_Object* parentButton); + ~BookmarksManager(); + virtual Evas_Object *getContent(); + virtual ListSize calculateSize(); + virtual Evas_Object* getFirstFocus(); + void addAction(sharedAction action); + void onEnabledChanged(sharedAction action); + void refreshAction(sharedAction action); + void setPointerModeEnabled (bool enabled); + void showPopup(); + void hidePopup(); + bool isPopupShown(); + virtual bool canBeDismissed(); +private: + static char *gridTextGet(void *data, Evas_Object* obj, const char *part); + static Evas_Object *gridOptionLabelGet(void* data, Evas_Object* /*obj*/, const char* part); + static void itemClicked(void *data, Evas_Object *o, void *event_info); + static void block_clicked(void *data, Evas_Object *obj, void *event_info); + + void showInternalPopup(Elm_Object_Item* parent); + static void dismissedCtxPopup(void* data, Evas_Object* obj, void* event_info); + static void radioChanged(void *data, Evas_Object *obj, void *event_info); + +private: + Evas_Object *m_popup; + Evas_Object *m_genlist; + Evas_Object *m_internalPopup; + Elm_Object_Item *m_trackedItem; + Elm_Genlist_Item_Class *m_itemClass; + bool m_internalPopupVisible; + bool m_pointerModeEnabled; + std::map> m_bookmarks_managerItemsMap; + std::map m_actionButtonMap; + enum CheckState{ + CheckStateOn=1 + ,CheckStateOff=2 + }; + CheckState m_checkState; + void realShow(Evas_Object* popup); + void unbindFocus(); + bool m_isPopupShown; + + static void focusItem(void* data, Evas_Object* obj, void* event_info); + static void unFocusItem(void* data, Evas_Object* obj, void* event_info); +}; + +}//namespace base_ui + +}//namespace tizen_browser + +#endif // BOOKSMARK_MANAGER_H diff --git a/services/SimpleUI/CMakeLists.txt b/services/SimpleUI/CMakeLists.txt index 4053a76..bc3292c 100644 --- a/services/SimpleUI/CMakeLists.txt +++ b/services/SimpleUI/CMakeLists.txt @@ -8,6 +8,7 @@ set(SimpleUI_SRCS SimplePopup.cpp ZoomList.cpp TabList.cpp + BookmarksManager.cpp Settings.cpp SimpleScroller.cpp WebTitleBar.cpp @@ -22,6 +23,7 @@ set(SimpleUI_HEADERS SimplePopup.h ZoomList.h TabList.h + BookmarksManager.h Settings.h SimpleScroller.h HistoryList.h @@ -41,10 +43,18 @@ 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/StorageService/Storage/include) include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) include_directories(${CMAKE_SOURCE_DIR}/services/HistoryService) -include_directories(${CMAKE_SOURCE_DIR}/services/BookmarksUI) +include_directories(${CMAKE_SOURCE_DIR}/services/MoreMenuUI) +#MERGE_ME +#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/TabUI) include_directories(${CMAKE_SOURCE_DIR}/services/PlatformInputManager) include_directories(${CMAKE_SOURCE_DIR}/services/SessionStorage) @@ -57,13 +67,27 @@ add_library(${PROJECT_NAME} SHARED ${SimpleUI_SRCS}) add_dependencies(${PROJECT_NAME} SimpleURI) add_dependencies(${PROJECT_NAME} StorageService) add_dependencies(${PROJECT_NAME} HistoryService) -add_dependencies(${PROJECT_NAME} BookmarksUI) +#MERGE_ME +#add_dependencies(${PROJECT_NAME} MoreMenuUI) +#add_dependencies(${PROJECT_NAME} BookmarkManagerUI) +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} PlatformInputManager) add_dependencies(${PROJECT_NAME} SessionStorage) target_link_libraries(${PROJECT_NAME} SimpleURI) target_link_libraries(${PROJECT_NAME} StorageService) target_link_libraries(${PROJECT_NAME} HistoryService) -target_link_libraries(${PROJECT_NAME} BookmarksUI) +#MERGE_ME +#target_link_libraries(${PROJECT_NAME} MoreMenuUI) +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} BookmarkManagerUI) target_link_libraries(${PROJECT_NAME} PlatformInputManager) target_link_libraries(${PROJECT_NAME} SessionStorage) target_link_libraries(${PROJECT_NAME} ${EFL_LDFLAGS}) @@ -86,6 +110,7 @@ set(edcFiles AuthenticationPopup.edc TabItem.edc ZoomItem.edc + BookmarksManager.edc Settings.edc ScrollerDefault.edc HistoryItem.edc diff --git a/services/SimpleUI/HistoryList.cpp b/services/SimpleUI/HistoryList.cpp index 60623a6..508ae8f 100644 --- a/services/SimpleUI/HistoryList.cpp +++ b/services/SimpleUI/HistoryList.cpp @@ -21,6 +21,12 @@ #include "EflTools.h" #include +#if MERGE_ME +#include +#include +#include +#include +#endif namespace tizen_browser { @@ -210,11 +216,13 @@ char* HistoryList::listItemTextGet(void* data, Evas_Object* /* obj */, const cha return strdup(id->h_item->getUrl().c_str()); } } +#if MERGE_ME else if(!strcmp(part, "page_time")) { std::string retstr = boost::posix_time::to_simple_string(id->h_item->getLastVisit().time_of_day()); return strdup(retstr.c_str()); } +#endif return strdup(""); } diff --git a/services/SimpleUI/SimplePopup.cpp b/services/SimpleUI/SimplePopup.cpp index 363e905..57e2898 100644 --- a/services/SimpleUI/SimplePopup.cpp +++ b/services/SimpleUI/SimplePopup.cpp @@ -23,10 +23,10 @@ namespace base_ui evas_object_del(popup); } - SimplePopup::SimplePopup() : content(NULL) { } + SimplePopup::SimplePopup() : content(nullptr) { } SimplePopup::SimplePopup(const std::string &title, const std::string &message) - : content(NULL) + : content(nullptr) , title(title) , message(message) { } @@ -43,12 +43,15 @@ namespace base_ui popup = elm_popup_add(mainUi->getMainWindow().get()); evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - if(content != NULL) + if(content != nullptr) elm_object_content_set(popup, content); else elm_object_text_set(popup, message.c_str()); elm_popup_content_text_wrap_type_set(popup, ELM_WRAP_WORD); +#if MERGE_ME + elm_popup_content_text_wrap_type_set(popup, ELM_WRAP_CHAR); +#endif elm_object_part_text_set(popup, "title,text", title.c_str()); int buttonsCounter = 1; diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index ef0d403..381088f 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -17,7 +17,6 @@ #include "browser_config.h" #if defined(USE_EWEBKIT) -//#include #include #endif @@ -40,11 +39,11 @@ #include "BrowserImage.h" #include "SimpleURI.h" #include "SimpleUI.h" -#include "../BookmarksUI/BookmarksUI.h" #include "BookmarkItem.h" #include "Tools/EflTools.h" #include "BrowserImage.h" #include "HistoryItem.h" +#include "BookmarkItem.h" #include "boost/date_time/gregorian/gregorian.hpp" #include "boost/date_time/posix_time/posix_time.hpp" #include "NetworkErrorHandler.h" @@ -58,24 +57,31 @@ EXPORT_SERVICE(SimpleUI, "org.tizen.browser.simpleui") const std::string HomePageURL = "about:home"; -SimpleUI::SimpleUI(/*Evas_Object *window*/) +SimpleUI::SimpleUI() : AbstractMainWindow() - , m_mainLayout(NULL) - , m_progressBar(NULL) - , m_popup(NULL) + , m_mainLayout(nullptr) + , m_progressBar(nullptr) + , m_popup(nullptr) +#if MERGE_ME , m_settings() + , m_moreMenuUI() + , m_tabUI() + , m_bookmarkManagerUI() +#endif + , m_mainUI() , m_initialised(false) + , m_isHomePageActive(false) , m_currentZoom(ZOOM_TYPE_100) , items_vector() , m_networkErrorPopup(0) , m_wvIMEStatus(false) { - elm_init(static_cast(NULL), static_cast(NULL)); + elm_init(0, nullptr); ewk_context_default_get(); Evas_Object *main_window = elm_win_util_standard_add("browserApp", "browserApp"); - if (main_window == NULL) + if (main_window == nullptr) BROWSER_LOGE("Failed to create main window"); -// m_zoomList = NULL; + setMainWindow(main_window); } @@ -97,16 +103,30 @@ std::string SimpleUI::edjePath(const std::string &file) return std::string(EDJE_DIR) + file; } -std::vector > SimpleUI::getBookmarks() +std::vector > SimpleUI::getBookmarks(int folder_id) +{ + return m_favoriteService->getBookmarks(folder_id); +} + +std::vector > SimpleUI::getHistory() { - return m_favoriteService->getBookmarks(); + return m_historyService->getMostVisitedHistoryItems(); } + +std::vector > SimpleUI::getBookmarkFolders() +{ + return m_favoriteService->getBookmarkFolders(); +} + + + int SimpleUI::exec(const std::string& _url) { BROWSER_LOGD("[%s] _url=%s, initialised=%d", __func__, _url.c_str(), m_initialised); std::string url = _url; Session::Session lastSession; + if(!m_initialised){ if (m_window.get()) { config::DefaultConfig config; @@ -115,10 +135,9 @@ int SimpleUI::exec(const std::string& _url) m_favoritesLimit = boost::any_cast (config.get("FAVORITES_LIMIT")); elm_win_alpha_set(m_window.get(), EINA_FALSE); - // creatin main window + // creating main window int width = 0; int height = 0; - //ecore_x_window_size_get(ecore_x_window_root_first_get(), &width, &height); ecore_wl_screen_size_get(&width, &height); evas_object_move(m_window.get(), 0, 0); evas_object_resize(m_window.get(), width, height); @@ -168,29 +187,23 @@ int SimpleUI::exec(const std::string& _url) // bookmarks UI BROWSER_LOGD("[%s:%d] service: bookmarksui ", __PRETTY_FUNCTION__, __LINE__); - m_bookmarksUI = - std::dynamic_pointer_cast - - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarksui")); - M_ASSERT(m_bookmarksUI); - m_bookmarksUI->init(m_mainLayout); // favorites service BROWSER_LOGD("[%s:%d] service: favoriteservice ", __PRETTY_FUNCTION__, __LINE__); std::string favoriteService(boost::any_cast < std::string > (config.get("favorite_service_name"))); - BROWSER_LOGD("favorite config"); + BROWSER_LOGD("favorite config"); m_favoriteService = std::dynamic_pointer_cast (tizen_browser::core::ServiceManager::getInstance().getService(favoriteService)); - BROWSER_LOGD("favorite create"); + BROWSER_LOGD("favorite create"); M_ASSERT(m_favoriteService); -// m_favoriteService->synchronizeBookmarks(); - BROWSER_LOGD("favorite before getBookmarks"); + m_favoriteService->synchronizeBookmarks(); + BROWSER_LOGD("favorite before getBookmarks"); m_favoriteService->getBookmarks(); - BROWSER_LOGD("favorite after getBookmarks"); + BROWSER_LOGD("favorite after getBookmarks"); - // history service + // history service BROWSER_LOGD("[%s:%d] service: historyservice ", __PRETTY_FUNCTION__, __LINE__); m_historyService = std::dynamic_pointer_cast @@ -211,22 +224,19 @@ int SimpleUI::exec(const std::string& _url) m_platformInputManager->backPressed.connect(boost::bind(&SimpleUI::onBackPressed, this)); createActions(); + // left buttons leftButtonBar = std::make_shared(m_mainLayout, "SimpleUI/LeftButtonBar.edj", "left_button_bar"); leftButtonBar->addAction(m_back, "prev_button"); leftButtonBar->addAction(m_forward, "next_button"); leftButtonBar->addAction(m_reload, "refresh_stop_button"); - leftButtonBar->addAction(m_bookmark, "bookmark_button"); //register action that will be used later by buttons leftButtonBar->registerEnabledChangedCallback(m_stopLoading, "refresh_stop_button"); - leftButtonBar->registerEnabledChangedCallback(m_unbookmark, "bookmark_button"); // right buttons rightButtonBar = std::make_shared(m_mainLayout, "SimpleUI/RightButtonBar.edj", "right_button_bar"); rightButtonBar->addAction(m_tab, "tab_button"); - rightButtonBar->addAction(m_history, "history_button"); - rightButtonBar->addAction(m_zoom_in, "zoom_in_button"); - rightButtonBar->addAction(m_showSettingsPopup, "setting_button"); + rightButtonBar->addAction(m_showMoreMenu, "setting_button"); m_progressBar = elm_progressbar_add(m_mainLayout); elm_object_style_set(m_progressBar,"play_buffer"); @@ -234,7 +244,6 @@ int SimpleUI::exec(const std::string& _url) webTitleBar = std::make_shared(m_mainLayout, "SimpleUI/WebTitleBar.edj", "web_title_bar"); elm_object_part_content_set(m_mainLayout, "web_title_bar", webTitleBar->getContent()); - // put components on layout elm_object_part_content_set(m_mainLayout, "uri_entry", m_simpleURI->getContent(m_mainLayout)); elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_left", leftButtonBar->getContent()); elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_right", rightButtonBar->getContent()); @@ -261,20 +270,15 @@ int SimpleUI::exec(const std::string& _url) m_favoriteService->bookmarkAdded.connect(boost::bind(&SimpleUI::onBookmarkAdded, this,_1)); m_favoriteService->bookmarkDeleted.connect(boost::bind(&SimpleUI::onBookmarkRemoved, this, _1)); - m_favoriteService->bookmarksDeleted.connect(boost::bind(&tizen_browser::base_ui::BookmarksUI::deleteAllItems, m_bookmarksUI.get())); - m_bookmarksUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this,_1)); - m_bookmarksUI->bookmarkDeleteClicked.connect(boost::bind(&SimpleUI::onBookmarkDeleteClicked, this,_1)); - - m_historyService->historyEmpty.connect(boost::bind(&SimpleUI::disableHistoryButton, this, _1)); + //m_historyService->historyEmpty.connect(boost::bind(&SimpleUI::disableHistoryButton, this, _1)); + m_historyService->historyAdded.connect(boost::bind(&SimpleUI::onHistoryAdded, this,_1)); + m_historyService->historyDeleted.connect(boost::bind(&SimpleUI::onHistoryRemoved, this,_1)); connectActions(); elm_layout_signal_callback_add(m_simpleURI->getContent(), "slide_websearch", "elm", SimpleUI::favicon_clicked, this); - // add bookmarks for main screen - m_bookmarksUI->addBookmarkItems(getBookmarks()); - // show main layout and window evas_object_show(m_mainLayout); evas_object_show(m_window.get()); @@ -296,29 +300,32 @@ int SimpleUI::exec(const std::string& _url) } m_initialised = true; + // only when first run + if (url.empty()) { + BROWSER_LOGD("[%s]: changing to homeUrl", __func__); + switchViewToHomePage(); +#if MERGE_ME // Not sure if this should be enabled + filterURL(HomePageURL); +#endif + if(lastSession.items().size() >= 1){ + for(auto iter=lastSession.items().begin(), + end=lastSession.items().end(); + iter != end; + iter++ + ){ + openNewTab(iter->second); + } + m_sessionService->getStorage()->deleteSession(lastSession); + } + } + else + openNewTab(url); } - // only when first run - if (url.empty()) { - BROWSER_LOGD("[%s]: changing to homeUrl", __func__); - switchViewToHomePage(); - filterURL(HomePageURL); - if(lastSession.items().size() >= 1){ - for(auto iter=lastSession.items().begin(), - end=lastSession.items().end(); - iter != end; - iter++ - ){ - openNewTab(iter->second); - } - m_sessionService->getStorage()->deleteSession(lastSession); - } - } - else - openNewTab(url); - BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str()); + saveFolder("Bookmark Bar",0,1); + m_simpleURI->setFocus(); return 0; @@ -326,9 +333,9 @@ int SimpleUI::exec(const std::string& _url) void SimpleUI::loadThemes() { - elm_theme_extension_add(NULL, edjePath("SimpleUI/ZoomItem.edj").c_str()); - elm_theme_extension_add(NULL, edjePath("SimpleUI/TabItem.edj").c_str()); - elm_theme_extension_add(NULL, edjePath("SimpleUI/ErrorMessage.edj").c_str()); + elm_theme_extension_add(nullptr, edjePath("SimpleUI/ZoomItem.edj").c_str()); + elm_theme_extension_add(nullptr, edjePath("SimpleUI/TabItem.edj").c_str()); + elm_theme_extension_add(nullptr, edjePath("SimpleUI/ErrorMessage.edj").c_str()); elm_theme_overlay_add(0, edjePath("SimpleUI/ScrollerDefault.edj").c_str()); elm_theme_overlay_add(0, edjePath("SimpleUI/Tooltip.edj").c_str()); @@ -337,6 +344,7 @@ void SimpleUI::loadThemes() void SimpleUI::createActions() { ///\todo Add MulitStateAction. and convert m_stopLoading and m_reload actons to it? + m_back = sharedAction(new Action("Back")); m_back->setToolTip("Previous"); m_back->setIcon("browser/toolbar_prev"); @@ -352,35 +360,14 @@ void SimpleUI::createActions() m_reload = sharedAction(new Action("Reload")); m_reload->setToolTip("Reload"); m_reload->setIcon("browser/toolbar_reload"); - - m_bookmark = sharedAction(new Action("Bookmark")); - m_bookmark->setToolTip("Add to favorite"); - m_bookmark->setIcon("browser/toolbar_bookmark"); - - m_unbookmark = sharedAction(new Action("Unbookmark")); - m_unbookmark->setToolTip("Unfavorite"); - m_unbookmark->setIcon("browser/toolbar_unbookmark"); - m_tab = sharedAction(new Action("Tabs")); m_tab->setToolTip("Tab page"); m_tab->setIcon("browser/toolbar_tab"); //m_tab->setCheckable(true); - m_history = sharedAction(new Action("History")); - m_history->setToolTip("History"); - m_history->setIcon("browser/toolbar_history"); - if(m_historyService->getHistoryItemsCount() == 0){ - m_history->setEnabled(false); - } - - m_zoom_in = sharedAction(new Action("Zoom in")); - m_zoom_in->setToolTip("Zoom in/out"); - m_zoom_in->setIcon("browser/toolbar_zoom_in"); - - - m_showSettingsPopup = sharedAction(new Action("Settings")); - m_showSettingsPopup->setToolTip("Settings"); - m_showSettingsPopup->setIcon("browser/toolbar_setting"); + m_showMoreMenu = sharedAction(new Action("Settings")); + m_showMoreMenu->setToolTip("Settings"); + m_showMoreMenu->setIcon("browser/toolbar_setting"); /* m_settingPointerMode = sharedAction(new Action("Pointer mode")); m_settingPointerMode->setToolTip("Switch to Pointer Mode"); @@ -388,13 +375,12 @@ void SimpleUI::createActions() m_settingPointerMode->setChecked(m_platformInputManager->getPointerModeEnabled()); m_settingPointerMode->setEnabled(true); */ -/* + m_settingPrivateBrowsing = sharedAction(new Action("Private browsing")); m_settingPrivateBrowsing->setToolTip("On exit from private mode all cookies, history, and stored data will be deleted"); m_settingPrivateBrowsing->setCheckable(true); m_settingPrivateBrowsing->setChecked(m_webEngine->isPrivateMode()); m_settingPrivateBrowsing->setEnabled(true); -*/ m_settingDeleteHistory = sharedAction(new Action("Delete history")); m_settingDeleteHistory->setToolTip("Delete History"); @@ -404,73 +390,101 @@ void SimpleUI::createActions() m_settingDeleteFavorite = sharedAction(new Action("Delete favorite site")); m_settingDeleteFavorite->setToolTip("Delete favorite site"); + + m_bookmarks_manager_Add_NewFolder = sharedAction(new Action("+ New Folder")); + m_bookmarks_manager_Add_NewFolder->setToolTip("Add a new Folder"); + + m_bookmarks_manager_BookmarkBar = sharedAction(new Action("Bookmark Bar")); + m_bookmarks_manager_BookmarkBar->setToolTip("show Bookmark bar"); + + m_bookmarks_manager_Folder3 = sharedAction(new Action("Folder 3")); + m_bookmarks_manager_Folder3->setToolTip("open Folder 3"); + + m_bookmarks_manager_Folder2 = sharedAction(new Action("Folder 2")); + m_bookmarks_manager_Folder2->setToolTip("open Folder 2"); + + m_bookmarks_manager_Folder1 = sharedAction(new Action("Folder 1")); + m_bookmarks_manager_Folder1->setToolTip("open Folder 1"); } void SimpleUI::connectActions() { //left bar m_back->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::back, m_webEngine.get())); - m_back->triggered.connect(boost::bind(&SimpleUI::switchViewToBrowser, this)); + m_back->triggered.connect(boost::bind(&SimpleUI::updateBrowserView, this)); m_forward->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::forward, m_webEngine.get())); m_stopLoading->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::stopLoading, m_webEngine.get())); m_reload->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine::reload, m_webEngine.get())); - m_reload->triggered.connect(boost::bind(&SimpleUI::switchViewToBrowser, this)); - - m_bookmark->triggered.connect(boost::bind(&SimpleUI::addToBookmarks, this)); - m_unbookmark->triggered.connect(boost::bind(&SimpleUI::deleteBookmark, this)); + m_reload->triggered.connect(boost::bind(&SimpleUI::updateBrowserView, this)); //right bar - m_tab->triggered.connect(boost::bind(&SimpleUI::showTabMenu, this)); - m_zoom_in->triggered.connect(boost::bind(&SimpleUI::showZoomMenu, this)); - m_history->triggered.connect(boost::bind(&SimpleUI::showHistory, this)); - m_showSettingsPopup->triggered.connect(boost::bind(&SimpleUI::showSettingsMenu, this)); + m_tab->triggered.connect(boost::bind(&SimpleUI::showTabUI, this)); + m_showMoreMenu->triggered.connect(boost::bind(&SimpleUI::showMoreMenu, this)); -// m_settingPointerMode->toggled.connect(boost::bind(&tizen_browser::services::PlatformInputManager::setPointerModeEnabled, m_platformInputManager.get(), _1)); +// 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 } -void SimpleUI::updateBrowserView() +void SimpleUI::updateURIBarView() { + m_simpleURI->changeUri(m_webEngine->getURI()); + leftButtonBar->setActionForButton("refresh_stop_button", m_reload); + stopEnable(true); + reloadEnable(true); + hideProgressBar(); +} + +void SimpleUI::updateWebView() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); evas_object_hide(elm_object_part_content_get(m_mainLayout, "web_view")); elm_object_part_content_unset(m_mainLayout, "web_view"); elm_object_part_content_set(m_mainLayout, "web_view", m_webEngine->getLayout()); evas_object_show(m_webEngine->getLayout()); } +void SimpleUI::updateBrowserView() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(isHomePageActive()) + hideMainUI(); + + updateWebView(); + + updateURIBarView(); +} + void SimpleUI::switchToTab(const tizen_browser::basic_webengine::TabId& tabId) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if(m_webEngine->currentTabId() != tabId) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_webEngine->switchToTab(tabId); - switchViewToBrowser(); } -// if(!m_webEngine->isLoadError()){ -// BROWSER_LOGD("[%s:%d] swiching to web_view ", __PRETTY_FUNCTION__, __LINE__); -// updateBrowserView(); -// switchViewToBrowser(); -// } else { -// BROWSER_LOGD("[%s:%d] LOAD ERROR!", __PRETTY_FUNCTION__, __LINE__); -// loadError(); -// } - if(m_webEngine->isLoadError()){ BROWSER_LOGD("[%s:%d] LOAD ERROR!", __PRETTY_FUNCTION__, __LINE__); loadError(); - } else { - BROWSER_LOGD("[%s:%d] swiching to web_view ", __PRETTY_FUNCTION__, __LINE__); - updateBrowserView(); - switchViewToBrowser(); + return; } + BROWSER_LOGD("[%s:%d] swiching to web_view ", __PRETTY_FUNCTION__, __LINE__); + updateBrowserView(); } bool SimpleUI::isHomePageActive() { - BROWSER_LOGD("[%s]:%d", __func__, elm_object_part_content_get(m_mainLayout,"web_view") == m_bookmarksUI->getContent()); - return elm_object_part_content_get(m_mainLayout,"web_view") == m_bookmarksUI->getContent(); + BROWSER_LOGD("[%s:%d] isHomePageActive : %d", __PRETTY_FUNCTION__, __LINE__, m_isHomePageActive); + return m_isHomePageActive; } bool SimpleUI::isErrorPageActive() @@ -479,9 +493,9 @@ bool SimpleUI::isErrorPageActive() return elm_object_part_content_get(m_mainLayout, "web_view") == m_errorLayout; } - void SimpleUI::switchViewToHomePage() { +#if MERGE_ME // remove if(!isHomePageActive()){ evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view")); elm_object_part_content_unset(m_mainLayout, "web_view"); @@ -489,45 +503,32 @@ void SimpleUI::switchViewToHomePage() evas_object_show(m_bookmarksUI->getContent()); //m_simpleURI->changeUri(HomePageURL); filterURL(HomePageURL); + } +#endif + BROWSER_LOGD("[%s:%d] isHomePageActive : %d", __PRETTY_FUNCTION__, __LINE__, m_isHomePageActive); + if(isHomePageActive()) + return; - } + showMainUI(); + filterURL(HomePageURL); m_webEngine->disconnectCurrentWebViewSignals(); - - leftButtonBar->setActionForButton("bookmark_button", m_bookmark); leftButtonBar->setActionForButton("refresh_stop_button", m_reload); - zoomEnable(false); - addBookmarkEnable(false); - removeBookmarkEnable(false); stopEnable(false); reloadEnable(false); forwardEnable(false); backEnable(false); + evas_object_hide(leftButtonBar->getContent()); + elm_object_signal_emit(m_mainLayout, "shiftback_uri", "ui"); + elm_object_signal_emit(m_simpleURI->getContent(), "shiftback_uribg", "ui"); webTitleBar->hide(); hideProgressBar(); } -void SimpleUI::switchViewToBrowser() -{ - if (isHomePageActive() || isErrorPageActive()) { - updateBrowserView(); - } - - m_simpleURI->changeUri(m_webEngine->getURI()); - leftButtonBar->setActionForButton("refresh_stop_button", m_reload); - zoomEnable(true); - removeBookmarkEnable(true); - stopEnable(true); - reloadEnable(true); - bookmarkCheck(); - - hideProgressBar(); -} - void SimpleUI::checkTabId(const tizen_browser::basic_webengine::TabId& id){ BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); if(m_webEngine->currentTabId() != id || isErrorPageActive()){ @@ -542,13 +543,14 @@ void SimpleUI::openNewTab(const std::string &uri) } void SimpleUI::closeTab(){ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); auto tabId = m_webEngine->currentTabId(); closeTab(tabId); } void SimpleUI::closeTab(const tizen_browser::basic_webengine::TabId& id) { - + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); m_currentSession.removeItem(id.toString()); m_webEngine->closeTab(id); updateView(); @@ -561,22 +563,63 @@ void SimpleUI::bookmarkCheck() if(m_favoriteService->bookmarkExists(m_webEngine->getURI())){ BROWSER_LOGD("[%s] There is bookmark for this site [%s], set indicator on!", __func__, m_webEngine->getURI().c_str()); - leftButtonBar->setActionForButton("bookmark_button", m_unbookmark); + // MERGE_ME + //leftButtonBar->setActionForButton("bookmark_button", m_unbookmark); } else{ BROWSER_LOGD("[%s] There is no bookmark for this site [%s], set indicator off", __func__, m_webEngine->getURI().c_str()); - leftButtonBar->setActionForButton("bookmark_button", m_bookmark); - addBookmarkEnable(m_favoriteService->countBookmarksAndSubFolders() < m_favoritesLimit); + // MERGE_ME + //leftButtonBar->setActionForButton("bookmark_button", m_bookmark); + //addBookmarkEnable(m_favoriteService->countBookmarksAndSubFolders() < m_favoritesLimit); } } void SimpleUI::onBookmarkAdded(std::shared_ptr bookmarkItem) { - m_bookmarksUI->addBookmarkItem(bookmarkItem); +#if 0 BROWSER_LOGI("Bookmark added with address %s",bookmarkItem->getAddress().c_str()); bookmarkCheck(); webTitleBar->removeFavIcon(); webTitleBar->show("Added to favorites"); +#endif +} + +void SimpleUI::onHistoryAdded(std::shared_ptr historyItem) +{ +#if 0 + m_mainUI->addHistoryItem(historyItem); + BROWSER_LOGI("Bookmark added with address %s",historyItem->getUrl().c_str()); +#endif +} + +void SimpleUI::onHistoryClicked(std::shared_ptr historyItem) +{ + std::string historyAddress = historyItem->getUrl(); + openNewTab(historyAddress); +} + +void SimpleUI::onMostVisitedClicked(const std::string&) +{ + BROWSER_LOGD("[%s]", __func__); + m_mainUI->clearHistoryGenlist(); + m_mainUI->clearBookmarkGengrid(); + m_mainUI->addHistoryItems(getHistory()); + m_mainUI->showHistoryGenlist(); +} + +void SimpleUI::onBookmarkButtonClicked(const std::string&) +{ + BROWSER_LOGD("[%s]", __func__); + m_mainUI->clearBookmarkGengrid(); + m_mainUI->clearHistoryGenlist(); + m_mainUI->addBookmarkItems(getBookmarks()); + m_mainUI->showBookmarkGengrid(); +} + +void SimpleUI::onBookmarkManagerButtonClicked(const std::string&) +{ + BROWSER_LOGD("[%s]", __func__); + showBookmarkManagerMenu(); } void SimpleUI::onBookmarkClicked(std::shared_ptr bookmarkItem) @@ -593,12 +636,18 @@ void SimpleUI::onBookmarkDeleteClicked(std::shared_ptrremoveBookmarkItem(uri.c_str()); bookmarkCheck(); - webTitleBar->removeFavIcon(); webTitleBar->show("Removed from favorites"); +#endif +} + +void SimpleUI::onHistoryRemoved(const std::string& uri) +{ + BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str()); + //m_mainUI->removeHistoryItem(uri.c_str()); } void SimpleUI::onReturnPressed(MenuButton *m) @@ -610,7 +659,7 @@ void SimpleUI::onReturnPressed(MenuButton *m) m->hidePopup(); } -void SimpleUI::setwvIMEStatus(bool status) +void SimpleUI::setwvIMEStatus(bool status) { BROWSER_LOGD("[%s]", __func__); m_wvIMEStatus = status; @@ -619,7 +668,7 @@ void SimpleUI::setwvIMEStatus(bool status) void SimpleUI::onBackPressed() { BROWSER_LOGD("[%s]", __func__); - if (!m_simpleURI->hasFocus() && !m_wvIMEStatus) + if (!m_simpleURI->hasFocus() && !m_wvIMEStatus && !isHomePageActive() && m_back->isEnabled()) m_webEngine->backButtonClicked(); } @@ -645,38 +694,42 @@ void SimpleUI::stopEnable(bool enable) void SimpleUI::addBookmarkEnable(bool enable) { - m_bookmark->setEnabled(enable); + //MERGE_ME + //m_bookmark->setEnabled(enable); } void SimpleUI::removeBookmarkEnable(bool enable) { - m_unbookmark->setEnabled(enable); + //MERGE_ME + //m_unbookmark->setEnabled(enable); } void SimpleUI::zoomEnable(bool enable) { m_zoom_in->setEnabled(enable); } - void SimpleUI::settingsButtonEnable(bool enable) { - m_showSettingsPopup->setEnabled(enable); + m_showMoreMenu->setEnabled(enable); } - void SimpleUI::loadStarted() { BROWSER_LOGD("Switching \"reload\" to \"stopLoading\"."); showProgressBar(); + elm_object_signal_emit(m_simpleURI->getContent(), "shiftright_uribg", "ui"); + elm_object_signal_emit(m_mainLayout, "shiftright_uri", "ui"); + evas_object_show(leftButtonBar->getContent()); leftButtonBar->setActionForButton("refresh_stop_button", m_stopLoading); addBookmarkEnable(false); - zoomEnable(false); if(!m_webEngine->isPrivateMode()){ m_currentSession.updateItem(m_webEngine->currentTabId().toString(), m_webEngine->getURI()); } - //if(!m_platformInputManager->getPointerModeEnabled()) - // elm_object_focus_set(leftButtonBar->getButton("refresh_stop_button"), EINA_TRUE); +#if 0 + if(!m_platformInputManager->getPointerModeEnabled()) + elm_object_focus_set(leftButtonBar->getButton("refresh_stop_button"), EINA_TRUE); +#endif } void SimpleUI::progressChanged(double progress) @@ -697,8 +750,6 @@ void SimpleUI::loadFinished() addBookmarkEnable(m_favoriteService->countBookmarksAndSubFolders() < m_favoritesLimit); - zoomEnable(true); - if(m_simpleURI->getCurrentIconTyep() != SimpleURI::IconTypeFav){ m_simpleURI->setFavIcon(m_webEngine->getFavicon()); webTitleBar->setFavIcon(m_webEngine->getFavicon()); @@ -711,39 +762,26 @@ void SimpleUI::loadFinished() m_historyService->addHistoryItem(std::make_shared (m_webEngine->getURI(), m_webEngine->getTitle(), m_webEngine->getFavicon())); - m_history->setEnabled(true); } -/* +#if 0 if(!m_platformInputManager->getPointerModeEnabled()) elm_object_focus_set(leftButtonBar->getButton("refresh_stop_button"), EINA_TRUE); -*/ +#endif } void SimpleUI::loadError() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -// if(!isHomePageActive()){ -// evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view")); -// elm_object_part_content_unset(m_mainLayout, "web_view"); -// elm_object_part_content_set(m_mainLayout, "web_view", m_bookmarksUI->getContent()); -// evas_object_show(m_bookmarksUI->getContent()); -// //m_simpleURI->changeUri(HomePageURL); -// m_bookmarksUI->showErrorMsg(); -// //filterURL(HomePageURL); -// } - setErrorButtons(); - evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view")); - elm_object_part_content_unset(m_mainLayout, "web_view"); + hideWebView(); elm_object_part_content_set(m_mainLayout, "web_view",m_errorLayout); //evas_object_show(m_errorLayout); } void SimpleUI::setErrorButtons() { - leftButtonBar->setActionForButton("bookmark_button", m_bookmark); +// leftButtonBar->setActionForButton("bookmark_button", m_bookmark); leftButtonBar->setActionForButton("refresh_stop_button", m_reload); - zoomEnable(false); - addBookmarkEnable(false); +// addBookmarkEnable(false); stopEnable(false); reloadEnable(true); forwardEnable(false); @@ -773,7 +811,7 @@ void SimpleUI::filterURL(const std::string& url) m_webEngine->setURI(url); } m_simpleURI->clearFocus(); - addBookmarkEnable(false); + //addBookmarkEnable(false); } void SimpleUI::webEngineURLChanged(const std::string& url) @@ -827,34 +865,62 @@ void SimpleUI::zoomLevelChanged(int zoom_level) m_webEngine->setZoomFactor(zoom_level); m_currentZoom = static_cast (zoom_level); } -void SimpleUI::showTabMenu() -{ - if( !m_tabList ){ - BROWSER_LOGD("[%s:%d] - make_shared ", __PRETTY_FUNCTION__, __LINE__); - m_tabList = std::make_shared(m_window, - rightButtonBar->getButton("tab_button")); - m_tabList->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked,this)); - m_tabList->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this, _1)); - m_tabList->tabDelete.connect(boost::bind(&SimpleUI::closeTab, this, _1)); - m_platformInputManager->rightPressed.connect(boost::bind(&TabList::rightPressed, m_tabList.get())); - m_platformInputManager->leftPressed.connect(boost::bind(&TabList::leftPressed, m_tabList.get())); - m_platformInputManager->enterPressed.connect(boost::bind(&TabList::enterPressed, m_tabList.get())); +void SimpleUI::AddBookmarkPopup(std::string& str) +{ + BROWSER_LOGD("[%s]", __func__); + if(!m_bookmarks_manager){ + m_bookmarks_manager = std::make_shared(m_window, + rightButtonBar->getButton("bookmark_button")); + m_bookmarks_manager->addAction( m_bookmarks_manager_Add_NewFolder); + m_bookmarks_manager->addAction( m_bookmarks_manager_BookmarkBar); + m_bookmarks_manager->addAction( m_bookmarks_manager_Folder1); + m_bookmarks_manager->addAction( m_bookmarks_manager_Folder2); + m_bookmarks_manager->addAction( m_bookmarks_manager_Folder3); } m_platformInputManager->returnPressed.disconnect_all_slots(); - m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_tabList.get())); - hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_tabList.get())); - m_tabList->addItems(m_webEngine->getTabContents()); - m_tabList->setCurrentTabId(m_webEngine->currentTabId()); - m_tabList->disableNewTabBtn(m_tabList->getItemcCount() >= m_tabLimit); - m_tabList->showPopup(); + m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_bookmarks_manager.get())); + hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_bookmarks_manager.get())); + m_bookmarks_manager->showPopup(); } -void SimpleUI::newTabClicked() +void SimpleUI::AddNewFolderPopup(std::string& str) +{ + BROWSER_LOGD("[%s]", __func__); +} + +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 +} + +void SimpleUI::closeTabUI(const std::string& str) +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_tabUI = nullptr; +#endif +} + +void SimpleUI::newTabClicked(const std::string& str) { BROWSER_LOGD("%s", __func__); switchViewToHomePage(); } + void SimpleUI::tabClicked(const tizen_browser::basic_webengine::TabId& tabId) { BROWSER_LOGD("%s", __func__); @@ -939,52 +1005,196 @@ void SimpleUI::authPopupButtonClicked(PopupButtons button, std::shared_ptrgetContent(m_mainLayout)); + evas_object_hide(rightButtonBar->getContent()); + evas_object_hide(leftButtonBar->getContent()); + elm_object_part_content_unset(m_mainLayout, "uri_entry"); + elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_left"); + elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_right"); +} + +void SimpleUI::showURIBar() +{ + elm_object_part_content_unset(m_mainLayout, "uri_entry"); + elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_left"); + elm_object_part_content_unset(m_mainLayout, "uri_bar_buttons_right"); + elm_object_part_content_set(m_mainLayout, "uri_entry", m_simpleURI->getContent(m_mainLayout)); + elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_left", leftButtonBar->getContent()); + elm_object_part_content_set(m_mainLayout, "uri_bar_buttons_right", rightButtonBar->getContent()); + evas_object_show(m_simpleURI->getContent(m_mainLayout)); + evas_object_show(leftButtonBar->getContent()); + evas_object_show(rightButtonBar->getContent()); + m_simpleURI->setFocus(); +} +#endif + +void SimpleUI::hideWebView() +{ + evas_object_hide(elm_object_part_content_get(m_mainLayout,"web_view")); + elm_object_part_content_unset(m_mainLayout, "web_view"); +} + +void SimpleUI::hideMainUI() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(m_mainUI) + m_mainUI->hide(); + m_mainUI = nullptr; + m_isHomePageActive = false; +} + +void SimpleUI::showMainUI() { - if(!m_settings){ - m_settings = std::make_shared(m_window, - rightButtonBar->getButton("setting_button")); - //m_settings->addAction( m_settingPointerMode); - //m_settings->addAction( m_settingPrivateBrowsing); - m_settings->addAction( m_settingDeleteHistory); - m_settings->addAction( m_settingDeleteData); - m_settings->addAction( m_settingDeleteFavorite); - //m_settingPointerMode->toggled.connect(boost::bind(&tizen_browser::base_ui::Settings::setPointerModeEnabled, m_settings.get(), _1)); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_mainUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.mainui")); + M_ASSERT(m_mainUI); + hideWebView(); + 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; +} + +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 +} + +void SimpleUI::closeHistoryUI(const std::string& str) +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_historyUI = nullptr; +#endif +} + +void SimpleUI::showSettingsUI(const std::string& str) +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!m_settingsUI){ + m_settingsUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.settingsui")); + M_ASSERT(m_settingsUI); + m_settingsUI->closeSettingsUIClicked.disconnect_all_slots(); + m_settingsUI->closeSettingsUIClicked.connect(boost::bind(&SimpleUI::closeSettingsUI, this,_1)); + m_settingsUI->deleteSelectedDataClicked.disconnect_all_slots(); + m_settingsUI->deleteSelectedDataClicked.connect(boost::bind(&SimpleUI::settingsDeleteSelectedData, this,_1)); + m_settingsUI->resetMostVisitedClicked.disconnect_all_slots(); + m_settingsUI->resetMostVisitedClicked.connect(boost::bind(&SimpleUI::settingsResetMostVisited, this,_1)); + m_settingsUI->resetBrowserClicked.disconnect_all_slots(); + m_settingsUI->resetBrowserClicked.connect(boost::bind(&SimpleUI::settingsResetBrowser, this,_1)); + m_settingsUI->show(m_window.get()); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); } - m_platformInputManager->returnPressed.disconnect_all_slots(); - m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_settings.get())); - hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_settings.get())); - m_settingDeleteHistory->setEnabled(m_historyService->getHistoryItemsCount()); - m_settingDeleteFavorite->setEnabled(m_favoriteService->countBookmarksAndSubFolders()); - m_settings->showPopup(); +#endif +} + +void SimpleUI::closeSettingsUI(const std::string& str) +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_settingsUI.reset(); +#endif +} +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){ + m_moreMenuUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui")); + M_ASSERT(m_moreMenuUI); + 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(); + m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this,_1)); + m_moreMenuUI->AddBookmarkInput.disconnect_all_slots(); + m_moreMenuUI->AddBookmarkInput.connect(boost::bind(&SimpleUI::addToBookmarks, this,_1)); + m_moreMenuUI->BookmarkFolderCreated.disconnect_all_slots(); + m_moreMenuUI->BookmarkFolderCreated.connect(boost::bind(&SimpleUI::NewFolder, this,_1,_2,_3)); + m_moreMenuUI->show(m_window.get()); + m_moreMenuUI->getBookmarkFolderList(getBookmarkFolders()); + m_moreMenuUI->showCurrentTab(current_tab_as_new_tab ? nullptr : m_historyService->getHistoryItems().front()); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + } +#endif } -void SimpleUI::showHistory() +void SimpleUI::closeMoreMenu(const std::string& str) { - if(!m_historyList) { - m_historyList = std::make_shared(m_window, rightButtonBar->getButton("history_button")); - m_historyList->clickedHistoryItem.connect(boost::bind(&SimpleUI::openLinkFromPopup, this,_1)); - m_historyList->deleteHistoryItem.connect(boost::bind(&tizen_browser::services::HistoryService::clearURLHistory, m_historyService.get(),_1)); - m_historyList->deleteHistoryItem.connect(boost::bind(&SimpleUI::hideHistory, this)); +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_moreMenuUI.reset() ; +#endif +} - m_platformInputManager->rightPressed.connect(boost::bind(&HistoryList::rightPressed, m_historyList.get())); - m_platformInputManager->leftPressed.connect(boost::bind(&HistoryList::leftPressed, m_historyList.get())); - m_platformInputManager->enterPressed.connect(boost::bind(&HistoryList::enterPressed, m_historyList.get())); +void SimpleUI::showBookmarkManagerMenu() +{ +#if MERGE_ME + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(!m_bookmarkManagerUI){ + m_bookmarkManagerUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkmanagerui")); + M_ASSERT(m_bookmarkManagerUI); + m_bookmarkManagerUI->closeBookmarkManagerClicked.disconnect_all_slots(); + m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::closeBookmarkManagerMenu, this,_1)); + m_bookmarkManagerUI->saveFolderClicked.disconnect_all_slots(); + m_bookmarkManagerUI->saveFolderClicked.connect(boost::bind(&SimpleUI::saveFolder, this,_1,_2,_3)); + m_bookmarkManagerUI->bookmarkFolderClicked.disconnect_all_slots(); + m_bookmarkManagerUI->bookmarkFolderClicked.connect(boost::bind(&SimpleUI::updateBookmakMangaerGenGrid, this,_1)); + m_bookmarkManagerUI->show(m_window.get()); + m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders()); + m_bookmarkManagerUI->showTopContent(); } - m_platformInputManager->returnPressed.disconnect_all_slots(); - m_platformInputManager->returnPressed.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_historyList.get())); - hidePopup.connect(boost::bind(&SimpleUI::onReturnPressed, this, m_historyList.get())); - m_historyList->addItems(m_historyService->getHistoryItems()); - m_historyList->showPopup(); +#endif } -void SimpleUI::disableHistoryButton(bool flag) +void SimpleUI::updateBookmakMangaerGenGrid(int folder_id) { - BROWSER_LOGD("[%s:%d] flag:%d ", __PRETTY_FUNCTION__, __LINE__, flag); - m_history->setEnabled(!flag); - m_settingDeleteHistory->setEnabled(m_historyService->getHistoryItemsCount()); - hidePopup(); +#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) @@ -1010,75 +1220,80 @@ void SimpleUI::settingsPrivateModeSwitch(bool newState) BROWSER_LOGD("[%s:%d] webEngine private mode: %s", __PRETTY_FUNCTION__, __LINE__, (m_webEngine->isPrivateMode() ? "true" : "false")); } -void SimpleUI::settingsDeleteHistory() +void SimpleUI::settingsDeleteSelectedData(const std::string& str) { BROWSER_LOGD("[%s]: Deleting Hisory", __func__); SimplePopup *popup = SimplePopup::createPopup(); - popup->setTitle("Delete history"); + popup->setTitle("Delete selected data"); popup->addButton(OK); popup->addButton(CANCEL); - popup->setMessage("Are you sure you want to clear all browsing history?"); - popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteHistoryButton, this, _1, _2)); + popup->setMessage("Are you sure you want to delete all selected data?"); + std::shared_ptr popupData = std::make_shared(); + popupData->text = str; + popup->setData(popupData); + popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteSelectedDataButton, this, _1, _2)); popup->show(); } -void SimpleUI::settingsDeleteData() +void SimpleUI::onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr< PopupData > popupData) { - BROWSER_LOGD("[%s]", __func__); - SimplePopup *popup = SimplePopup::createPopup(); - popup->setTitle("Delete data"); - popup->addButton(OK); - popup->addButton(CANCEL); - popup->setMessage("Are you sure you want to clear all cookies and cache?"); - popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteDataButton, this, _1, _2)); - popup->show(); - + if(button == OK){ + BROWSER_LOGD("[%s]: OK", __func__); + std::string dataText = std::static_pointer_cast(popupData)->text; + BROWSER_LOGD("[%s]: TYPE : %s", __func__, dataText.c_str()); + if (dataText.find("CACHE") != std::string::npos) + m_webEngine->clearPrivateData(); + if (dataText.find("COOKIES") != std::string::npos) + m_webEngine->clearPrivateData(); + if (dataText.find("HISTORY") != std::string::npos) + m_historyService->clearAllHistory(); + //webTitleBar->removeFavIcon(); + //webTitleBar->show("History deleted"); + } } -void SimpleUI::settingsDeleteFavorite() +void SimpleUI::settingsResetMostVisited(const std::string& str) { - BROWSER_LOGD("[%s]", __func__); + BROWSER_LOGD("[%s]: Deleting Hisory", __func__); SimplePopup *popup = SimplePopup::createPopup(); - popup->setTitle("Delete favorite site"); + popup->setTitle("Delete most visited"); popup->addButton(OK); popup->addButton(CANCEL); - popup->setMessage("Are you sure you want to clear all favorite site?"); - popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteFavoriteButton, this, _1, _2)); + popup->setMessage("Are you sure you want to delete most visited sites?"); + popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteMostVisitedButton, this, _1, _2)); popup->show(); } -void SimpleUI::onDeleteHistoryButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) +void SimpleUI::onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) { if(button == OK){ BROWSER_LOGD("[%s]: OK", __func__); - m_historyService->clearAllHistory(); - m_history->setEnabled(false); + BROWSER_LOGD("[%s]: Deleting most visited", __func__); + /*m_historyService->clearAllHistory(); webTitleBar->removeFavIcon(); - webTitleBar->show("All histories are deleted"); - hidePopup(); + webTitleBar->show("History deleted");*/ } } -void SimpleUI::onDeleteDataButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) +void SimpleUI::settingsResetBrowser(const std::string& str) { - if(button == OK){ - BROWSER_LOGD("[%s]: OK", __func__); - m_webEngine->clearPrivateData(); - webTitleBar->removeFavIcon(); - webTitleBar->show("All cookies and cache are deleted"); - hidePopup(); - } + BROWSER_LOGD("[%s]: Deleting Hisory", __func__); + SimplePopup *popup = SimplePopup::createPopup(); + popup->setTitle("Reset browser"); + popup->addButton(OK); + popup->addButton(CANCEL); + popup->setMessage("Are you sure you want to reset browser?"); + popup->buttonClicked.connect(boost::bind(&SimpleUI::onResetBrowserButton, this, _1, _2)); + popup->show(); } -void SimpleUI::onDeleteFavoriteButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) +void SimpleUI::onResetBrowserButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/) { if(button == OK){ BROWSER_LOGD("[%s]: OK", __func__); - m_favoriteService->deleteAllBookmarks(); - bookmarkCheck(); - webTitleBar->removeFavIcon(); - webTitleBar->show("Favorites deleted"); - hidePopup(); + BROWSER_LOGD("[%s]: Resetting browser", __func__); + /*webTitleBar->removeFavIcon(); + webTitleBar->show("History deleted");*/ } } @@ -1114,7 +1329,7 @@ void SimpleUI::updateView() { switchViewToHomePage(); elm_object_part_text_set(rightButtonBar->getContent(), "tabs_number", ""); } else { - if (isHomePageActive() != true) { + if (!isHomePageActive()) { updateBrowserView(); } elm_object_part_text_set(rightButtonBar->getContent(), "tabs_number", (boost::format("%1%") % tabs).str().c_str()); @@ -1167,8 +1382,6 @@ void SimpleUI::hideProgressBar() evas_object_hide(m_progressBar); } - - void SimpleUI::searchWebPage(std::string &text, int flags) { m_webEngine->searchOnWebsite(text, flags); @@ -1184,12 +1397,50 @@ void SimpleUI::favicon_clicked(void *data, Evas_Object */*obj*/, const char */*e } } -void SimpleUI::addToBookmarks(void) -{ +void SimpleUI::addToBookmarks(int folder_id) +{ BROWSER_LOGD("[%s,%d],", __func__, __LINE__); if (m_favoriteService) - m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(), + { if( m_webEngine && !m_webEngine->getURI().empty()) + { m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(), m_webEngine->getSnapshotData(373, 240), - m_webEngine->getFavicon()); + m_webEngine->getFavicon(),(unsigned int)folder_id); + } + } +} + +void SimpleUI::saveFolder(const char* title,int folder_id, int by_operator) +{ BROWSER_LOGD("[%s,%d],", __func__, __LINE__); + int id = -1; + if (m_favoriteService) + m_favoriteService->save_folder(title, &id, folder_id, 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 +} + + + +void SimpleUI::NewFolder(const char* title,int folder_id, int by_operator) +{ BROWSER_LOGD("[%s,%d],", __func__, __LINE__); + int id = -1; + if (m_favoriteService) + m_favoriteService->save_folder(title, &id, folder_id, by_operator); + if (id >= 0 ) + { BROWSER_LOGD("[%s], Added New Folder", __func__); + } + if (m_favoriteService) + { if( m_webEngine && !m_webEngine->getURI().empty()) + { m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(), + m_webEngine->getSnapshotData(373, 240), + m_webEngine->getFavicon(),(unsigned int)id); + } + } } void SimpleUI::deleteBookmark(void) diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index 5c5f736..d106d49 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -26,9 +26,6 @@ #include -//#include -//#include - #include "AbstractMainWindow.h" #include "AbstractService.h" #include "AbstractFavoriteService.h" @@ -37,9 +34,21 @@ // components #include "AbstractWebEngine.h" -#include "BookmarksUI.h" +#if MERGE_ME +#include "BookmarkManagerUI.h" +#include "MoreMenuUI.h" +#include "HistoryUI.h" +#include "SettingsUI.h" +#endif +#include "MainUI.h" +#if MERGE_ME +#include "TabUI.h" +#endif #include "ButtonBar.h" #include "HistoryService.h" +#if MERGE_ME +#include "BookmarkManagerUI.h" +#endif #include "SimpleURI.h" #include "SimpleScroller.h" #include "WebTitleBar.h" @@ -53,6 +62,7 @@ #include "WebConfirmation.h" #include "ZoomList.h" #include "TabList.h" +#include "BookmarksManager.h" #include "Settings.h" #include "HistoryList.h" #include "NetworkErrorHandler.h" @@ -68,8 +78,6 @@ void AbstractMainWindow::setMainWindow(Evas_Object * rawPtr) m_window = std::shared_ptr(rawPtr, evas_object_del); } - - class BROWSER_EXPORT SimpleUI : public AbstractMainWindow { public: @@ -106,24 +114,35 @@ private: bool isHomePageActive(); void switchViewToHomePage(); - void switchViewToBrowser(); void updateBrowserView(); + void updateWebView(); + void updateURIBarView(); void updateView(); void openNewTab(const std::string &uri); void switchToTab(const tizen_browser::basic_webengine::TabId& tabId); - void newTabClicked(); + void newTabClicked(const std::string &); void tabClicked(const tizen_browser::basic_webengine::TabId& tabId); void tabCreated(); void tabClosed(const tizen_browser::basic_webengine::TabId& id); void bookmarkCheck(); - std::vector > getBookmarks(); + std::vector > getBookmarks(int folder_id = 0); + std::vector > getBookmarkFolders(); + std::vector > getHistory(); void onBookmarkAdded(std::shared_ptr bookmarkItem); + void onBookmarkClicked(std::shared_ptr bookmarkItem); void onBookmarkDeleteClicked(std::shared_ptr bookmarkItem); void onBookmarkRemoved(const std::string& uri); + void onHistoryAdded(std::shared_ptr historyItem); + void onHistoryRemoved(const std::string& uri); + void onHistoryClicked(std::shared_ptr historyItem); + void onMostVisitedClicked(const std::string&); + void onBookmarkButtonClicked(const std::string&); + void onBookmarkManagerButtonClicked(const std::string&); + void handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation); void authPopupButtonClicked(PopupButtons button, std::shared_ptr popupData); @@ -133,8 +152,6 @@ private: void setwvIMEStatus(bool status); - - sharedAction m_back; sharedAction m_forward; sharedAction m_stopLoading; @@ -142,14 +159,22 @@ private: sharedAction m_bookmark; sharedAction m_unbookmark; sharedAction m_tab; - sharedAction m_history; + sharedAction m_share; sharedAction m_zoom_in; - sharedAction m_showSettingsPopup; + sharedAction m_showMoreMenu; + sharedAction m_showBookmarkManagerUI; sharedAction m_settingPointerMode; -// sharedAction m_settingPrivateBrowsing; + sharedAction m_settingPrivateBrowsing; sharedAction m_settingDeleteHistory; sharedAction m_settingDeleteData; sharedAction m_settingDeleteFavorite; + sharedAction m_mostvisited; + sharedAction m_bookmarksvisited; + sharedAction m_bookmarks_manager_Add_NewFolder; + sharedAction m_bookmarks_manager_BookmarkBar; + sharedAction m_bookmarks_manager_Folder1; + sharedAction m_bookmarks_manager_Folder2; + sharedAction m_bookmarks_manager_Folder3; /** * \brief filters URL before it is passed to WebEngine. @@ -173,13 +198,13 @@ private: * and this is a back function that checks if address emited from browser should be changed. */ void webEngineURLChanged(const std::string& url); - - /** + void onmostHistoryvisitedClicked(); + void onBookmarkvisitedClicked(); + /** * @brief Adds current page to bookmarks. * */ - void addToBookmarks(void); - + void addToBookmarks(int); /** * @brief Remove current page from bookmarks * @@ -197,31 +222,48 @@ private: void showHistory(); void hideHistory(); - - /** - * \brief shows Tab showTabMenu - */ - void showTabMenu(); - - void showSettingsMenu(); + void AddBookmarkPopup(std::string& str); + void AddNewFolderPopup(std::string& str); + + void saveFolder(const char* title, int folder_id, int by_user); + void NewFolder(const char* title, int folder_id, int by_user); + void showTabUI(); + void closeTabUI(const std::string& str); + void showMoreMenu(); + void closeMoreMenu(const std::string& str); + void showHistoryUI(const std::string& str); + void closeHistoryUI(const std::string& str); + void showMainUI(); + void hideMainUI(); + void showURIBar(); + void hideURIBar(); + void hideWebView(); void hideSettingsMenu(); + void showSettingsUI(const std::string&); + void closeSettingsUI(const std::string&); void showProgressBar(); void hideProgressBar(); + void closeBookmarkManagerMenu(std::string& str); + void updateBookmakMangaerGenGrid(int folder_id); + void showBookmarkManagerMenu(); void showPopup(Evas_Object *content, char* btn1_text, char* btn2_text); - void closeTab(); void closeTab(const tizen_browser::basic_webengine::TabId& id); void settingsPointerModeSwitch(bool newState); void settingsPrivateModeSwitch(bool newState); - void settingsDeleteHistory(); void settingsDeleteData(); void settingsDeleteFavorite(); - void onDeleteHistoryButton(PopupButtons button, std::shared_ptr popupData); + void settingsDeleteSelectedData(const std::string& str); + void settingsResetMostVisited(const std::string& str); + void settingsResetBrowser(const std::string& str); + void onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr popupData); + void onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr popupData); + void onResetBrowserButton(PopupButtons button, std::shared_ptr popupData); void onDeleteDataButton(PopupButtons button, std::shared_ptr popupData); void onDeleteFavoriteButton(PopupButtons button, std::shared_ptr popupData); void tabLimitPopupButtonClicked(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/); @@ -242,6 +284,7 @@ private: Evas_Object *m_mainLayout; Evas_Object *m_progressBar; Evas_Object *m_popup; + Evas_Object *m_entry; Evas_Object *m_errorLayout; CustomPopup *m_ownPopup; SimpleScroller *m_scroller; @@ -249,19 +292,32 @@ private: std::shared_ptr> m_webEngine; std::shared_ptr m_simpleURI; std::shared_ptr leftButtonBar; + std::shared_ptr webviewbar; + std::shared_ptr rightButtonBar; std::shared_ptr m_favoriteService; std::shared_ptr m_historyService; - std::shared_ptr m_bookmarksUI; +#if MERGE_ME + std::shared_ptr m_moreMenuUI; + std::shared_ptr m_bookmarkManagerUI; +#endif + std::shared_ptr m_mainUI; +#if MERGE_ME + std::shared_ptr m_historyUI; + std::shared_ptr m_settingsUI; + std::shared_ptr m_tabUI; +#endif std::shared_ptr m_zoomList; std::shared_ptr m_tabList; std::shared_ptr m_platformInputManager; std::shared_ptr m_sessionService; tizen_browser::Session::Session m_currentSession; + std::shared_ptr m_bookmarks_manager; std::shared_ptr m_settings; std::shared_ptr m_historyList; std::shared_ptr webTitleBar; bool m_initialised; + bool m_isHomePageActive; zoom_type m_currentZoom; int m_tabLimit; int m_favoritesLimit; diff --git a/services/SimpleUI/edc/BookmarksManager.edc b/services/SimpleUI/edc/BookmarksManager.edc new file mode 100644 index 0000000..0b6e9b9 --- /dev/null +++ b/services/SimpleUI/edc/BookmarksManager.edc @@ -0,0 +1,574 @@ +#define WIDTH 473 +#define HEIGHT 490 +#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; } \ + } \ + } +data { item: "width" WIDTH; item: "height" HEIGHT; } +color_classes{ + color_class{ + name: "defaultFontColor"; + color: 211 211 211 255; + } + color_class{ + name: "disabledFontColor"; + color: 60 60 60 160; + } + color_class{ + name: "selectedItemFontColor"; + color: 255 255 255 255; + } + color_class{ + name: "transparent"; + color: 0 0 0 0; + } + color_class{ + name: "selectedBackground"; + color: 69 143 255 255; + } + color_class{ + name: "dimmColor"; + color: 0 0 0 128; + } + color_class{ + name: "on_offBackgroundColor"; + color: 255 255 255 255; + } +} +collections { + group{ name: "elm/genlist/base/bookmarks_manager"; + min: 473 426; + max: 473 426; + 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; + description{ + state: "default" 0.0; + color: 18 22 34 255; + rel1{ + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part{ + name: "elm.swallow.content"; + type: SWALLOW; + clip_to: "clipper"; + mouse_events: 1; + description{ + state: "default" 0.0; + align: 0.5 0.5; + fixed: 1 1; + rel1{ + relative: 0 0; + } + rel2{ + relative: 1 1; + } + } + } + part{ + name: "elm.swallow.empty"; + type: SWALLOW; + description{ + state: "default" 0.0; + fixed: 1 1; + rel1{ + relative: 0.5 0.5; + } + rel2{ + relative: 0.5 0.5; + } + } + } + part{ name: "dimmer"; + type: RECT; + description{ + state: "default" 0.0; + color: 0 0 0 128; + visible: 0; + } + description{ + state: "popup_show" 0.0; + inherit: "default"; + visible:1; + } + } + }//parts + programs{ + program{ + name: "show_popup"; + signal: "show_popup"; + source: "SettingsModel"; + action: STATE_SET "popup_show" 0.0; + target: "dimmer"; + } + program{ + name: "hide_popup"; + signal: "hide_popup"; + source: "SettingsModel"; + action: STATE_SET "default" 0.0; + target: "dimmer"; + } + } + }//group + group{ name: "elm/genlist/item/bookmarks_manager_item/default"; + alias: "elm/genlist/item_odd/bookmarks_manager_item/default"; + alias: "elm/genlist/item_compress/bookmarks_manager_item/default"; + alias: "elm/genlist/item_compress_odd/bookmarks_manager_item/default"; + min: 473 80; + max: 473 80; + data.item: "texts" "optionName"; + data.item: "contents" "optionValue"; + parts{ + part{ + name: "value_helper"; + mouse_events:0; + description{ + state: "default" 0.0; + color: 0 0 0 0; + } + description{ + state: "on" 0.0; + color: 0 0 0 0; + } + description{ + state: "off" 0.0; + color: 0 0 0 0; + } + } + part{ + name: "optionBackground"; + type: RECT; + mouse_events: 1; + description{ + state: "default" 0.0; + color_class: "transparent"; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative: 1.0 1.0; + } + } + description{ + state: "mouseOver" 0.0; + inherit: "default"; + color_class: "selectedBackground"; + } + description{ + state: "mouseOut" 0.0; + inherit: "default"; + } + description{ + state: "selected" 0.0; + inherit: "mouseOver"; + } + } + part{ name:"optionName"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0 0.5; + min: 298 80; + max: 298 80; + color_class: "defaultFontColor"; + rel1{ + relative: 0.0 0.0; + offset: 25 0; + } + rel2.relative: 1.0 1.0; + text{ + size: 30; + align: 0 0.5; + } + } + description{ + state: "mouseOut" 0.0; + inherit: "default"; + } + description{ + state: "mouseOver" 0.0; + inherit: "default" 0.0; + color_class: "selectedItemFontColor"; + } + description{ + state: "disabled" 0.0; + inherit: "default" 0.0; + color_class: "disabledFontColor"; + } + } + part{ name: "optionValue"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0 0.5; + fixed: 1 1; + min: 100 40; + max: 100 40; + visible: 1; + rel1{ + relative: 1.0 0.0; + to: "optionName"; + offset: 25 0; + } + rel2{ + relative: 1.0 1.0; + } + } + } + programs{ + program{ name: "mouse_in"; + signal: "mouse,in"; + source: "option*"; + script{ + new cur_state_helper[31]; + new Float:index; + get_state(PART:"optionName", cur_state_helper, 30, index); + if(!strcmp(cur_state_helper,"default")){ + set_state(PART:"optionBackground", "mouseOver", 0.0); + } + } + } + program{ name: "mouse_out"; + signal: "mouse,out"; + source: "option*"; + script{ + new st[31]; + new Float:vl + get_state(PART:"optionBackground", st, 30, vl); + if(strcmp(st,"selected")){ + set_state(PART:"optionBackground", "mouseOut", 0.0); + } + } + } + program{ signal: "selected"; + source: "SettingsModel"; + action: STATE_SET "selected" 0.0; + target: "optionBackground"; + } + program{ signal: "unselected"; + source: "SettingsModel"; + action: STATE_SET "mouseOut" 0.0; + target: "optionBackground"; + } + program{ name: "go_disabled"; + signal: "elm,state,disabled"; source: "elm"; + action: STATE_SET "disabled" 0.0; + target: "optionName"; + } + program{ name: "go_enabled"; + signal: "elm,state,enabled"; source: "elm"; + action: STATE_SET "default" 0.0; + target: "optionName"; + } + program{ name: "go_Off"; + signal: "switch,off"; + source: "SettingsModel"; + action: STATE_SET "off" 0.0; + target: "value_helper"; + } + program{ name: "go_On"; + signal: "switch,on"; + source: "SettingsModel"; + action: STATE_SET "on" 0.0; + target: "value_helper"; + } + program{ name: "go_switch_hide"; + signal: "switch,hide"; + source: "SettingsModel"; + action: STATE_SET "default" 0.0; + target: "value_helper"; + } + }//programs + }//parts + }//group + group{ name: "elm/ctxpopup/bg/bookmarks_manager_button"; + parts { + part{ + name: "base_bg"; + type: RECT; + mouse_events: 1; + description{ + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs{ + program { + signal: "mouse,clicked,*"; + source: "base_bg"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + } + }//group: "elm/ctxpopup/bg/bookmarks_manager_button"; + group{ name: "elm/ctxpopup/base/bookmarks_manager_button"; + max: 0 0; + parts{ + part{ + name: "base"; + scale: 1; + type: RECT; + description{ + state: "default" 0.0; + min: 185 164; + max: 185 164; + //color: 0 0 0 0; + color_class: "transparent"; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + color_class: "on_offBackgroundColor"; + visible: 1; + } + } + part{ + name: "elm.swallow.content"; + scale: 1; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + to:"base"; + relative: 0 0; + } + rel2{ + to:"base"; + relative:1 1; + } + } + } + } + programs { + program { + signal: "elm,state,show"; source: "elm"; + action: STATE_SET "visible" 0.0; + transition: LINEAR 0.2; + target: "base"; + } + program { + signal: "elm,state,hide"; source: "elm"; + action: STATE_SET "default" 0.0; + transition: LINEAR 0.3; + target: "base"; + after: "hide2"; + } + program { name: "hide2"; + action: SIGNAL_EMIT "elm,action,hide,finished" ""; + } + } + }//group "elm/ctxpopup/base/bookmarks_manager_button"; + group{ name: "elm/radio/base/bookmarks_manager_radio"; + images.image: "check_foc.png" COMP; + images.image: "check_nor.png" COMP; + parts{ + part{name: "item_bg"; type: RECT; mouse_events:0; + scale: 1; + description{ + state: "default" 0.0; + color_class: "transparent"; + min: 185 82; + max: 185 82; + } + description{ + state: "mouse_over" 0.0; + inherit: "default"; + color_class: "selectedBackground"; + } + } + part{name: "left_spacer"; type: SPACER; + scale: 1; + description{ + state: "default" 0.0; + min: 20 82; + max: 20 82; + align: 0 0; + rel1{ + relative:0 0; + to: item_bg; + } + } + } + part{name: "elm.text"; type: TEXT; mouse_events: 0; + scale: 1; + description{ + state: "default" 0.0; + color_class: "defaultFontColor"; + align: 0 0.5; + rel1{ + relative: 1 0; + to: "left_spacer"; + } + rel2{ + relative: 0 1; + to_x: "indicator"; + to_y: "right_spacer"; + } + text{ + size: 30; + align: 0 0.5; + } + } + description{ + state: "mouse_over" 0.0; + inherit: "default"; + color_class: "selectedItemFontColor"; + } + } + part { name: "indicator"; mouse_events: 0; + scale: 1; + type: IMAGE; + description { state: "default" 0.0; + align: 1 0.5; + rel2{ + relative: 0 1; + to: "right_spacer"; + } + min: 38 38; + max: 38 38; + visible: 0; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + image.normal: "check_foc.png"; + } + description{ + state: "selected_mouse_over" 0.0; + inherit: "selected"; + image.normal: "check_nor.png"; + } + } + part{ name: "right_spacer"; type: SPACER; + scale: 1; + description{ + state: "default" 0.0; + min: 20 82; + max: 20 82; + align: 1 1; + rel2{ + relative:1 1; + to: item_bg; + } + } + } + part{ name: "event"; type: RECT; + description{ + state: "default" 0.0; + color: 0 0 0 0; + } + } + }//parts + script { + public mouse_in() { + new st[31]; + new Float:vl + get_state(PART:"indicator", st, 30, vl) + if(!strcmp(st,"selected")) + set_state(PART:"indicator", "selected_mouse_over", 0.0); + set_state(PART:"item_bg", "mouse_over", 0.0); + set_state(PART:"elm.text", "mouse_over", 0.0); + } + public mouse_out() { + new st[31]; + new Float:vl + get_state(PART:"indicator", st, 30, vl) + if(!strcmp(st,"selected_mouse_over")) + set_state(PART:"indicator", "selected", 0.0); + set_state(PART:"item_bg", "default", 0.0); + set_state(PART:"elm.text", "default", 0.0); + } + } + programs{ + program{ + signal: "mouse,clicked,1"; source: "event"; + action: SIGNAL_EMIT "elm,action,radio,toggle" ""; + } + program{ + signal: "mouse,in"; source: "event"; + script{ + mouse_in(); + } + } + program{ + signal: "mouse,out"; source: "event"; + script{ + mouse_out(); + } + } + program{ + signal: "elm,action,focus"; source: "elm"; + script{ + mouse_in(); + } + } + program{ + signal: "elm,action,unfocus"; source: "elm"; + script{ + mouse_out(); + } + } + program{ + signal: "elm,state,radio,on"; source: "elm"; + action: STATE_SET "selected" 0.0; + target: "indicator"; + } + program{ + signal: "elm,state,radio,off"; source: "elm"; + action: STATE_SET "default" 0.0; + target: "indicator"; + } + } + }//group "elm/radio/base/bookmarks_manager_radio"; + + group { name: "elm/label/base/bookmarks_manager_label"; + styles { + style { name: "label_style"; + base: "font="FNBD" font_size=30 text_class=tb_plain align=center color=#d3d3d3ff"; + tag: "br" "\n"; + tag: "hilight" "+ font="FNBD" color=#d3d3d3ff text_class=tb_plain"; + tag: "b" "+ font="FNBD" color=#d3d3d3ff text_class=tb_light"; + } + } + parts { + part { name: "elm.text"; type: TEXTBLOCK; + scale: 1; + description { state: "default" 0.0; + text { style: "label_style"; + min: 1 1; + } + } + } + } + } +}//collections diff --git a/services/SimpleUI/edc/LeftButtonBar.edc b/services/SimpleUI/edc/LeftButtonBar.edc index 7491c3d..5de8ab2 100644 --- a/services/SimpleUI/edc/LeftButtonBar.edc +++ b/services/SimpleUI/edc/LeftButtonBar.edc @@ -3,17 +3,13 @@ collections { -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_prev", 70, 70, "web_ico_prev.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_prev", 82, 102, "btn_bar_back_nor.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_next", 70, 70, "web_ico_next.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_next", 82, 102, "btn_bar_forward_nor.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_reload", 70, 70, "web_ico_reload.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_reload", 82, 102, "btn_bar_reload_nor.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_stop", 70, 70, "web_ico_stop.png") - -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_bookmark", 70, 70, "web_ico_favorite_on.png") - -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_unbookmark", 70, 70, "web_ico_favorite_off.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_stop", 82, 102, "btn_bar_stop_nor.png") group { name: "left_button_bar"; @@ -99,33 +95,6 @@ FOUR_STATE_IMAGE_BUTTON("browser/toolbar_unbookmark", 70, 70, "web_ico_favorite_ } } - ADD_SPACER("spacer_3", "refresh_stop_button", 10, 70) - - part { name: "bookmark_button"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 1; - align: 0.0 0.0; - fixed: 1 1; - min: 70 70; - max: 70 70; - rel1 { relative: 1.0 0.0; to: spacer_3; } - rel2 { relative: 0.0 0.0; } - } - description { - state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - } } } diff --git a/services/SimpleUI/edc/MainLayout.edc b/services/SimpleUI/edc/MainLayout.edc index 3e70303..aedfdbd 100644 --- a/services/SimpleUI/edc/MainLayout.edc +++ b/services/SimpleUI/edc/MainLayout.edc @@ -1,3 +1,6 @@ +#define URI_LENGTH 1720 +#define URI_LENGTH_SHORT 1460 +#define URI_WIDTH 82 #include "Spacer.edc" #define DEBUG_RECT_OVER(over_part, r, g, b) \ part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__)); \ @@ -8,7 +11,7 @@ scale:1; \ description { \ state: "default" 0.0; \ visible: 1; \ - color: r g b 128; \ + color: r g b 255; \ rel1 { to: over_part; relative: 0 0; } \ rel2 { to: over_part; relative: 1 1; } \ } \ @@ -27,14 +30,14 @@ collections { visible: 1; fixed: 1 1; align: 0 0; - min: 0 130; - max: 99999 130; - color: 18 22 34 230; + min: 1920 104; + max: 1920 104; + color: 255 255 255 255; rel1 { relative: 0.0 0.0; } rel2 { relative: 1.0 0.0; } } } - ADD_SPACER_OVER("left_spacer", "uri_bar_bg", 74, 130) + ADD_SPACER_OVER("left_spacer", "uri_bar_bg", 7, 104) part { name: "uri_bar_buttons_left"; type : SWALLOW; scale: 1; @@ -42,8 +45,8 @@ collections { state: "default" 0.0; visible: 1; align: 0 0.5; - min: 310 70; - max: 310 70; + min: 246 102; + max: 246 102; fixed: 1 1; rel1 { relative: 1.0 1.0; to: "left_spacer"; } rel2 { relative: 0.0 0.0; to: "left_spacer"; } @@ -59,7 +62,7 @@ collections { visible: 1; } } - ADD_SPACER("left_buttons_spacer", "uri_bar_buttons_left", 39, 70) + ADD_SPACER("left_buttons_spacer", "uri_bar_buttons_left", 0.5, 102) part { name: "uri_entry"; type : SWALLOW; scale: 1; @@ -67,9 +70,18 @@ collections { state: "default" 0.0; visible: 1; align: 0.0 0.5; - min: 994 70; - max: 994 70; + min: URI_LENGTH URI_WIDTH; + max: URI_LENGTH URI_WIDTH; fixed: 1 1; + rel1 { relative: 1.0 0.5; to: "left_spacer"; } + rel2 { relative: 1.0 0.5; to: "left_spacer"; } + } + description { + state: "moveright" 0.0; + inherit: "default" 0.0; + visible: 1; + min: URI_LENGTH_SHORT URI_WIDTH; + max: URI_LENGTH_SHORT URI_WIDTH; rel1 { relative: 1.0 0.5; to: "left_buttons_spacer"; } rel2 { relative: 1.0 0.5; to: "left_buttons_spacer"; } } @@ -84,7 +96,7 @@ collections { visible: 1; } } - ADD_SPACER("right_buttons_spacer", "uri_entry", 39, 70) + ADD_SPACER("right_buttons_spacer", "uri_entry", 26, 102) part { name: "uri_bar_buttons_right"; type : SWALLOW; scale: 1; @@ -92,8 +104,8 @@ collections { state: "default" 0.0; visible: 1; align: 0.0 0.5; - min: 390 70; - max: 390 70; + min: 164 102; + max: 164 102; fixed: 1 1; rel1 { relative: 1.0 0.5; to: "right_buttons_spacer"; } rel2 { relative: 1.0 0.5; to: "right_buttons_spacer"; } @@ -109,7 +121,7 @@ collections { visible: 1; } } - ADD_SPACER("right_spacer", "uri_bar_buttons_right", 74, 70) + ADD_SPACER("right_spacer", "uri_bar_buttons_right", 74, 102) part { name: "web_view"; type : SWALLOW; scale: 1; @@ -156,8 +168,8 @@ collections { visible: 1; align: 0.0 0.0; fixed: 0 0; - min: 1936 8; - max: 1936 8; + min: 1920 2; + max: 1920 2; rel1 { relative: 0.0 0.0; offset: -12 -10; @@ -198,14 +210,16 @@ collections { } } + part {name: "popup_bg"; type: RECT; scale: 1; + mouse_events: 1; description {state: "default" 0.0; visible: 0; min: 1920 1080; fixed: 1 1; - color: 100 100 100 0; + color: 100 100 100 128; rel1 {relative: 0.0 0.0; } rel2 {relative: 1.0 1.0; } } @@ -219,7 +233,7 @@ collections { description { state: "default" 0.0; visible: 0; min: 0 0; - max: 1920 1080; + max: 700 800; align: 0.5 0.5; rel1 { relative: 0.0 0.0; to: "web_view";} rel2 { relative: 1.0 1.0; to: "web_view";} @@ -232,7 +246,20 @@ collections { } } } +} programs { + program { name: "shiftright_uribar"; + signal: "shiftright_uri"; + source: "ui"; + action: STATE_SET "moveright" 0.0; + target: "uri_entry"; + } + program { name: "shiftback_uribar"; + signal: "shiftback_uri"; + source: "ui"; + action: STATE_SET "default" 0.0; + target: "uri_entry"; + } program { name: "hide_progress"; signal: "hide_progressbar_bg"; source: "ui"; @@ -261,3 +288,4 @@ collections { } } } +} diff --git a/services/SimpleUI/edc/RightButtonBar.edc b/services/SimpleUI/edc/RightButtonBar.edc index 0c5aed8..164289e 100644 --- a/services/SimpleUI/edc/RightButtonBar.edc +++ b/services/SimpleUI/edc/RightButtonBar.edc @@ -1,11 +1,8 @@ #include "ImageButton.edc" #include "Spacer.edc" collections { -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_tab", 70, 70, "web_ico_tab.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_history", 70, 70, "web_ico_history.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_zoom_in", 70, 70, "web_ico_zoom_in.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_rss", 70, 70, "web_ico_rss.png") -FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 70, 70, "web_ico_setting.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_tab", 82, 102, "btn_bar_manager_nor.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 82, 102, "btn_bar_more_nor.png") group { name: "right_button_bar"; parts { @@ -44,9 +41,9 @@ FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 70, 70, "web_ico_setting.png" align: 0.0 0.0; min: 70 70; max: 70 70; - color: 255 255 255 153; - rel1 { relative: 0.0 0.0; to: "tab_button"; offset: -3 4;} - rel2 { relative: 1.0 1.0; to: "tab_button";} + color: 86 86 86 255; + rel1 { relative: 0.0 0.0; to: "tab_button"; offset: 5 13; } + rel2 { relative: 1.0 1.0; to: "tab_button"; } text { text: ""; font: "Tizen:style=Bold"; @@ -56,81 +53,6 @@ FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 70, 70, "web_ico_setting.png" } } ADD_SPACER("spacer_1", "tab_button", 10, 70) - part { name: "history_button"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 1; - fixed: 1 1; - align: 0.0 0.0; - min: 70 70; - max: 70 70; - rel1 { relative: 1.0 0.0; to: "spacer_1"; } - rel2 { relative: 0.0 0.0; } - } - description { - state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - ADD_SPACER("spacer_2", "history_button", 10, 70) - part { name: "zoom_in_button"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 1; - fixed: 1 1; - align: 0.0 0.0; - min: 70 70; - max: 70 70; - rel1 { relative: 1.0 0.0; to: "spacer_2"; } - rel2 { relative: 0.0 0.0; } - } - description { - state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - ADD_SPACER("spacer_3", "zoom_in_button", 10, 70) - part { name: "rss_button"; - type : SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 1; - fixed: 1 1; - align: 0.0 0.0; - min: 70 70; - max: 70 70; - rel1 { relative: 1.0 0.0; to: "spacer_3"; } - rel2 { relative: 0.0 0.0; } - } - description { - state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - } - description { - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; - } - } - ADD_SPACER("spacer_4", "rss_button", 10, 70) part { name: "setting_button"; type : SWALLOW; scale: 1; @@ -142,7 +64,7 @@ FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 70, 70, "web_ico_setting.png" min: 70 70; max: 70 70; fixed: 1 1; - rel1 { relative: 1.0 0.0; to: "spacer_4"; } + rel1 { relative: 1.0 0.0; to: "spacer_1"; } rel2 { relative: 0.0 0.0; } } description { @@ -158,4 +80,4 @@ FOUR_STATE_IMAGE_BUTTON("browser/toolbar_setting", 70, 70, "web_ico_setting.png" } } } -} \ No newline at end of file +} diff --git a/services/SimpleUI/edc/webview.edc b/services/SimpleUI/edc/webview.edc new file mode 100644 index 0000000..0602899 --- /dev/null +++ b/services/SimpleUI/edc/webview.edc @@ -0,0 +1,91 @@ +#include "ImageButton.edc" +#include "Spacer.edc" +collections { + +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_history", 70, 70, "web_ico_history.png") +FOUR_STATE_IMAGE_BUTTON("browser/toolbar_bookmark", 70, 70, "web_ico_favorite_on.png") + + group { + name: "web_view_bar"; + parts { + part { name: "most_visited_button"; + type :RECT; + scale: 1; + description { + + state: "default" 0.0; + visible: 1; + fixed :1 1; + align: 0.5 0.5; + min: 70 70; + max: 70 70; + + + + rel1 { + + relative: 1.0 1.0; + + offset: 150 150; + + } + + rel2 { + + relative: 0.9 0.8; + + offset: 150 150; + + } +} + +} + + + +part { name: "visited_bookmarks"; + type :RECT; + scale: 1; + description { + + state: "default" 0.0; + visible: 1; + + align: 0.5 0.5; + min: 70 70; + max: 70 70; + + fixed :1 1; + + + rel1 { + + relative: 1.0 1.0; + + offset: 150 150; + + } + + rel2 { + + relative: 0.9 0.8; + + offset: 150 150; + + } +} + +} + + + + + + + + + + + } + } + } diff --git a/services/SimpleUI/images/Black_dot.png b/services/SimpleUI/images/Black_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..21d05e5b6a2b305668c052336bda723fa82dfe10 GIT binary patch literal 1232 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 JwGh{+{{eEhJkS6D literal 0 HcmV?d00001 diff --git a/services/SimpleUI/images/btn_bar_forward_nor.png b/services/SimpleUI/images/btn_bar_forward_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..ef0b78d5b0239fe2c2ff1e13815c5b8c6597ad6f GIT binary patch literal 3385 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 literal 0 HcmV?d00001 diff --git a/services/SimpleUI/images/btn_bar_manager_nor.png b/services/SimpleUI/images/btn_bar_manager_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..3a96d3c89e124ecfbc178c4fd8d4bef81a0011af GIT binary patch literal 2988 zcmZuzXHXMr7X1*UH<6C;LNC&*bVw+n3j`Acr4tYlP?RPZdh=04x zkQ$0~0fCibP)e5fXJ>b2f829s?mhR+ocrr0Ubi%6qUWUt05F-r4Q$T&pYo)oK1Wnf zH{_h?{NeTw0ARTMPf>up7u*2QTY1A^*ROl|1^PYk^7Dt7z+e#n`+lC@cRc_Ip26Cp z5w;tg+NAjds96H$xtX602Q9<~nv7vj7n2gCV>L|>ESl!9Zo6b?NX6G%m_V75f_che zEzOujKSi@5_$np(bwX1A@nYC(pNVGD+R$13q|SQPKDKU{rj?d43$A3Xf?+I&3S9aY z-P756Utu&tiMerB{EoimKZFQq!*f9n zio$dNx$Kc(0K7Co)$olZLx7S8?4D+w>R?I+$eSQN;ow~ZXeF>R)B;*YAa9)zD+#E= zfOD^~a4?9;1?)z9NUfh&YgpH%&M%c)tA!U)H;ijAJB7%_4t zEmy~j(WJ)sp1l&?q4K)TQ23CP>{-jAR}Ts|W{~^-|J=r~C=EY7y}Gh8W!edKaOp>e zpP}2GT9K!Be@AGYkPg3nS`vv=ycKCob@Z)$@W8zI%J4I~7}wdgRO6Ed2J#92m{6yQ zD;_1qzHH4FkYbScbYHPpC=vQhvP*Q7?7p-heN3sdpaS0A(V+-SmnpmDM)}K3oD~(= zx zf=vJo%FoSn!Np`>t9 zk2%u&=`&3;#WMM%u-CV2`E1eU znq~17=rTWq?wbhv(?n|f4)YEx*cumO)d+O3G=L8(R2(+YImnhBNk4Tzl-<4dFk32ez_jvPixq%4n0`0OQuWqVoW-IMCWD7G%S?Hng{lZEm{laYeqC73O)ec- zJ^8MoIH-c;vdg9OOXvQ}Wu0X$wRy#Pd#6FQ)`s4O0jmzb0;kvo*b`y0J2{j*0!lHW z6lluCNc~8M3&%&Hj|D%c=xPu>e$`HI>pv~T>vQO*MpZ|xwp9yy_5Mh!79_3b5Yh?W z%(2%azE6CiaanUo?ucL%kByH-#_6W`C!lyo6tY!w-^!S( zNa<9_-qD&-YgBI3?Uwbl9~?(vQ6_iIuBgjO)u`UP`)T21dp~{&yTq^@#+4)2d&@th zh|qozTgq83%O8{T@DgWp$}>2Z$}Hsji`j($J|^L$e8;US zw~^U35iMe&7Cw=;+xny0>M4A-80_d*W5c&*C%11|q2%lr>RtZCVfl185|e7!iCozn zPo^YhgID?D{rW%W&OZN8UfGFvANCye+*q5JDR5xUs>oi;X1>QXJ@bKS;l_vU!(WC( zx$GecVpB8@hJXE8>tnM=X&+%oQy1|Dae(-PP~91wt9O|^x;L`J7uNhs`NufXp_z25 z)AxyJM`33%?m6ypY;s&j(yd9X*f`2M_PteY=^L=!Lpe%$N+ZmSo5X(|=O5KZ*rZNe z-7;qG`Rmgeb~i|dNtMa&?-$)m!u|#!D;p%b1(E=h#>}IqVO5JXV}Cv3NAt_wf#&Vy z8RgsN9Xq%>G+GVnj7)6Khn^S{|6+NetYsf!x{v7dp4o^R%Rui9KgDKZ!y{yW&pH!d z;lkG42n%;u{B|2z0~bdP$;s=Q&6)(qy^n!=wZzrS$dAapw;E2qn}M5JXBlHwJxwo~ z@@nvoKKPx`mijPH(gt6F8e#6BCFCb3d1AakU3;!&Kh%%ZMLJyIoQt?Geo7c^>}3z;*WOY@mjVQ!e6Yd~1?0k~312y_cQw+4phr>1OK|&s$=5 zd$+)+zF;MV+Xpv}x7&hdgZOt}FR)mxJcc}xAbb6Oe`x!q^f-ejBZEvunX`Z5rX)i= z|2H9Sa2pE%LPY_qtzHzBWEw<2iXEN?xyU90PrE>Oj*(P! zHs{U%jPef=b06z*?Q|1IjZT4B7Hs%m;s5pE-MI(=nM?`Rv{?q(Odpt>M+7E@ LmIgIY=cs=JYqxe$ literal 0 HcmV?d00001 diff --git a/services/SimpleUI/images/btn_bar_more_nor.png b/services/SimpleUI/images/btn_bar_more_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..f51cb548cf8c3b465d245c9552fc69b2e31065e5 GIT binary patch literal 3032 zcmZWrc{CLK8vcpwTe2p;k+Dq}yKI9Q`@W0}QueVVMA;%sw)9z&y%Cjt$x@>US+iys zvW_Kt2scZV?dqI+&;8E1f4uK=-skz_ectD84F8lHE%jN) zbag_`fX-LX#vcHNi+_p&7?me6fedRUUxWC+g@@@>VQn7=p8=z^SWz5i%HJ6WIEJgBP z_!`~S(K)v$sS!yJ^#!c7buI$_$AT2#AY4`T>XjCnkANa*n1L3w80WS~U5-0tSwm*u zpon-x(Grk)&5$;N9cY9kA&Y>94n+hmOV|?RQvruQXQu^VCIK8o9xe}q2;4z-CHk5Lp>&0WBktGLMfD z15}~Fp<7Te2t3LL>^j@lsz0t)v97?*lFF`CB|w$5BkgD<{AjGLCHX~(`dnAp6&%kw z=4eQ^1!wcfM9Q&z-T4eaek#Y=wL8Z_MCK|YQ6UM>d`n`jnfmmKlheY<(m=Vd1^{yb z;iMCBc-^H473v7@lb1r9RPHw!^6%{@y4A91yaV~Glh!-Ff3ndoNFhv2EG;gM8+0J; z9DA+9POxpaTC9(6{|Z+<+TZ*7aUL2eV;`wYb?~+A^R7|h<$c_hILLkCT|EV7UH?^RW=-xW@E?NMz@*`o@ zn!LNM+~O_Nms`(IwK5zzC_F+!JKB(}NP3ru%Xb~bDx#30vHjJ2FbDV-4L-RRbNARZ zUuMZRtM|-mzAV2TY4ch|8zbqcG`ndpIton2Q#d`w2qw{TWyc%{wCYi@B|;%R@$BYT z3{&Oxq%9t!Ay#^P+iG{uDaGB;`H-s84P>H@VjFd(pGDT1t9@a7ha!|HUV5bSl3~y# zKsqOxGe39m?%PXhPZSDP2Fu-9CX*4UE~%Dp+%&Qsx1}UI+mSWb#OczU`)aOKFqU^- zs=i)9*^sd3JWvxz#TKdELZ?6#h=e%uYwBT)Fec-AC6LQdxeJqYigc8Z%-ck+q?H)H z75;GHR|mI~jC34EPh4=6E%_pxH8dX8p$KJ5K*@*@QqJkuyhabP4e1Qsu@GDpFU^(H zyCj&_GwI@0OQZBm9CEcgW)Zj8z9_rMyC|@2M~`#T@Oyn=IWKC_>uJEV#JVK6MD3a- zqiOXj$6~sq0DVC|*%nz@fVX&K9#?Wv?p}^ke>A7QVPWOV^x;eHT<-fGZ@vY5xG|0{jz%-SsAgs*Pe?QImFq&0!?7W|x7;4G~>zGVwfa#d5-Ox|qJ0 z(^yS;uS&AatB|*#K`XHNPVr_|-p88}c}70PGr>(Ozb}WukI~28zl-;D88Os#j8JMa zBavJ6lf0jgDj&Ry{KFh&->!iwbWC^5oO_f?AgR6@(fM14<%vh7+WQqLX4HIeVtAvu2N{Up|YX)LNUQ4&7?eU6x&|?1K)!$t>>v;8mA^# z;l1%;j#wuyZ2hOI_RX}Ww6G6he;=#SFvU$Um-E^3h5Ns~%dUJ~c_xSWd{aH_({9Ep z9E%xX9T=Bgz+dbW>+rx?<__y(xv&KP=$-h)1jDF4$xMV~E^p^_chjOlz@DG|T*%NK zF1IeXZKH(zW>aC)V>52*#b>z}VtF>Q{)6q^sITTrBz1-t=~7;^72&2R(@5;Q6+yT& zJk`2#th&B1ux#IPiwp4+areanVnJ1LMrOw5)@Q|*`tJHZ({`V{TQRe!hk~arry-{# zP#hsdfu&4{)Qq${cX$x;K%hBEU776qvvy)b^GQBIlS4B(sxoS+wNk*n`+G{I!2U`W zF_q}S9Ag&#ZFG>vaoI7kJ)BV_CN9Q0Rz1l#9&?E#ohctknnL-{YW>#A(3;7`N}DRZ zkuZ>lA<85@RVNic$bC@nlytNCJc7Yt^luwpR+5BODcrgJarS6qCvF}$&#(~6l?Cs% z_YE!}w(Z6gbCyc7i7RJl7{!}hd-g9)R#*w=6QS*kfkH|2!EJnP*eh_70x5nRbpyt4 zvaJU*4te@LwNXA8`boA>e2MT#q%@_`h{R}=RU++Moqa%I{Im9iXXB}z&H($ zUBfQB-S4Y#jj28PbSJSM&Yw=x<5ibZao$FP9*->ghPD+QgVEGtU9H`k`xAPVGRpI= z_HTTy>m{csKHqwAy1~}QHun@?7;9)P!G~FHs_;~*RrL!d(=TwGzZ!d;xP=2AFy3ZUb<-g-a6-v@-6SRfHl>Vv|-b( zhUX1ARfHQ}gw2qqccE_ktGs!N#Od9p;2)f)qa%4rYST?SAwK(`_V;Evr^D}x925H* zCIUq^D;rH4Z|!PqXilJ}<3`l&PNv4UrXG5>1m^FMrgZnIW1mxK3W4^i^?j!ov?n*2jpXEK)({c4k_$_k+UYwU%|B zH{{N?PX3QQL9)^}cds9Av<6NE@@>7EWiefR0C^~S>i(-{&vLN%FpVcI?Uaf#Yv;&W zR)T!?Z$g~)EQ|pN5dt708h~G?XSfQ$Jt+Xz8~{+x0)Wfs>8(#X08misYiXi`CcjVB zFh!XGZBkrK0QHJlC^lc7RP(m_NCi{wUmY#4Fh1ycq&eXIRRk`eRFMC2^$-!#%yTXU zqDc?cOM#qcgX%?6(XqYOh@zsifM`aspOODBiJg)EkzD$hXG6@$_&#VCbRAj`jf2{Y zxi*GQe{6ym1~eb&n z5Gap$sPVsb=ji_7X3%}w>_s5z+t0H8C_*S5UWzu`eiewktY zeV|LB^3}KX2LPJue}e?beaj92)MgJL5OZ@+p8y|!Paj{90R#f_ed6Qs;E_831kL4H z!J$@Ltg6JtLoK6($k#?bmMoMYORc0x=5!%ZJ}O4T1ir#q7K_enIyz)r0|g1BDJhZ3 zEEeLlFQ{iI*7%B2qKgw=44o{87JEsQ98>iI>)dzX#QHl;q+Dv^p3x!D93N7Ai z-=h0_`j*!uH4xMSz5pX7+KtcujGqKJ4hMt9Zgx<70!V@;XefaW6J&=pcl-szwpNZk zNn{L3M?m@=Bg#l-KqDkYs}#`CC5g<-7P0~g$N;BdSC>`5Tmoi7_iW zUvbXWkn9T1;gChhGkiPv3;+e`ESKFLoCV?NQ8=7p3WnZMV!NIE;--ts>iPO;m9GW> zEC+;-or_DMIU`lbBfZay1oy~1@6!}KB_??^FlaOa1zU4A2flx2qf?mHJUhF-wl-tf zqh;qjWD|A{?{e(0IeYXw9DGVV`u1r>03qvu&?7tk*7f<&xP*K36;+JO{6?zY=|`H2 zQ=W;NJq9k#Fj3}J3nsr5?cC%8*^--yTCZ;P3XWg6tt^S3kg6>y0Cf-5NJ7&k${k!u ze;Elg!U8&0hybvU_38X7LP;9w8NECjc=1F1Os_x?i1aXcC$4a%KT1|RsQ~xENOSpZ&KTVy znlEkvGP$X&1;{T?K5(igD;5&IRCzMYrK&;tr8_p+Ddc({NlW&1Yt`Qor^;|0uD@AL zTh+%|cek1pn|S0pS|3QpgwW}rQX~u10y*<)>cfm-rZf8GAZ`KqYjae$sYqiix`c0L zlpB2zYPt5ihuuY1CLX3Q&OgPJdR>Y!Gy&3cTYxDMA}idScEzCnJ#?IDTzCAjCI6Oq z1yWw0lRsl{&dsZVLg}?QNNgZ>EpM%RO>T{Ajc?zMI?qMJ@BOjWiiqXVLqm>r#&!91 za`$XmP3z)Z%Z2hn=rx7Zds;Px7|U9V`10%WPji(|_&i z7;=29VWJq(=Pc<%)Nc&m2)*GFm4a4OmR2rS(pVo@4?|Nc?puYSbgkvARx7B!W>#5O z=9%wUaaqADRLbKk;pIM1_4nbnXNlyt-NxN!koOh^^^U8peIOcF4s?(>pBG(K+*5=? zk5K){?DJ=$*z7YNY?5kaMWGTz&QQ(kk6SCZ zxJu=Xn`PYXy(%-aGGSHvRTfoxJ8g=n-LkyWHXW?(34&g;-%!|ISP!0xyP8L^nzdRe zqb_4LQB^)dNmhE5a1~;;1KS^$?PceGx*wTu>{GTF+(!7r9VT@KJ@fukcBDrOBS+H; zkmG4_?BHGnKOZoUR6qWw1;n9S15)Dr#yM*_CcSwKTs*1!QkNn5L7)Aqz^ZqjcVDp( zxe%X_k;%5nUaqA{bLp*86=N0S{*likMI%!=3P@F%X;}i2fSg7yeRR4PbWa>pj%ji? zXjr>fYP*MNeH?pF$+iS$ea``{Ta#BKIEAgjmR&1rHq9`t%AbOF*Zsr{Vk$mz)UD5u z<53uIOqes=g$@3(7uCI&(UuX`687>;m4YsQmcEMT9#6RchbPR+ca;}&ac}q3!+H-h zx1`{(QO403xmC>d;afcq@~n^(dT=&)vw!qKLQ7i}Fs-|qN0@Nw9z+b7>Kb_o)}f8ll! zaxn&!MGBI@NfQy82)ipM$05)8+Edh(@$SDGW_LA{3z{`qG*hE$qSiZW_&f)`r`7Ng z3E8-G+ynYp^YG27FBHxj&PmCt zOsQ7FP(f6!Qt}~q?skiOi+Z1=hwbM{SRTyakrB6&q$o=9@uN>mr@II7D|st4tD$V! zQUeaY!G*Z4!`L#`3P~n$BCXY!&UgW-oX?v34CF1Vs@x_M{VF}pPpgv8 zBm)EAhHrR08?JVbZ8-0Job*wO_YK9M7dox_s;vYyMyqradQW6pl%fIdZsXBDk~pN4 zS(Ps~vili5gipKu_Q$)6U8XLkSlnImYH-sF zjHvgdS=Fvh7Am|=D8$4IaldmYs>mBn!AoV0h~Tl&7)Wz*JGiOUy=)LSqM{Cc4?Tqbfhz8eFElz&A3q-3;|gv4CI5XA zZ`VpZQyct*w=+KQTB#6V*|Pm0QP|C*BS7bPH{jQ=+ceqa)+#%CZwG9H&od^> z`mt}Zxu|A)ujajww#HBo;ucr_ZQR0PTkucTi>b+cCDnztgAgBLFY#!Jbs_wT@EL9x zI~ypxSJP_N>UgNJt2ql_d0J)l)lR6wn z7q^ptM@>m-Mg7Uy)@d1J)NNEKpY6Qpd>F;XDiwY_xigI$%N{Gt+Rw^p_kLb-w%xJA zQH$^E>f`-17$hfi|M2d~ZfD?pAkUBDB?hy#=b#9Y3(w#6M^<0TPBJ($GA_tSvky*P zpCu@4rq`lhq%i97E6k9Cj6u>+LQxcZc|vt;Q+XpOiU#}0l5$Rj-2!5a z@NUUs8N2CeVUE;}OJm}cXff5_Agq9+X!+N+54_e&4W7t!WA#I*4#$GLnfw)?I7= zb`_kej`l)xhyHxbm*T1tS5KDZ#39)s3PuDn#-&N$+E?NbT95oeTk+vpps#gf)*jmIAti7UFv`Q&~r-}^~}$Rbubp1%~U8d4!q zf?1=lV1I(bkc%uU~RKuE3Zk^Z)1u?$=1Y z^V;Run0mN0{9XrJUGb|*12b%R3bsMLB*?9~oVp`C6#0bxoI!Yk`AecCwHx-i-R|6F z4SW*C;D&8Yt`T#OGR6M!1mWF7t=A|1$dh2rLF)ZtO|(+0^BOp?*$S}N zheAg-o1)_;lm?a*cBZZe*`qz=CI)BvW*n-+I z5gX&Sp`eQd|MMIC|H37WkMjQk`ZsC+CGV27w+om5Sdnztcc!2u!sYe=20EtNC@rU` F{{UPBp$7l} literal 0 HcmV?d00001 diff --git a/services/SimpleUI/images/btn_bar_stop_nor.png b/services/SimpleUI/images/btn_bar_stop_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..c5cdc11ca8ea537497a1a794d79d40362f8659a9 GIT binary patch literal 3255 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 + if(m_currentWebView) + return m_currentWebView->getURI(); + else + return std::string(""); } bool WebKitEngineService::isLoadError() const @@ -134,7 +137,10 @@ bool WebKitEngineService::isLoadError() const std::string WebKitEngineService::getTitle() const { M_ASSERT(m_currentWebView); - return m_currentWebView->getTitle(); + if(m_currentWebView) + return m_currentWebView->getTitle(); + else + return std::string(""); } void WebKitEngineService::stopLoading(void) @@ -414,7 +420,11 @@ bool WebKitEngineService::isPrivateMode() const std::shared_ptr WebKitEngineService::getSnapshotData(int width, int height) { M_ASSERT(m_currentWebView); - return m_currentWebView->captureSnapshot(width, height); + if(m_currentWebView) + return m_currentWebView->captureSnapshot(width, height); + else + return std::make_shared(); + } std::shared_ptr WebKitEngineService::getSnapshotData(TabId id, int width, int height){ @@ -443,7 +453,10 @@ bool WebKitEngineService::hasFocus() const std::shared_ptr WebKitEngineService::getFavicon() { M_ASSERT(m_currentWebView); - return m_currentWebView->getFavicon(); + if(m_currentWebView) + return m_currentWebView->getFavicon(); + else + return std::make_shared(); } void WebKitEngineService::webViewClicked() @@ -470,8 +483,7 @@ void WebKitEngineService::setZoomFactor(int zoomFactor) void WebKitEngineService::clearPrivateData() { for(std::map::const_iterator it = m_tabs.begin(); it != m_tabs.end(); it++){ - auto item = *it; - item.second->clearPrivateData(); + it->second->clearPrivateData(); } } @@ -488,7 +500,7 @@ void WebKitEngineService::_IMEStateChanged(bool enable) void WebKitEngineService::backButtonClicked() const { M_ASSERT(m_currentWebView); - if (isBackEnabled()) { + if (isBackEnabled()) { m_currentWebView->back(); } else { app_efl_exit(); diff --git a/services/WebKitEngineService/WebView.cpp b/services/WebKitEngineService/WebView.cpp index 75ea343..7751826 100644 --- a/services/WebKitEngineService/WebView.cpp +++ b/services/WebKitEngineService/WebView.cpp @@ -24,7 +24,6 @@ #include "WebView.h" #if defined(USE_EWEBKIT) -//#include #include #endif @@ -46,7 +45,11 @@ #include "ServiceManager.h" #define certificate_crt_path CERTS_DIR +#if MERGE_ME #define APPLICATION_NAME_FOR_USER_AGENT "SamsungBrowser/1.0" +#else +#define APPLICATION_NAME_FOR_USER_AGENT "Mozilla/5.0 (X11; SMART-TV; Linux) AppleWebkit/538.1 (KHTML, like Gecko) Safari/538.1" +#endif using namespace tizen_browser::tools; @@ -57,7 +60,8 @@ namespace webkitengine_service { WebView::WebView(Evas_Object * obj, TabId tabId) : m_parent(obj) , m_tabId(tabId) - , m_ewkView(NULL) + , m_title(std::string()) + , m_ewkView(nullptr) , m_isLoading(false) , m_loadError(false) { @@ -78,7 +82,7 @@ void WebView::init(Evas_Object * opener) #if defined(USE_EWEBKIT) #if 0 //not using smart class - static Ewk_View_Smart_Class *clasz = NULL; + static Ewk_View_Smart_Class *clasz = nullptr; Ewk_Context *context = ewk_context_default_get(); if (!clasz) { clasz = smartClass(); @@ -87,11 +91,13 @@ void WebView::init(Evas_Object * opener) // clasz->run_javascript_alert = onJavascriptAlert; // clasz->run_javascript_confirm = onJavascriptConfirm; // clasz->run_javascript_prompt = onJavascriptPrompt; - clasz->window_create = onWindowCreate; - clasz->window_close = onWindowClose; +// clasz->window_create = onWindowCreate; +// clasz->window_close = onWindowClose; + ewk_context_cache_model_set(context, EWK_CACHE_MODEL_PRIMARY_WEBBROWSER); ewk_context_certificate_file_set(context, certificate_crt_path); + } Evas_Smart *smart = evas_smart_class_new(&clasz->sc); @@ -99,8 +105,8 @@ void WebView::init(Evas_Object * opener) /// \todo: Consider process model. Now, One UIProcess / One WebProcess. // if (opener) // m_ewkView = ewk_view_smart_add(evas_object_evas_get(m_parent), smart, context, ewk_view_page_group_get(opener)); - else - m_ewkView = ewk_view_smart_add(evas_object_evas_get(m_parent), smart, context, ewk_page_group_create(NULL)); +// else + m_ewkView = ewk_view_smart_add(evas_object_evas_get(m_parent), smart, context, ewk_page_group_create(nullptr)); #else m_ewkView = ewk_view_add(evas_object_evas_get(m_parent)); // Ewk_Context *context = ewk_view_context_get(m_ewkView); @@ -481,7 +487,7 @@ std::shared_ptr WebView::captureSnapshot(int M_ASSERT(targetHeight); Evas_Coord vw, vh; std::shared_ptr noImage = std::make_shared(); - evas_object_geometry_get(m_ewkView, NULL, NULL, &vw, &vh); + evas_object_geometry_get(m_ewkView, nullptr, nullptr, &vw, &vh); if (vw == 0 || vh == 0) return noImage; @@ -679,7 +685,7 @@ void WebView::__loadError(void* data, Evas_Object * obj, void* ewkError) { BROWSER_LOGD("Stop signal emitted"); BROWSER_LOGD("Error description: %s", ewk_error_description_get(error)); - evas_object_smart_callback_call(obj, "load,stop", NULL); + evas_object_smart_callback_call(obj, "load,stop", nullptr); } else { @@ -964,7 +970,7 @@ bool WebView::hasFocus() const double WebView::getZoomFactor() const { - if(EINA_UNLIKELY(m_ewkView == NULL)){ + if(EINA_UNLIKELY(m_ewkView == nullptr)){ return 1.0; } @@ -997,16 +1003,15 @@ std::shared_ptr WebView::getFavicon() { M_ASSERT(m_ewkView); #if defined(USE_EWEBKIT) - if (faviconImage.get() == NULL) { - -#if PLATFORM(TIZEN) -// Evas_Object * favicon = ewk_view_favicon_get(m_ewkView); - Evas_Object * favicon = ewk_context_icon_database_icon_object_add(ewk_view_context_get(m_ewkView), ewk_view_url_get(m_ewkView),evas_object_evas_get(m_ewkView)); + if (faviconImage.get() == nullptr) { +#if MERGE_ME +//#if PLATFORM(TIZEN) + Evas_Object * favicon = ewk_view_favicon_get(m_ewkView); + Evas_Object * favicon = ewk_context_icon_database_icon_object_add(ewk_view_context_get(m_ewkView), ewk_view_url_get(m_ewkView),evas_object_evas_get(m_ewkView)); #else Ewk_Favicon_Database * database = ewk_context_favicon_database_get(ewk_view_context_get(m_ewkView)); Evas_Object * favicon = ewk_favicon_database_icon_get(database, ewk_view_url_get(m_ewkView), evas_object_evas_get(m_ewkView)); #endif - #ifndef NDEBUG int w = 0, h = 0; evas_object_image_size_get(favicon, &w, &h); -- 2.7.4