From: k.lis2 Date: Wed, 29 Jul 2015 13:44:44 +0000 (+0200) Subject: Task TT-75 Implement "Main page loading UI" view X-Git-Tag: submit/tizen_tv/20150818.234904~2^2~18 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f3c7262dd08ea78fa364c2012b51b3b3f085e008;p=profile%2Ftv%2Fapps%2Fweb%2Fbrowser.git 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 --- 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/CMakeLists.txt b/services/BookmarksUI/CMakeLists.txt deleted file mode 100644 index 1806b0f..0000000 --- a/services/BookmarksUI/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -project(BookmarksUI) - -set(BookmarksUI_SRCS - BookmarksUI.cpp - ) - -set(BookmarksUI_HEADERS - BookmarksUI.h - ) - -include(Coreheaders) -include(EFLHelpers) - -include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) - -add_library(${PROJECT_NAME} SHARED ${BookmarksUI_SRCS}) - -if(TIZEN_BUILD) - target_link_libraries(${PROJECT_NAME} ${pkgs_LDFLAGS}) -endif(TIZEN_BUILD) - -install(TARGETS ${PROJECT_NAME} - LIBRARY DESTINATION services - ARCHIVE DESTINATION services/static) - -include(EDCCompile) -EDJ_TARGET(Bookmarks.edj - ${CMAKE_CURRENT_SOURCE_DIR}/edc/Bookmarks.edc - ${CMAKE_CURRENT_BINARY_DIR}) 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/edc/error.edc b/services/BookmarksUI/edc/error.edc deleted file mode 100644 index 0291971..0000000 --- a/services/BookmarksUI/edc/error.edc +++ /dev/null @@ -1,144 +0,0 @@ -collections { - images { - image: "web_browsing_icon_error.png" COMP; - } - group { name: "error_message"; - styles { - style { name: "mssage_style"; - base: "font=Sans font_size=35 color=#d3d3d3 wrap=word align=0.5"; - } - style { name: "mssage_hint_style"; - base: "font=Sans font_size=24 color=#868686 wrap=word align=0.5"; - } - } - parts { - part{ - name: "message_background"; - type: RECT; - description{ - state: "default" 0.0; - visible: 1; - rel1.relative: 0 0; - rel2.relative: 1 1; - color: 42 50 64 255; - } - } - part{ - name: "error_message_background"; - type:RECT; - description{ - state: "default" 0.0; - visible: 1; - min: 1582 730; - max: 1582 730; - fixed: 1 1; - align: 0.5 0.5; - color: 30 38 50 153; - } - } - part{ - name: "err_ico"; - type: IMAGE; - description{ - state: "default" 0.0; - visible: 1; - min: 140 140; - max:140 140; - fixed: 1 1; - align: 0.5 0; - rel1{ - relative: 0 0; - offset:0 163; - to: "error_message_background"; - } - rel2{ - relative: 1 1; - to: "error_message_background"; - } - image{ - normal: "web_browsing_icon_error.png"; - } - } - } - - part{ - name: "error_text"; - type: TEXTBLOCK; - description{ - state: "default" 0.0; - visible: 1; - fixed: 1 1; - min: 1502 96; - max: 1502 96; - //color: 211 211 211 255; - align: 0.5 0; - rel1{ - relative: 0 1; - to_x: "error_message_background"; - to_y: "err_ico"; - } - rel2{ - relative: 1 1; - to: "error_message_background"; - } - text{ - style: "mssage_style"; - text: "Server not found.
sdf Please check the followings:"; - //min: 0 0; - //max: 1 1; - //align: 1 0; - //size: 35; - } - } - } - - - part{ - name: "error_hint"; - type: TEXTBLOCK; - description{ - state: "default" 0.0; - visible: 1; - fixed: 1 1; - min: 1502 117; - max: 1502 117; - color: 134 134 134 255; - align: 0.5 0; - rel1{ - relative: 0 1; - to_x: "error_message_background"; - to_y: "error_text"; - } - rel2{ - relative: 1 1; - to: "error_message_background"; - } - text{ - max: 0 1; - style: "mssage_hint_style"; - text: "Check for any typing error in URL.
" - "Check your network settings.
" - "Try again later.
" - "Click refresh to reload."; - } - } - } - } -/* - programs { - program { name: "mouse_down"; - signal: "mouse,down,1"; - source: "logo"; - action: STATE_SET "hide" 0.0; - target: "logo"; - } - program { name: "mouse_up"; - signal: "mouse,up,1"; - source: "logo"; - action: STATE_SET "default" 0.0; - target: "logo"; - } - } -*/ - } -} diff --git a/services/BookmarksUI/images/ico_bg_round_shape_37x37.png b/services/BookmarksUI/images/ico_bg_round_shape_37x37.png deleted file mode 100644 index 00182ed..0000000 Binary files a/services/BookmarksUI/images/ico_bg_round_shape_37x37.png and /dev/null differ diff --git a/services/BookmarksUI/images/ico_delete.png b/services/BookmarksUI/images/ico_delete.png deleted file mode 100644 index 92f42cc..0000000 Binary files a/services/BookmarksUI/images/ico_delete.png and /dev/null differ diff --git a/services/BookmarksUI/images/web_frame_selected.png b/services/BookmarksUI/images/web_frame_selected.png deleted file mode 100644 index 4470ca4..0000000 Binary files a/services/BookmarksUI/images/web_frame_selected.png and /dev/null differ 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/HistoryItem.cpp b/services/HistoryService/HistoryItem.cpp new file mode 100644 index 0000000..1d9ce89 --- /dev/null +++ b/services/HistoryService/HistoryItem.cpp @@ -0,0 +1,166 @@ +/* + * 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 "HistoryItem.h" + +namespace tizen_browser +{ +namespace services +{ + +HistoryItem::HistoryItem(HistoryItem && other) throw() +{ + *this = std::move(other); +} + +HistoryItem::HistoryItem(const std::string & url, + const std::string & title, + std::shared_ptr image) + : m_url(url) + , m_title(title) + , m_favIcon(image) + , m_lastVisit() +{ +} + +HistoryItem::HistoryItem(const std::string & url) + : m_url(url) + , m_title() + , m_lastVisit() + , m_favIcon(std::make_shared()) +{ + +} + +HistoryItem::HistoryItem(const HistoryItem& source) + : m_url(source.m_url) + , m_title(source.m_title) + , m_lastVisit(source.m_lastVisit) + , m_favIcon(source.m_favIcon) + , m_visitCounter(source.m_visitCounter) +{ + +} + +HistoryItem::~HistoryItem() +{ + +} + +HistoryItem & HistoryItem::operator=(HistoryItem && other) throw() +{ + if (this != &other) { + m_url = std::move(other.m_url); + m_title = std::move(other.m_title); + m_visitDate = std::move(other.m_visitDate); + m_visitCounter = std::move(other.m_visitCounter); + m_favIcon = std::move(other.m_favIcon); + } + return *this; +} + +bool HistoryItem::operator==(const HistoryItem& other) +{ + return (m_url == other.m_url); +} + +bool HistoryItem::operator!=(const HistoryItem& other) +{ + return (m_url != other.m_url); +} + +void HistoryItem::setUrl(const std::string & url) +{ + m_url = url; +} + +std::string HistoryItem::getUrl() +{ + return m_url; +} + +void HistoryItem::setTitle(const std::string & title) +{ + m_title = title; +} + +std::string HistoryItem::getTitle() const +{ + return m_title; +} + +// void HistoryItem::setVisitDate(boost::gregorian::date visitDate) +// { +// m_visitDate = visitDate; +// } +// +// boost::gregorian::date HistoryItem::getVisitDate() +// { +// return m_visitDate; +// } + +void HistoryItem::setLastVisit(boost::posix_time::ptime visitDate) +{ + m_lastVisit = visitDate; +} + +boost::posix_time::ptime HistoryItem::getLastVisit() const +{ + return m_lastVisit; +} + +void HistoryItem::setVisitCounter(int visitCounter) +{ + m_visitCounter = visitCounter; +} + +int HistoryItem::getVisitCounter() +{ + return m_visitCounter; +} + +void HistoryItem::setFavIcon(std::shared_ptr favIcon) +{ + m_favIcon = favIcon; +} + +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; +} + +std::string HistoryItem::getUriFavicon() { + return m_urifavicon; +} + + +} +} 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/HistoryItem.cpp b/services/HistoryService/src/HistoryItem.cpp deleted file mode 100644 index ac61514..0000000 --- a/services/HistoryService/src/HistoryItem.cpp +++ /dev/null @@ -1,154 +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 "HistoryItem.h" - -namespace tizen_browser -{ -namespace services -{ - -HistoryItem::HistoryItem(HistoryItem && other) throw() -{ - *this = std::move(other); -} - -HistoryItem::HistoryItem(const std::string & url, - const std::string & title, - std::shared_ptr image) - : m_url(url) - , m_title(title) - , m_favIcon(image) -{ -} - -HistoryItem::HistoryItem(const std::string & url) - : m_url(url) - , m_title() - , m_lastVisit() - , m_favIcon(std::make_shared()) -{ - -} - -HistoryItem::HistoryItem(const HistoryItem& source) - : m_url(source.m_url) - , m_title(source.m_title) - , m_lastVisit(source.m_lastVisit) - , m_favIcon(source.m_favIcon) - , m_visitCounter(source.m_visitCounter) -{ - -} - -HistoryItem::~HistoryItem() -{ - -} - -HistoryItem & HistoryItem::operator=(HistoryItem && other) throw() -{ - if (this != &other) { - m_url = std::move(other.m_url); - m_title = std::move(other.m_title); - m_visitDate = std::move(other.m_visitDate); - m_visitCounter = std::move(other.m_visitCounter); - m_favIcon = std::move(other.m_favIcon); - } - return *this; -} - -bool HistoryItem::operator==(const HistoryItem& other) -{ - return (m_url == other.m_url); -} - -bool HistoryItem::operator!=(const HistoryItem& other) -{ - return (m_url != other.m_url); -} - -void HistoryItem::setUrl(const std::string & url) -{ - m_url = url; -} - -std::string HistoryItem::getUrl() -{ - return m_url; -} - -void HistoryItem::setTitle(const std::string & title) -{ - m_title = title; -} - -std::string HistoryItem::getTitle() const -{ - return m_title; -} - -// void HistoryItem::setVisitDate(boost::gregorian::date visitDate) -// { -// m_visitDate = visitDate; -// } -// -// boost::gregorian::date HistoryItem::getVisitDate() -// { -// return m_visitDate; -// } - -void HistoryItem::setLastVisit(boost::posix_time::ptime visitDate) -{ - m_lastVisit = visitDate; -} - -boost::posix_time::ptime HistoryItem::getLastVisit() const -{ - return m_lastVisit; -} - -void HistoryItem::setVisitCounter(int visitCounter) -{ - m_visitCounter = visitCounter; -} - -int HistoryItem::getVisitCounter() -{ - return m_visitCounter; -} - -void HistoryItem::setFavIcon(std::shared_ptr favIcon) -{ - m_favIcon = favIcon; -} - -std::shared_ptr HistoryItem::getFavIcon() -{ - return m_favIcon; -} - -void HistoryItem::setUriFavicon(const std::string & uri) { - m_urifavicon = uri; -} - -std::string HistoryItem::getUriFavicon() { - return m_urifavicon; -} - - -} -} 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/MainUI/CMakeLists.txt b/services/MainUI/CMakeLists.txt new file mode 100644 index 0000000..fd1710f --- /dev/null +++ b/services/MainUI/CMakeLists.txt @@ -0,0 +1,29 @@ +project(MainUI) + +set(MainUI_SRCS + MainUI.cpp + ) + +set(MainUI_HEADERS + MainUI.h + ) + +include(Coreheaders) +include(EFLHelpers) + +include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService) + +add_library(${PROJECT_NAME} SHARED ${MainUI_SRCS}) + +if(TIZEN_BUILD) + target_link_libraries(${PROJECT_NAME} ${pkgs_LDFLAGS}) +endif(TIZEN_BUILD) + +install(TARGETS ${PROJECT_NAME} + LIBRARY DESTINATION services + ARCHIVE DESTINATION services/static) + +include(EDCCompile) +EDJ_TARGET(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/MainUI/edc/error.edc b/services/MainUI/edc/error.edc new file mode 100644 index 0000000..0291971 --- /dev/null +++ b/services/MainUI/edc/error.edc @@ -0,0 +1,144 @@ +collections { + images { + image: "web_browsing_icon_error.png" COMP; + } + group { name: "error_message"; + styles { + style { name: "mssage_style"; + base: "font=Sans font_size=35 color=#d3d3d3 wrap=word align=0.5"; + } + style { name: "mssage_hint_style"; + base: "font=Sans font_size=24 color=#868686 wrap=word align=0.5"; + } + } + parts { + part{ + name: "message_background"; + type: RECT; + description{ + state: "default" 0.0; + visible: 1; + rel1.relative: 0 0; + rel2.relative: 1 1; + color: 42 50 64 255; + } + } + part{ + name: "error_message_background"; + type:RECT; + description{ + state: "default" 0.0; + visible: 1; + min: 1582 730; + max: 1582 730; + fixed: 1 1; + align: 0.5 0.5; + color: 30 38 50 153; + } + } + part{ + name: "err_ico"; + type: IMAGE; + description{ + state: "default" 0.0; + visible: 1; + min: 140 140; + max:140 140; + fixed: 1 1; + align: 0.5 0; + rel1{ + relative: 0 0; + offset:0 163; + to: "error_message_background"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + image{ + normal: "web_browsing_icon_error.png"; + } + } + } + + part{ + name: "error_text"; + type: TEXTBLOCK; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1502 96; + max: 1502 96; + //color: 211 211 211 255; + align: 0.5 0; + rel1{ + relative: 0 1; + to_x: "error_message_background"; + to_y: "err_ico"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + text{ + style: "mssage_style"; + text: "Server not found.
sdf Please check the followings:"; + //min: 0 0; + //max: 1 1; + //align: 1 0; + //size: 35; + } + } + } + + + part{ + name: "error_hint"; + type: TEXTBLOCK; + description{ + state: "default" 0.0; + visible: 1; + fixed: 1 1; + min: 1502 117; + max: 1502 117; + color: 134 134 134 255; + align: 0.5 0; + rel1{ + relative: 0 1; + to_x: "error_message_background"; + to_y: "error_text"; + } + rel2{ + relative: 1 1; + to: "error_message_background"; + } + text{ + max: 0 1; + style: "mssage_hint_style"; + text: "Check for any typing error in URL.
" + "Check your network settings.
" + "Try again later.
" + "Click refresh to reload."; + } + } + } + } +/* + programs { + program { name: "mouse_down"; + signal: "mouse,down,1"; + source: "logo"; + action: STATE_SET "hide" 0.0; + target: "logo"; + } + program { name: "mouse_up"; + signal: "mouse,up,1"; + source: "logo"; + action: STATE_SET "default" 0.0; + target: "logo"; + } + } +*/ + } +} diff --git a/services/MainUI/images/web_frame_selected.png b/services/MainUI/images/web_frame_selected.png new file mode 100644 index 0000000..4470ca4 Binary files /dev/null and b/services/MainUI/images/web_frame_selected.png differ diff --git a/services/MainUI/images/web_shadow.png b/services/MainUI/images/web_shadow.png new file mode 100644 index 0000000..f9018b0 Binary files /dev/null and b/services/MainUI/images/web_shadow.png differ 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 0000000..21d05e5 Binary files /dev/null and b/services/SimpleUI/images/Black_dot.png differ diff --git a/services/SimpleUI/images/btn_bar_back_nor.png b/services/SimpleUI/images/btn_bar_back_nor.png new file mode 100644 index 0000000..e4e7da9 Binary files /dev/null and b/services/SimpleUI/images/btn_bar_back_nor.png differ 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 0000000..ef0b78d Binary files /dev/null and b/services/SimpleUI/images/btn_bar_forward_nor.png differ 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 0000000..3a96d3c Binary files /dev/null and b/services/SimpleUI/images/btn_bar_manager_nor.png differ 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 0000000..f51cb54 Binary files /dev/null and b/services/SimpleUI/images/btn_bar_more_nor.png differ diff --git a/services/SimpleUI/images/btn_bar_reload_nor.png b/services/SimpleUI/images/btn_bar_reload_nor.png new file mode 100644 index 0000000..7f840cb Binary files /dev/null and b/services/SimpleUI/images/btn_bar_reload_nor.png differ 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 0000000..c5cdc11 Binary files /dev/null and b/services/SimpleUI/images/btn_bar_stop_nor.png differ diff --git a/services/SimpleUI/images/btn_bar_vertical_settings.png b/services/SimpleUI/images/btn_bar_vertical_settings.png new file mode 100644 index 0000000..64488c3 Binary files /dev/null and b/services/SimpleUI/images/btn_bar_vertical_settings.png differ diff --git a/services/SimpleURI/edc/URIEntry.edc b/services/SimpleURI/edc/URIEntry.edc index 684ad2a..1ec64f6 100644 --- a/services/SimpleURI/edc/URIEntry.edc +++ b/services/SimpleURI/edc/URIEntry.edc @@ -1,4 +1,6 @@ -#define URI_WIDTH 994 +#define URI_INPUTBOX_LENGTH 1720 +#define URI_INPUTBOX_LENGTH_SMALL 1460 +#define URI_INPUTBOX_WIDTH 82 collections { group { name: "elm/entry/selection/browser_entry"; parts { @@ -7,7 +9,7 @@ group { name: "elm/entry/selection/browser_entry"; type: RECT; mouse_events: 0; description { state: "default" 0.0; - color: 0 0 128 64; + color: 255 255 255 255; } } } @@ -19,7 +21,7 @@ group { name: "elm/entry/cursor/browser_entry"; type: RECT; mouse_events: 0; description { state: "default" 0.0; - color: 69 149 255 255; + color: 22 120 237 255; min: 2 36; max: 2 36; visible: 0; @@ -51,17 +53,27 @@ group { styles { style { name: "browser-entry-uri-style-unselected"; - base: "font=Tizen:style=SVD_Medium font_size="32" wrap=none color=#CCCCCC"; + base: "font=Sans:style=SVD_Medium font_size="42" wrap=none color=#969696"; } style { name: "browser-entry-uri-style-selected"; - base: "font=Tizen:style=SVD_Medium font_size="32" wrap=none color=#3D3D3D"; + base: "font=Sans:style=SVD_Medium font_size="42" wrap=none color=#4088d3"; } } data { item: focus_highlight "off"; } parts { + + part { name: "bg"; + scale:1; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 255; + } + } + part { name: "elm.guide"; scale:1; @@ -159,52 +171,7 @@ group { group { name: "uri_entry_layout"; - images { - image: "search_searchbar_bg_foc.png" COMP; - image: "search_searchbar_bg_nor.png" COMP; - image: "ico_search.png" COMP; - image: "ico_url.png" COMP; - } parts { - part { name: "bg"; - mouse_events: 1; - scale:1; - type: IMAGE; - description { - state: "default" 0.0; - visible: 1; - align: 0.0 0.0; - min: 11 11; - max: URI_WIDTH 70; - fixed: 1 1; - rel1 { relative: 0.0 0.0; } - rel2 { relative: 1.0 1.0; } - image.normal: "search_searchbar_bg_nor.png"; - image.border: 5 5 5 5; - //image.border_scale: 0; - //image.middle: NONE; - fill { - type: SCALE; - smooth: 0; - origin { - relative: 0 0; - offset: 0 0; - } - size { - relative: 1 1; - offset: 0 0; - } - } - } - description { - state: "focused" 0.0; - inherit: "default" 0.0; - image.normal: "search_searchbar_bg_foc.png"; - //image.border: 5 5 5 5; - //image.border_scale: 0; - //image.middle: NONE; - } - } part { name: "spacer_1"; type: SPACER; @@ -215,52 +182,8 @@ group { rel2 { relative: 0.0 0.0; offset: 15 0; } align: 0.0 0.0; fixed: 1 1; - min: 15 70; - max: 15 70; - } - } - part { name: "uri_icon"; - type: IMAGE; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: 1 0; to: "spacer_1"; } - rel2 { relative: 1 1; to: "spacer_1"; } - align: 0.0 0.0; - fixed: 1 1; - min: 60 70; - max: 60 70; - image.normal: "ico_search.png"; - visible: 1; - } - description { - state: "document" 0.0; - inherit: "default" 0.0; - image.normal: "ico_url.png"; - } - description{ - state: "hidden" 0.0; - inherit: "default" 0.0; - visible: 0; - } - } - part { name: "fav_icon"; - type: SWALLOW; - scale: 1; - description{ - state: "default" 0.0; - rel1 { relative: 0 0; to: "uri_icon";} - rel2 { relative: 1 1; to: "uri_icon";} - align: 0.5 0.5; - fixed: 1 1; - min: 36 36; - max: 36 36; - visible: 0; - } - description{ - state: "visible" 0.0; - inherit: "default" 0.0; - visible: 1; + min: 1 102; + max: 1 102; } } part { name: "uri_entry_swallow"; @@ -269,13 +192,21 @@ group { description { state: "default" 0.0; visible: 1; + color: 255 255 255 255; align: 0.0 0.0; - min: 889 70; - max: 889 70; + min: URI_INPUTBOX_LENGTH URI_INPUTBOX_WIDTH; + max: URI_INPUTBOX_LENGTH URI_INPUTBOX_WIDTH; fixed: 1 1; - rel1 { relative: 1 0; to: "uri_icon"; } - rel2 { relative: 1 1; to: "uri_icon"; } + rel1 { relative: 1 0; to: "spacer_1"; } + rel2 { relative: 1 1; to: "spacer_1"; } } + description { + state: "moveright" 0.0; + inherit: "default" 0.0; + visible: 1; + min: URI_INPUTBOX_LENGTH_SMALL URI_INPUTBOX_WIDTH; + max: URI_INPUTBOX_LENGTH_SMALL URI_INPUTBOX_WIDTH; + } description { state: "hidden" 0.0; inherit: "default" 0.0; @@ -294,8 +225,8 @@ group { description { state: "default" 0.0; color: 0 0 0 0; - rel1 { relative: 0 0; to: "bg"; } - rel2 { relative: 1 1; to: "bg"; } + rel1 { relative: 0 0; to: "spacer_1"; } + rel2 { relative: 1 1; to: "spacer_1"; } } } part { name: "uri_entry_btn"; @@ -305,65 +236,38 @@ group { description { state: "default" 0.0; visible: 1; - rel1.to: "bg"; - rel2.to: "bg"; + rel1.to: "uri_entry_swallow"; + rel2.to: "uri_entry_swallow"; } - } + } } programs { + program { name: "shiftright_uribarbg"; + signal: "shiftright_uribg"; + source: "ui"; + action: STATE_SET "moveright" 0.0; + target: "uri_entry_swallow"; + } + program { name: "shiftback_uribarbg"; + signal: "shiftback_uribg"; + source: "ui"; + action: STATE_SET "default" 0.0; + target: "uri_entry_swallow"; + } program { name: "mouse_in_entry"; source: "over"; signal: "mouse,in"; action: STATE_SET "focused" 0.0; - target: "bg"; + target: "spacer_1"; } program { name: "mouse_out_entry"; source: "over"; signal: "mouse,out"; action: STATE_SET "default" 0.0; - target: "bg"; - } - program{ - name: "set_search_icon"; - source: "model"; - signal: "set_search_icon"; - script{ - set_state(PART:"uri_icon", "default", 0.0); - set_state(PART:"fav_icon", "default", 0.0); - } - } - program { - name: "fav_icon_clicked"; - source: "fav_icon"; - signal: "mouse,clicked,*"; - action: SIGNAL_EMIT "slide_websearch" "elm"; - } - program { - name: "uri_icon_clicked"; - source: "uri_icon"; - signal: "mouse,clicked,*"; - action: SIGNAL_EMIT "slide_websearch" "elm"; - } - program{ - name: "set_doc_icon"; - source: "model"; - signal: "set_doc_icon"; - script{ - set_state(PART:"uri_icon", "document", 0.0); - set_state(PART:"fav_icon", "default", 0.0); - } - } - program{ - name: "show_favicon"; - source: "model"; - signal: "show_favicon"; - script{ - set_state(PART:"uri_icon", "hidden", 0.0); - set_state(PART:"fav_icon", "visible", 0.0); - } + target: "spacer_1"; } } } -} \ No newline at end of file +} diff --git a/services/WebKitEngineService/WebKitEngineService.cpp b/services/WebKitEngineService/WebKitEngineService.cpp index e539a90..5d8f076 100644 --- a/services/WebKitEngineService/WebKitEngineService.cpp +++ b/services/WebKitEngineService/WebKitEngineService.cpp @@ -43,7 +43,7 @@ EXPORT_SERVICE(WebKitEngineService, "org.tizen.browser.webkitengineservice") WebKitEngineService::WebKitEngineService() : m_initialised(false) , m_privateMode(false) - , m_guiParent(NULL) + , m_guiParent(nullptr) , m_currentTabId(TabId::NONE) { m_mostRecentTab.clear(); @@ -122,7 +122,10 @@ void WebKitEngineService::setURI(const std::string & uri) std::string WebKitEngineService::getURI() const { M_ASSERT(m_currentWebView); - return m_currentWebView->getURI(); + 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);