Task TT-75 Implement "Main page loading UI" view 36/44936/1
authork.lis2 <k.lis2@samsung.com>
Wed, 29 Jul 2015 13:44:44 +0000 (15:44 +0200)
committerk.lis2 <k.lis2@samsung.com>
Wed, 29 Jul 2015 13:44:44 +0000 (15:44 +0200)
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

51 files changed:
browser_config.h
core/AbstractInterfaces/AbstractFavoriteService.h
core/Config/Config.h
core/Tools/BookmarkItem.cpp
core/Tools/BookmarkItem.h
core/main.cpp
scripts/astylerc [new file with mode: 0644]
services/BookmarkService/BookmarkService.cpp
services/BookmarkService/BookmarkService.h
services/BookmarksUI/BookmarksUI.cpp [deleted file]
services/BookmarksUI/BookmarksUI.h [deleted file]
services/BookmarksUI/edc/Bookmarks.edc [deleted file]
services/BookmarksUI/images/ico_delete.png [deleted file]
services/CMakeLists.txt
services/HistoryService/CMakeLists.txt
services/HistoryService/HistoryItem.cpp [moved from services/HistoryService/src/HistoryItem.cpp with 92% similarity]
services/HistoryService/HistoryItem.h
services/HistoryService/HistoryService.cpp [new file with mode: 0644]
services/HistoryService/HistoryService.h
services/HistoryService/src/HistoryService.cpp [deleted file]
services/MainUI/CMakeLists.txt [moved from services/BookmarksUI/CMakeLists.txt with 62% similarity]
services/MainUI/MainUI.cpp [new file with mode: 0644]
services/MainUI/MainUI.h [new file with mode: 0644]
services/MainUI/edc/MainUI.edc [new file with mode: 0644]
services/MainUI/edc/error.edc [moved from services/BookmarksUI/edc/error.edc with 100% similarity]
services/MainUI/images/web_frame_selected.png [moved from services/BookmarksUI/images/web_frame_selected.png with 100% similarity]
services/MainUI/images/web_shadow.png [moved from services/BookmarksUI/images/ico_bg_round_shape_37x37.png with 91% similarity]
services/PlatformInputManager/PlatformInputManager.cpp
services/SimpleUI/BookmarksManager.cpp [new file with mode: 0644]
services/SimpleUI/BookmarksManager.h [new file with mode: 0644]
services/SimpleUI/CMakeLists.txt
services/SimpleUI/HistoryList.cpp
services/SimpleUI/SimplePopup.cpp
services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h
services/SimpleUI/edc/BookmarksManager.edc [new file with mode: 0644]
services/SimpleUI/edc/LeftButtonBar.edc
services/SimpleUI/edc/MainLayout.edc
services/SimpleUI/edc/RightButtonBar.edc
services/SimpleUI/edc/webview.edc [new file with mode: 0644]
services/SimpleUI/images/Black_dot.png [new file with mode: 0644]
services/SimpleUI/images/btn_bar_back_nor.png [new file with mode: 0644]
services/SimpleUI/images/btn_bar_forward_nor.png [new file with mode: 0644]
services/SimpleUI/images/btn_bar_manager_nor.png [new file with mode: 0644]
services/SimpleUI/images/btn_bar_more_nor.png [new file with mode: 0644]
services/SimpleUI/images/btn_bar_reload_nor.png [new file with mode: 0644]
services/SimpleUI/images/btn_bar_stop_nor.png [new file with mode: 0644]
services/SimpleUI/images/btn_bar_vertical_settings.png [new file with mode: 0644]
services/SimpleURI/edc/URIEntry.edc
services/WebKitEngineService/WebKitEngineService.cpp
services/WebKitEngineService/WebView.cpp

index 6d4258b..3ccb510 100644 (file)
@@ -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
index a940058..5c24c4f 100644 (file)
 
 #include "browser_config.h"
 
-#include <vector>
-#include <boost/signals2/signal.hpp>
-#include <Evas.h>
-
 #include "AbstractService.h"
 #include "service_macros.h"
 #include "BookmarkItem.h"
@@ -62,7 +58,19 @@ public:
                                                  std::shared_ptr<tizen_browser::tools::BrowserImage> thumbnail=std::shared_ptr<tizen_browser::tools::BrowserImage>(),
                                                  std::shared_ptr<tizen_browser::tools::BrowserImage> favicon = std::shared_ptr<tizen_browser::tools::BrowserImage>(),
                                                  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<std::shared_ptr<tizen_browser::services::BookmarkItem> > 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<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarks()= 0;
+    virtual std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarkFolders()= 0;
 
     /**
      * @brief Delete all bookmarks
index cd82869..b342c86 100644 (file)
@@ -21,8 +21,6 @@
 #include <map>
 
 #include <boost/any.hpp>
-//#include <boost/property_tree/json_parser.hpp>
-//#include <boost/property_tree/ptree.hpp>
 
 namespace tizen_browser
 {
index 10f7c23..3f994fd 100644 (file)
@@ -54,7 +54,6 @@ BookmarkItem::BookmarkItem(
 
 }
 
-
 BookmarkItem::~BookmarkItem()
 {
 }
index faff1b2..84fe489 100644 (file)
 #ifndef BOOKMARKITEM_H
 #define BOOKMARKITEM_H
 
-#include <memory>
-#include <list>
-#include <vector>
-
+#include "BrowserLogger.h"
+#include "Config.h"
 #include "BrowserImage.h"
 
 namespace tizen_browser{
@@ -69,6 +67,12 @@ public:
     void setTags(const std::vector<unsigned int>& tags) { m_tags = tags; };
     std::vector<unsigned int> 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<tizen_browser::tools::BrowserImage> m_favicon;
     unsigned int m_directory;
     std::vector<unsigned int> m_tags;
+    bool m_is_folder;
+    bool m_is_editable;
 };
 
 typedef std::shared_ptr<BookmarkItem> SharedBookmarkItem;
index 9342b05..83d48f0 100755 (executable)
@@ -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 (file)
index 0000000..22d7cba
--- /dev/null
@@ -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
index 99b14e2..a1ffdae 100644 (file)
@@ -22,8 +22,8 @@
 
 #include "browser_config.h"
 #include "BookmarkService.h"
+#include <Elementary.h>
 
-#include <string>
 #include <boost/any.hpp>
 #include <BrowserAssert.h>
 
@@ -56,6 +56,7 @@ BookmarkService::BookmarkService()
 BookmarkService::~BookmarkService()
 {
     bp_bookmark_adaptor_deinitialize();
+    free_path_history();
 }
 
 /*private*/ std::shared_ptr<tizen_browser::services::StorageService> BookmarkService::getStorageManager() {
@@ -76,40 +77,68 @@ std::shared_ptr<BookmarkItem> BookmarkService::addToBookmarks(
                                                 unsigned int dirId)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    std::shared_ptr<BookmarkItem> bookmark = std::make_shared<BookmarkItem>(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<BookmarkItem>();
     }
 
-    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<BookmarkItem>();
+    }
 
-    bp_bookmark_adaptor_set_title(bookmark_id, tittle.c_str());
-       if (thumbnail) {
-           std::unique_ptr<tizen_browser::tools::Blob> 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<tizen_browser::tools::Blob> 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<tizen_browser::tools::Blob> 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<tizen_browser::tools::Blob> 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<BookmarkItem> bookmark = std::make_shared<BookmarkItem>(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<std::shared_ptr<BookmarkItem> > BookmarkService::getBookmarks()
+std::vector<std::shared_ptr<BookmarkItem> > 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<std::shared_ptr<BookmarkItem>>();
@@ -178,7 +208,7 @@ std::vector<std::shared_ptr<BookmarkItem> > BookmarkService::getBookmarks()
         bp_bookmark_info_fmt bookmark_info;
         bp_bookmark_adaptor_get_easy_all(ids[i], &bookmark_info);
 
-        std::shared_ptr<BookmarkItem> bookmark = std::make_shared<BookmarkItem>(std::string(bookmark_info.url),std::string(bookmark_info.title), std::string(""), 0);
+        std::shared_ptr<BookmarkItem> bookmark = std::make_shared<BookmarkItem>(std::string(bookmark_info.url),std::string(bookmark_info.title), std::string(""),(int) bookmark_info.parent, ids[i]);
 
         std::shared_ptr<tizen_browser::tools::BrowserImage> bi = std::make_shared<tizen_browser::tools::BrowserImage>();
         bi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG;
@@ -204,14 +234,1164 @@ std::vector<std::shared_ptr<BookmarkItem> > BookmarkService::getBookmarks()
     return m_bookmarks;
 }
 
+std::vector<std::shared_ptr<BookmarkItem> > 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<std::shared_ptr<BookmarkItem>>();
+    }
+
+    m_bookmarks.clear();
+
+    BROWSER_LOGD("Bookmark items: %d", ids_count);
+
+    for(int i = 0; i<ids_count; i++)
+    {
+        bp_bookmark_info_fmt bookmark_info;
+        bp_bookmark_adaptor_get_easy_all(ids[i], &bookmark_info);
+
+        std::shared_ptr<BookmarkItem> bookmark = std::make_shared<BookmarkItem>(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<tizen_browser::tools::BrowserImage> bi = std::make_shared<tizen_browser::tools::BrowserImage>();
+        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<tizen_browser::tools::BrowserImage> fav = std::make_shared<tizen_browser::tools::BrowserImage>();
+        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<bool>(info.type));
+        item->setDir(info.parent);
+        item->set_editable_flag(static_cast<bool>(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<BookmarkItem *>  BookmarkService::get_list_by_folder(const int folder_id)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    std::vector<BookmarkItem *> 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<bool>(info.type));
+            item->setDir(folder_id);
+            item->set_editable_flag(static_cast<bool>(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<BookmarkItem *> &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<bool>(info.type));
+            item->setDir(folder_id);
+            item->set_editable_flag(static_cast<bool>(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<BookmarkItem *> &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<bool>(info.type));
+            item->setDir(folder_id);
+            item->set_editable_flag(static_cast<bool>(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<BookmarkItem *> &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<bool>(info.type));
+            item->setDir(folder_id);
+            item->set_editable_flag(static_cast<bool>(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<BookmarkItem *> &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<bool>(info.type));
+            item->setDir(folder_id);
+            item->set_editable_flag(static_cast<bool>(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<BookmarkItem *> &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<bool>(info.type));
+            item->setDir(info.parent);
+            item->set_editable_flag(static_cast<bool>(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<BookmarkItem *> &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<BookmarkItem *> 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 */
index f33db1d..75ed2f2 100644 (file)
@@ -24,7 +24,6 @@
 #define BOOKMARKSERVICE_H
 
 #include "browser_config.h"
-
 #include <vector>
 #include <boost/signals2/signal.hpp>
 #include <Evas.h>
@@ -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<std::shared_ptr<BookmarkItem> > getBookmarks();
+    std::vector<std::shared_ptr<BookmarkItem> > getBookmarks(int folder_id = 0);
+    std::vector<std::shared_ptr<BookmarkItem> > 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<BookmarkItem *> get_list_by_folder(const int folder_id);
+    bool get_list_users_by_folder(const int folder_id, std::vector<BookmarkItem *> &list);
+    bool get_list_by_dividing(const int folder_id, std::vector<BookmarkItem *> &list, int *last_item, int genlist_block_size);
+    bool get_list_users_by_dividing(const int folder_id, std::vector<BookmarkItem *> &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<BookmarkItem *> &list);
+    bool get_list_by_keyword(const char *keyword, std::vector<BookmarkItem *> &list);
+    void destroy_list(std::vector<BookmarkItem *> &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<BookmarkItem *> m_bookmark_list;
+    std::vector<folder_info *> m_path_history;
+    std::string m_path_string;
+    bool m_memory_full;
+    bool m_bookmark_adaptor_initialize;
+    int m_curr_folder;
     std::shared_ptr<tizen_browser::services::StorageService> m_storageManager;
-
     std::vector<std::shared_ptr<BookmarkItem> > m_bookmarks;
 
-
-
 ///    \todo Need to change getBookmarkId function for finding stored bookmark - check getBookmarkExists function
     int getBookmarkId(const std::string & url);
-
     std::shared_ptr<tizen_browser::services::StorageService> getStorageManager();
-
     config::DefaultConfig config;
 };
 
diff --git a/services/BookmarksUI/BookmarksUI.cpp b/services/BookmarksUI/BookmarksUI.cpp
deleted file mode 100644 (file)
index 5e9a505..0000000
+++ /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 <Elementary.h>
-#include <boost/concept_check.hpp>
-#include <vector>
-#include <AbstractMainWindow.h>
-
-#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<tizen_browser::services::BookmarkItem> item;
-       std::shared_ptr<tizen_browser::base_ui::BookmarksUI> 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<tizen_browser::services::BookmarkItem> bi)
-{
-    BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
-    BookmarkItemData *itemData = new BookmarkItemData();
-    itemData->item = bi;
-       itemData->bookmarksUI = std::shared_ptr<tizen_browser::base_ui::BookmarksUI>(this);
-       Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, NULL, this);
-    m_map_bookmark_views.insert(std::pair<std::string,Elm_Object_Item*>(bi->getAddress(),bookmarkView));
-
-    // unselect by default
-    elm_gengrid_item_selected_set(bookmarkView, EINA_FALSE);
-
-    setEmptyGengrid(false);
-}
-
-void BookmarksUI::addBookmarkItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > 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<BookmarkItemData*>(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<Elm_Object_Item *>(event_info);
-       BookmarkItemData * itemData = reinterpret_cast<BookmarkItemData *>(elm_object_item_data_get(selected));
-       BookmarksUI * self = reinterpret_cast<BookmarksUI *>(data);
-
-       self->bookmarkClicked(itemData->item);
-}
-
-void BookmarksUI::_deleteBookmark(void *data, Evas_Object * /* obj */, void * /* event_info */)
-{
-       BookmarkItemData * itemData = reinterpret_cast<BookmarkItemData *>(data);
-       itemData->bookmarksUI->bookmarkDeleteClicked(itemData->item);
-}
-
-void BookmarksUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */)
-{
-       BookmarkItemData * itemData = reinterpret_cast<BookmarkItemData *>(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<Elm_Object_Item*>(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<Elm_Object_Item*>(event_info);
-    elm_object_item_signal_emit( item, "mouse,out", "over2");
-
-    // unselected manually
-    elm_gengrid_item_selected_set(item, EINA_FALSE);
-}
-
-std::shared_ptr<tizen_browser::services::BookmarkItem> BookmarksUI::getSelectedBookmarkItem()
-{
-    Elm_Object_Item * selected = elm_gengrid_selected_item_get(m_gengrid);
-
-    if (!selected) {
-            BROWSER_LOGD("none selected");
-        return std::make_shared<tizen_browser::services::BookmarkItem>();
-    }
-       BookmarkItemData * itemData = reinterpret_cast<BookmarkItemData *>(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 (file)
index 33bb924..0000000
+++ /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 <Evas.h>
-#include <boost/signals2/signal.hpp>
-
-#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<tizen_browser::services::BookmarkItem>);
-    void addBookmarkItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> >);
-    void removeBookmarkItem(const std::string& uri);
-    void deleteAllItems();
-    std::shared_ptr<tizen_browser::services::BookmarkItem> getSelectedBookmarkItem();
-
-
-    boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::BookmarkItem>)> bookmarkClicked;
-    boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::BookmarkItem>)> 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<std::string,Elm_Object_Item*> m_map_bookmark_views;
-    bool m_gengridSetup;
-    Evas_Object *createNoBookmarksLabel();
-
-    static void focusItem(void* data, Evas_Object* obj, void* event_info);
-    static void unFocusItem(void* data, Evas_Object* obj, void* event_info);
-};
-
-
-}
-}
-
-#endif // BOOKMARKSUI_H
diff --git a/services/BookmarksUI/edc/Bookmarks.edc b/services/BookmarksUI/edc/Bookmarks.edc
deleted file mode 100644 (file)
index 7638300..0000000
+++ /dev/null
@@ -1,440 +0,0 @@
-#define DEBUG_RECT_OVER(over_part, r, g, b)                         \
-    part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__));   \
-                                                                    \
-scale:1;                                                            \
-        type : RECT;                                                \
-        repeat_events: 1;                                           \
-        description {                                               \
-            state: "default" 0.0;                                   \
-            visible: 1;                                             \
-            color: r g b 128;                                       \
-            rel1 { to: over_part; relative: 0 0; }                  \
-            rel2 { to: over_part; relative: 1 1; }                  \
-        }                                                           \
-    }
-
-collections {
-
-group { name: "elm/label/base/bookmarks_label";
-   styles {
-      style { name: "textblock_white";
-         base: "font=Sans font_size="30" color=#D3D3D3";
-      }
-   }
-   styles {
-      style { name: "textblock_white_bold";
-         base: "font=Sans:style=Bold font_size="30" color=#D3D3D3";
-      }
-   }
-
-   parts {
-      part { name: "elm.text";
-         type: TEXTBLOCK;
-         description { state: "default" 0.0;
-            rel1.relative: 0.0 0.0;
-            rel2.relative: 1.0 1.0;
-            align: 0.0 0.0;
-            fixed: 1 1;
-            text {
-               style: "textblock_white";
-               min: 0 1;
-            }
-         }
-         description { state: "bold" 0.0;
-               inherit: "default" 0.0;
-               text {
-               style: "textblock_white_bold";
-               min: 0 1;
-            }
-         }
-      }
-   }
-}
-
-group { name: "elm/button/base/thumbButton";
-               images {
-                       image: "ico_delete.png" COMP;
-               }
-               parts {
-                       part { name: "elm.swallow.content";
-                               type: RECT;
-                               mouse_events: 1;
-                               repeat_events: 1;
-                               description { state: "default" 0.0;
-                                       color: 0 0 0 0;
-                                       visible: 1;
-                                       rel1.relative: 0.0 0.0;
-                       rel2.relative: 1.0 1.0;
-                       align: 0.0 0.0;
-               }
-                       }
-               }
-
-               programs {
-                       program { name: "mouse,clicked";
-                               signal: "mouse,down,1";
-                               source: "elm.swallow.content";
-                               action: SIGNAL_EMIT "elm,action,click" "";
-                       }
-               }
-}
-
-group { name: "elm/button/base/deleteButton";
-               parts {
-                       part { name: "delete_x";
-                               type: IMAGE;
-                               description { state: "default" 0.0;
-                                       min: 27 27;
-                                       max: 27 27;
-                                       image.normal: "ico_delete.png";
-                                       rel1.relative: 0.0 0.0;
-                       rel2.relative: 1.0 1.0;
-                       align: 0.5 0.5;
-                       visible: 0;
-                               }
-                               description { state: "over" 0.0;
-                                       inherit: "default" 0.0;
-                                       visible: 1;
-                               }
-                       }
-
-                       part { name: "elm.swallow.content";
-                               type: RECT;
-                               mouse_events: 1;
-                               repeat_events: 1;
-                               description { state: "default" 0.0;
-                                       color: 0 0 0 0;
-                                       visible: 1;
-                                       rel1.relative: 0.0 0.0;
-                       rel2.relative: 1.0 1.0;
-                       align: 0.0 0.0;
-               }
-                       }
-               }
-               programs {
-                       program { name: "mouse,clicked";
-                               signal: "mouse,down,1";
-                               source: "elm.swallow.content";
-                               action: SIGNAL_EMIT "elm,action,click" "";
-                       }
-                       program { name: "mouse_in";
-                               signal: "mouse,in";
-                               source: "elm.swallow.content";
-                               action:  STATE_SET "over" 0.0;
-                               target:  "delete_x";
-                       }
-                       program { name: "mouse_out";
-                               signal: "mouse,out";
-                               source: "elm.swallow.content";
-                               action:  STATE_SET "default" 0.0;
-                               target:  "delete_x";
-                       }
-               }
-}
-group { name: "elm/gengrid/base/bookmarks";
-    data {
-        item: "focus_highlight" "off";
-    }
-
-        parts {
-            part { name: "clipper";
-                type: RECT;
-                mouse_events: 0;
-                description { state: "default" 0.0;
-                    rel1 {
-                                               relative: 0 0;
-                    }
-                    rel2{
-                                               relative: 1 1;
-                    }
-                }
-            }
-           part { name: "background";
-                type: RECT;
-                mouse_events: 0;
-                description { state: "default" 0.0;
-                                       color: 42 50 64 255;
-                    rel1 {
-                                               relative: 0 0;
-                    }
-                    rel2{
-                                               relative: 1 1;
-                    }
-                }
-            }
-            part { name: "elm.swallow.content";
-                type: SWALLOW;
-                clip_to: "clipper";
-                description { state: "default" 0.0;
-                    rel1 {
-                                               relative: 0 0;
-                                               offset: 169 110;
-                    }
-                    rel2 {
-                        relative: 1 1;
-                        offset: -169 0;
-                    }
-                }
-            }
-            part { name: "elm.swallow.empty";
-                type: SWALLOW;
-                description { state: "default" 0.0;
-                align: 0.5 0.5;
-                    rel1 {
-                        relative: 0.5 0.5;
-                    }
-                    rel2 {
-                        relative: 0.5 0.5;
-                    }
-                }
-            }
-    }
-}
-group { name: "elm/gengrid/item/bookmark_item/default";
-       data.item: "texts" "elm.text";
-       data.item: "contents" "elm.thumbnail favicon elm.text elm.label elm.deleteButton elm.thumbButton";
-       images {
-               image: "web_frame_selected.png" COMP;
-               image: "ico_bg_round_shape_37x37.png" COMP;
-       }
-       parts {
-               part { name: "bg";
-                       clip_to: "disclip";
-                       mouse_events: 0;
-                       description { state: "default" 0.0;
-                               visible: 0;
-                               color: 255 255 255 0;
-                       }
-               }
-
-               part { name: "elm.thumbnail";
-                       clip_to: "disclip";
-                       type: SWALLOW;
-                       description { state: "default" 0.0;
-                               fixed: 1 0;
-                               align: 0.0 0.0;
-                               min: 373 240;
-                               max: 373 240;
-                               rel1 {
-                                       relative: 0.0  0.0;
-                               }
-                               rel2 {
-                                       relative: 1.0  1.0;
-                               }
-                       }
-                       description { state: "selected";
-                               inherit: "default" 0.0;
-                       }
-               }
-
-               part { name: "focus_highlight";
-                       type: IMAGE;
-                       description { state: "default" 0.0;
-                               rel1 {
-                                       to: "elm.thumbnail";
-                                       relative: 0.0  0.0;
-                               }
-                               rel2 {
-                                       to: "elm.thumbnail";
-                                       relative: 1.0  1.0;
-                               }
-                               image.normal: "web_frame_selected.png";
-                               image.border: 8 8 8 0;
-                               image.border_scale: 1;
-                               image.middle: NONE;
-                               visible: 0;
-                       }
-                       description { state: "selected";
-                               inherit: "default" 0.0;
-                               visible: 1;
-                       }
-               }
-
-               part { name: "background";
-                       clip_to: "disclip";
-                       type: RECT;
-                       description { state: "default" 0.0;
-                               min: 373 87;
-                               max: 373 87;
-                               align: 0.0 0.0;
-                               color: 30 38 50 255;
-                               rel1 {
-                                       to: "elm.thumbnail";
-                                       relative: 0.0  1.0;
-                                       offset: 0 0;
-                               }
-                               rel2 {
-                                       relative: 1.0  1.0;
-                               }
-                       }
-                       description { state: "selected" 0.0;
-                               inherit: "default" 0.0;
-                               color: 70 143 254 255;
-                       }
-               }
-
-               part { name: "favicon_bg";
-                       clip_to: "disclip";
-                       type: IMAGE;
-                       description { state: "default" 0.0;
-                               fixed: 1 0;
-                               align: 0.0 0.0;
-                               min: 37 37;
-                               max: 37 37;
-                               rel1 {
-                                       to: "elm.thumbnail";
-                                       relative: 0.0  1.0;
-                                       offset: 25 25;
-                               }
-                               rel2 {
-                                       relative: 1.0  1.0;
-                               }
-                       //      image.normal: "ico_bg_round_shape_37x37.png";
-                       }
-               }
-
-               part { name: "favicon";
-                       clip_to: "disclip";
-                       type: SWALLOW;
-                       description { state: "default" 0.0;
-                               fixed: 1 0;
-                               align: 0.5 0.5;
-                               min: 37 37;
-                               max: 37 37;
-                               rel1.to: "favicon_bg";
-                               rel2.to: "favicon_bg";
-                       }
-               }
-
-               part { name: "elm.label";
-                       clip_to: "disclip";
-                       type: SWALLOW;
-                       description { state: "default" 0.0;
-                               min: 273 41;
-                               max: 273 41;
-                               align: 0.0 0.0;
-                               rel1 {
-                                       to: "favicon_bg";
-                                       relative: 1.0  0.0;
-                                       offset: 13 0;
-                               }
-                               rel2 {
-                                       relative: 1.0  1.0;
-                               }
-                       }
-               }
-
-               part { name: "delete_bg";
-                       clip_to: "disclip";
-                       type: RECT;
-                       description { state: "default" 0.0;
-                               min: 373 87;
-                               max: 373 87;
-                               align: 0.0 0.0;
-                               color: 70 143 254 204;
-                               rel1.to: "background";
-                               rel2.to: "background";
-                               visible: 0;
-                       }
-                       description { state: "over" 0.0;
-                               inherit: "default" 0.0;
-                               visible: 1;
-                       }
-               }
-
-               part { name: "disclip";
-                       type: RECT;
-                       description { state: "default" 0.0;
-                               rel1.to: "bg";
-                               rel2.to: "bg";
-                       }
-               }
-
-               part { name: "elm.deleteButton";
-                       clip_to: "disclip";
-                       type: SWALLOW;
-                       description { state: "default" 0.0;
-                               min: 373 87;
-                               max: 373 87;
-                               align: 0.0 0.0;
-                               rel1 {
-                                       to: "elm.thumbnail";
-                                       relative: 0.0  1.0;
-                                       offset: 0 0;
-                               }
-                               rel2 {
-                                       relative: 1.0  1.0;
-                               }
-                               visible: 1;
-                       }
-                       description { state: "over" 0.0;
-                               inherit: "default" 0.0;
-                               visible: 1;
-                       }
-               }
-
-               part { name: "elm.thumbButton";
-                       clip_to: "disclip";
-                       type: SWALLOW;
-                       description { state: "default" 0.0;
-                               rel1.to: "elm.thumbnail";
-                               rel2.to: "elm.thumbnail";
-                       }
-               }
-
-               part { name: "over2";
-                       type: RECT;
-                       mouse_events: 1;
-                       repeat_events: 1;
-                       description { state: "default" 0.0;
-                               color: 0 0 0 0;
-                               rel1.to: "bg";
-                               rel2.to: "background";
-                       }
-               }
-               part { name: "over3";
-                       type: RECT;
-                       mouse_events: 1;
-                       repeat_events: 1;
-                       description { state: "default" 0.0;
-                               color: 0 0 0 0;
-                               rel1.to: "background";
-                               rel2.to: "background";
-                       }
-               }
-       }
-
-       programs{
-               program { name: "mouse_in";
-                       signal: "mouse,in";
-                       source: "over2";
-                       action:  STATE_SET "selected" 0.0;
-                       target:  "background";
-                       target: "focus_highlight";
-                       target: "elm.thumbnail";
-               }
-               program { name: "mouse_out";
-                       signal: "mouse,out";
-                       source: "over2";
-                       action:  STATE_SET "default" 0.0;
-                       target:  "background";
-                       target: "focus_highlight";
-                       target: "elm.thumbnail";
-               }
-               program { name: "mouse_in_delete";
-                       signal: "mouse,in";
-                       source: "over3";
-                       action:  STATE_SET "over" 0.0;
-                       target:  "delete_bg";
-                       target: "elm.deleteButton";
-               }
-               program { name: "mouse_out_delete";
-                       signal: "mouse,out";
-                       source: "over3";
-                       action:  STATE_SET "default" 0.0;
-                       target:  "delete_bg";
-                       target: "elm.deleteButton";
-               }
-       }
-}
-}
diff --git a/services/BookmarksUI/images/ico_delete.png b/services/BookmarksUI/images/ico_delete.png
deleted file mode 100644 (file)
index 92f42cc..0000000
Binary files a/services/BookmarksUI/images/ico_delete.png and /dev/null differ
index 8952538..1d32393 100644 (file)
@@ -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)
index 7acc4b9..0a5dcf7 100644 (file)
@@ -1,8 +1,8 @@
 PROJECT(HistoryService)
 
 set(HistoryService_SOURCES
-       src/HistoryService.cpp
-       src/HistoryItem.cpp
+       HistoryService.cpp
+       HistoryItem.cpp
 )
 
 set(HistoryService_HEADERS
similarity index 92%
rename from services/HistoryService/src/HistoryItem.cpp
rename to services/HistoryService/HistoryItem.cpp
index ac61514..1d9ce89 100644 (file)
@@ -32,6 +32,7 @@ HistoryItem::HistoryItem(const std::string & url,
     : m_url(url)
     , m_title(title)
     , m_favIcon(image)
+    , m_lastVisit()
 {
 }
 
@@ -141,6 +142,17 @@ std::shared_ptr<tizen_browser::tools::BrowserImage> HistoryItem::getFavIcon()
     return m_favIcon;
 }
 
+void HistoryItem::setThumbnail(std::shared_ptr<tizen_browser::tools::BrowserImage> thumbnail)
+{
+    m_thumbnail = thumbnail;
+};
+
+std::shared_ptr<tizen_browser::tools::BrowserImage> HistoryItem::getThumbnail() const
+{
+
+    return m_thumbnail;
+};
+
 void HistoryItem::setUriFavicon(const std::string & uri) {
     m_urifavicon = uri;
 }
index 98049c0..1d1e7ab 100644 (file)
@@ -34,7 +34,9 @@ public:
                 std::shared_ptr<tizen_browser::tools::BrowserImage> 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<tizen_browser::tools::BrowserImage> favIcon);
+       void setThumbnail(std::shared_ptr<tizen_browser::tools::BrowserImage> thumbnail);
+        std::shared_ptr<tizen_browser::tools::BrowserImage> getThumbnail() const ;
+
+        void setFavIcon(std::shared_ptr<tizen_browser::tools::BrowserImage> favIcon);
        std::shared_ptr<tizen_browser::tools::BrowserImage> 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<tizen_browser::tools::BrowserImage> m_thumbnail;
     std::shared_ptr<tizen_browser::tools::BrowserImage> 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 (file)
index 0000000..f2ebbfb
--- /dev/null
@@ -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 <string>
+#include <BrowserAssert.h>
+#include <boost/date_time/posix_time/posix_time.hpp>
+#include <boost/date_time/date.hpp>
+#include <boost/date_time/date_defs.hpp>
+#include <boost/date_time/gregorian/gregorian.hpp>
+
+#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<tizen_browser::services::StorageService> 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<count;i++){
+        if (freq_arr[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<HistoryItem> history = std::make_shared<HistoryItem>(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<tizen_browser::tools::BrowserImage> hi = std::make_shared<tizen_browser::tools::BrowserImage>();
+        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<HistoryItem> his,std::shared_ptr<tizen_browser::tools::BrowserImage> 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<tizen_browser::tools::Blob> 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<tizen_browser::tools::BrowserImage> favicon = his->getFavIcon();
+    if (favicon) {
+       std::unique_ptr<tizen_browser::tools::Blob> 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<HistoryItem> 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<HistoryItem> history = std::make_shared<HistoryItem>(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<tizen_browser::tools::BrowserImage> hi = std::make_shared<tizen_browser::tools::BrowserImage>();
+        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);
+
+}
+
+}
+}
index 0e09cab..3f2c44e 100644 (file)
@@ -44,10 +44,12 @@ public:
     virtual std::string getName();
 
     int getHistoryId(const std::string & url);
+
     /**
      * @throws HistoryException on error
      */
-    void addHistoryItem(std::shared_ptr<HistoryItem> hi);
+    void addHistoryItem(std::shared_ptr<HistoryItem> hi,
+                        std::shared_ptr<tizen_browser::tools::BrowserImage> thumbnail=std::shared_ptr<tizen_browser::tools::BrowserImage>());
 
     /**
      * 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::signal<void (bool)>historyEmpty;
+    boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::HistoryItem>)> historyAdded;
+    boost::signals2::signal<void (const std::string& uri)> historyDeleted;
+    boost::signals2::signal<void ()> historyAllDeleted;
+
 private:
     bool m_testDbMod;;
     std::vector<std::shared_ptr<HistoryItem>> history_list;
diff --git a/services/HistoryService/src/HistoryService.cpp b/services/HistoryService/src/HistoryService.cpp
deleted file mode 100644 (file)
index 5aff218..0000000
+++ /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 <string>
-#include <BrowserAssert.h>
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/date_time/date.hpp>
-#include <boost/date_time/date_defs.hpp>
-#include <boost/date_time/gregorian/gregorian.hpp>
-
-#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<tizen_browser::services::StorageService> 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<HistoryItem> his){
-
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    his->setFavIcon(his->getFavIcon());
-    std::shared_ptr<tizen_browser::tools::BrowserImage> 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<tizen_browser::tools::Blob> 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<HistoryItem> 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<HistoryItem> history = std::make_shared<HistoryItem>(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);
-}
-
-}
-}
similarity index 62%
rename from services/BookmarksUI/CMakeLists.txt
rename to services/MainUI/CMakeLists.txt
index 1806b0f..fd1710f 100644 (file)
@@ -1,11 +1,11 @@
-project(BookmarksUI)
+project(MainUI)
 
-set(BookmarksUI_SRCS
-    BookmarksUI.cpp
+set(MainUI_SRCS
+    MainUI.cpp
     )
 
-set(BookmarksUI_HEADERS
-    BookmarksUI.h
+set(MainUI_HEADERS
+    MainUI.h
     )
 
 include(Coreheaders)
@@ -13,7 +13,7 @@ include(EFLHelpers)
 
 include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService)
 
-add_library(${PROJECT_NAME} SHARED ${BookmarksUI_SRCS})
+add_library(${PROJECT_NAME} SHARED ${MainUI_SRCS})
 
 if(TIZEN_BUILD)
     target_link_libraries(${PROJECT_NAME} ${pkgs_LDFLAGS})
@@ -24,6 +24,6 @@ install(TARGETS ${PROJECT_NAME}
             ARCHIVE DESTINATION services/static)
 
 include(EDCCompile)
-EDJ_TARGET(Bookmarks.edj
-    ${CMAKE_CURRENT_SOURCE_DIR}/edc/Bookmarks.edc
+EDJ_TARGET(MainUI.edj
+    ${CMAKE_CURRENT_SOURCE_DIR}/edc/MainUI.edc
     ${CMAKE_CURRENT_BINARY_DIR})
diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp
new file mode 100644 (file)
index 0000000..d45d22c
--- /dev/null
@@ -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 <Elementary.h>
+#include <boost/concept_check.hpp>
+#include <vector>
+#include <AbstractMainWindow.h>
+
+#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<tizen_browser::services::HistoryItem> item;
+        std::shared_ptr<tizen_browser::base_ui::MainUI> mainUI;
+} HistoryItemData;
+
+typedef struct _BookmarkItemData
+{
+        std::shared_ptr<tizen_browser::services::BookmarkItem> item;
+        std::shared_ptr<tizen_browser::base_ui::MainUI> 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<ItemData *>(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<ItemData *>(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<ItemData *>(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<tizen_browser::services::HistoryItem> 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<tizen_browser::base_ui::MainUI>(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<std::string,Elm_Object_Item*>(hi->getUrl(),historyView));
+
+    setEmptyGengrid(false);
+}
+
+void MainUI::addHistoryItems(std::vector<std::shared_ptr<tizen_browser::services::HistoryItem> > 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<tizen_browser::services::BookmarkItem> bi)
+{
+    BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
+    BookmarkItemData *itemData = new BookmarkItemData();
+    itemData->item = bi;
+        itemData->mainUI = std::shared_ptr<tizen_browser::base_ui::MainUI>(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<std::string,Elm_Object_Item*>(bi->getAddress(),bookmarkView));
+
+    // unselect by default
+    elm_gengrid_item_selected_set(bookmarkView, EINA_FALSE);
+
+    setEmptyGengrid(false);
+}
+
+void MainUI::addBookmarkItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > 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<HistoryItemData*>(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<BookmarkItemData*>(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<HistoryItemData*>(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<BookmarkItemData*>(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<Elm_Object_Item *>(event_info);
+       HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(elm_object_item_data_get(selected));
+       MainUI * self = reinterpret_cast<MainUI *>(data);
+
+       self->historyClicked(itemData->item);
+}
+
+void MainUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */)
+{
+       HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(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<Elm_Object_Item*>(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<Elm_Object_Item*>(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 (file)
index 0000000..c0beb25
--- /dev/null
@@ -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 <Evas.h>
+#include <boost/signals2/signal.hpp>
+
+#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<tizen_browser::services::HistoryItem>);
+    void addHistoryItems(std::vector<std::shared_ptr<tizen_browser::services::HistoryItem> >);
+    void addBookmarkItem(std::shared_ptr<tizen_browser::services::BookmarkItem>);
+    void addBookmarkItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> >);
+
+    boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::HistoryItem>)> historyClicked;
+    boost::signals2::signal<void (const std::string & )> mostVisitedClicked;
+    boost::signals2::signal<void (const std::string & )> bookmarkClicked;
+    boost::signals2::signal<void (const std::string & )> 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<std::string,Elm_Object_Item*> m_map_history_views;
+    std::map<std::string,Elm_Object_Item*> 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 (file)
index 0000000..8357ec7
--- /dev/null
@@ -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";
+            }
+        }
+    }
+}
similarity index 91%
rename from services/BookmarksUI/images/ico_bg_round_shape_37x37.png
rename to services/MainUI/images/web_shadow.png
index 00182ed..f9018b0 100644 (file)
Binary files a/services/BookmarksUI/images/ico_bg_round_shape_37x37.png and b/services/MainUI/images/web_shadow.png differ
index e7cc333..4fc5fbc 100644 (file)
@@ -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<Ecore_Event_Key *>(event);
diff --git a/services/SimpleUI/BookmarksManager.cpp b/services/SimpleUI/BookmarksManager.cpp
new file mode 100644 (file)
index 0000000..8d82016
--- /dev/null
@@ -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 <memory>
+#include <string>
+#include <iostream>
+#include <Eina.h>
+#include <Evas.h>
+#include "BrowserLogger.h"
+
+namespace tizen_browser
+{
+namespace base_ui
+{
+
+BookmarksManagerItem::BookmarksManagerItem()
+    : action(std::make_shared<Action>())
+{
+
+}
+BookmarksManagerItem::BookmarksManagerItem( std::shared_ptr<Action> 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<BookmarksManagerItem> bookmarks_managerItem = std::make_shared<BookmarksManagerItem>(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<BookmarksManagerItem*>(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<BookmarksManagerItem*>(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<BookmarksManager*>(data);
+    Elm_Object_Item* elmItem = reinterpret_cast<Elm_Object_Item*>(event_info);
+    BROWSER_LOGD("[%s:%d] \n\t %x", __PRETTY_FUNCTION__, __LINE__, elmItem);
+    if(bookmarks_manager->m_bookmarks_managerItemsMap.count(elmItem)){
+        std::shared_ptr<BookmarksManagerItem> 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<int*>(&m_checkState));
+
+    elm_radio_state_value_set(radioOff, CheckStateOff);//false
+    elm_radio_value_pointer_set(radioOff, reinterpret_cast<int*>(&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<BookmarksManager*>(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<BookmarksManager*>(data);
+    std::shared_ptr<BookmarksManagerItem> 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<Elm_Object_Item*>(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<Elm_Object_Item*>(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 (file)
index 0000000..b2dbde0
--- /dev/null
@@ -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 <Evas.h>
+#include <Elementary.h>
+#include <string>
+#include <list>
+#include <map>
+#include <memory>
+#include <ostream>
+#include <deque>
+
+#include "Action.h"
+#include "MenuButton.h"
+
+namespace tizen_browser
+{
+namespace base_ui
+{
+
+struct BookmarksManagerItem{
+    std::shared_ptr<Action> action;
+    BookmarksManagerItem();
+    BookmarksManagerItem(std::shared_ptr<Action> 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<Elm_Object_Item*, std::shared_ptr<BookmarksManagerItem>> m_bookmarks_managerItemsMap;
+    std::map<sharedAction, Elm_Object_Item*> 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
index 4053a76..bc3292c 100644 (file)
@@ -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
index 60623a6..508ae8f 100644 (file)
 #include "EflTools.h"
 #include <Evas.h>
 
+#if MERGE_ME
+#include <boost/date_time/posix_time/posix_time.hpp>
+#include <boost/date_time/date.hpp>
+#include <boost/date_time/date_defs.hpp>
+#include <boost/date_time/gregorian/gregorian.hpp>
+#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("");
 }
 
index 363e905..57e2898 100644 (file)
@@ -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;
index ef0d403..381088f 100644 (file)
@@ -17,7 +17,6 @@
 #include "browser_config.h"
 
 #if defined(USE_EWEBKIT)
-//#include <EWebKit2.h>
 #include <ewk_chromium.h>
 #endif
 
 #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<int>(NULL), static_cast<char**>(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<std::shared_ptr<tizen_browser::services::BookmarkItem> > SimpleUI::getBookmarks()
+std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > SimpleUI::getBookmarks(int folder_id)
+{
+    return m_favoriteService->getBookmarks(folder_id);
+}
+
+std::vector<std::shared_ptr<tizen_browser::services::HistoryItem> > SimpleUI::getHistory()
 {
-    return m_favoriteService->getBookmarks();
+    return m_historyService->getMostVisitedHistoryItems();
 }
 
+
+std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > 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 <int> (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::base_ui::BookmarksUI,tizen_browser::core::AbstractService>
-                (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::interfaces::AbstractFavoriteService,tizen_browser::core::AbstractService>
                 (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<ButtonBar>(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<ButtonBar>(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<WebTitleBar>(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<Evas_Object>::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<Evas_Object>::forward, m_webEngine.get()));
     m_stopLoading->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::stopLoading, m_webEngine.get()));
     m_reload->triggered.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::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<tizen_browser::services::BookmarkItem> 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<tizen_browser::services::HistoryItem> 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<tizen_browser::services::HistoryItem> 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<tizen_browser::services::BookmarkItem> bookmarkItem)
@@ -593,12 +636,18 @@ void SimpleUI::onBookmarkDeleteClicked(std::shared_ptr<tizen_browser::services::
 
 void SimpleUI::onBookmarkRemoved(const std::string& uri)
 {
+#if 0
     BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str());
-    m_bookmarksUI->removeBookmarkItem(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<tizen_browser::services::HistoryItem> (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_type> (zoom_level);
 }
-void SimpleUI::showTabMenu()
-{
-    if( !m_tabList ){
-        BROWSER_LOGD("[%s:%d] - make_shared ", __PRETTY_FUNCTION__, __LINE__);
-        m_tabList = std::make_shared<tizen_browser::base_ui::TabList>(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<BookmarksManager>(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::base_ui::TabUI,tizen_browser::core::AbstractService>
+                (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_ptr<Popup
     }
 }
 
-void SimpleUI::showSettingsMenu()
+#if 0
+void SimpleUI::hideURIBar()
+{
+    evas_object_hide(m_simpleURI->getContent(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<Settings>(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::base_ui::MainUI,tizen_browser::core::AbstractService>
+                (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::base_ui::HistoryUI,tizen_browser::core::AbstractService>
+                (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::base_ui::SettingsUI,tizen_browser::core::AbstractService>
+                (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::base_ui::MoreMenuUI,tizen_browser::core::AbstractService>
+                (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<HistoryList>(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::base_ui::BookmarkManagerUI,tizen_browser::core::AbstractService>
+                (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<EntryPopupData> popupData = std::make_shared<EntryPopupData>();
+    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<EntryPopupData>(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)
index 5c5f736..d106d49 100644 (file)
@@ -26,9 +26,6 @@
 
 #include <Evas.h>
 
-//#include <EWebKit2.h>
-//#include <ewk_chromium.h>
-
 #include "AbstractMainWindow.h"
 #include "AbstractService.h"
 #include "AbstractFavoriteService.h"
 
 // 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<Evas_Object>::setMainWindow(Evas_Object * rawPtr)
     m_window = std::shared_ptr<Evas_Object>(rawPtr, evas_object_del);
 }
 
-
-
 class BROWSER_EXPORT SimpleUI : public AbstractMainWindow<Evas_Object>
 {
 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<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarks();
+    std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarks(int folder_id = 0);
+    std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarkFolders();
+    std::vector<std::shared_ptr<tizen_browser::services::HistoryItem> > getHistory();
     void onBookmarkAdded(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
+
     void onBookmarkClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
     void onBookmarkDeleteClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
     void onBookmarkRemoved(const std::string& uri);
 
+    void onHistoryAdded(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem);
+    void onHistoryRemoved(const std::string& uri);
+    void onHistoryClicked(std::shared_ptr<tizen_browser::services::HistoryItem> 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> 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> 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> popupData);
+    void onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
+    void onResetBrowserButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
     void onDeleteDataButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
     void onDeleteFavoriteButton(PopupButtons button, std::shared_ptr<PopupData> 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<basic_webengine::AbstractWebEngine<Evas_Object>>  m_webEngine;
     std::shared_ptr<tizen_browser::base_ui::SimpleURI> m_simpleURI;
     std::shared_ptr<ButtonBar> leftButtonBar;
+    std::shared_ptr<ButtonBar> webviewbar;
+
     std::shared_ptr<ButtonBar> rightButtonBar;
     std::shared_ptr<tizen_browser::interfaces::AbstractFavoriteService> m_favoriteService;
     std::shared_ptr<tizen_browser::services::HistoryService> m_historyService;
-    std::shared_ptr<tizen_browser::base_ui::BookmarksUI> m_bookmarksUI;
+#if MERGE_ME
+    std::shared_ptr<tizen_browser::base_ui::MoreMenuUI> m_moreMenuUI;
+    std::shared_ptr<tizen_browser::base_ui::BookmarkManagerUI> m_bookmarkManagerUI;
+#endif
+    std::shared_ptr<tizen_browser::base_ui::MainUI> m_mainUI;
+#if MERGE_ME
+    std::shared_ptr<tizen_browser::base_ui::HistoryUI> m_historyUI;
+    std::shared_ptr<tizen_browser::base_ui::SettingsUI> m_settingsUI;
+    std::shared_ptr<tizen_browser::base_ui::TabUI> m_tabUI;
+#endif
     std::shared_ptr<tizen_browser::base_ui::ZoomList> m_zoomList;
     std::shared_ptr<tizen_browser::base_ui::TabList> m_tabList;
     std::shared_ptr<tizen_browser::services::PlatformInputManager> m_platformInputManager;
     std::shared_ptr<tizen_browser::services::SessionStorage> m_sessionService;
     tizen_browser::Session::Session m_currentSession;
+    std::shared_ptr<BookmarksManager> m_bookmarks_manager;
     std::shared_ptr<Settings> m_settings;
     std::shared_ptr<HistoryList> m_historyList;
     std::shared_ptr<WebTitleBar> 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 (file)
index 0000000..0b6e9b9
--- /dev/null
@@ -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
index 7491c3d..5de8ab2 100644 (file)
@@ -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;
-                }
-            }
-
         }
     }
 }
index 3e70303..aedfdbd 100644 (file)
@@ -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 {
         }
     }
 }
+}
index 0c5aed8..164289e 100644 (file)
@@ -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 (file)
index 0000000..0602899
--- /dev/null
@@ -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 (file)
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 (file)
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 (file)
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 (file)
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 (file)
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 (file)
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 (file)
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 (file)
index 0000000..64488c3
Binary files /dev/null and b/services/SimpleUI/images/btn_bar_vertical_settings.png differ
index 684ad2a..1ec64f6 100644 (file)
@@ -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
+}
index e539a90..5d8f076 100644 (file)
@@ -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<tizen_browser::tools::BrowserImage> 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<tizen_browser::tools::BrowserImage>();
+
 }
 
 std::shared_ptr<tizen_browser::tools::BrowserImage> WebKitEngineService::getSnapshotData(TabId id, int width, int height){
@@ -443,7 +453,10 @@ bool WebKitEngineService::hasFocus() const
 std::shared_ptr<tizen_browser::tools::BrowserImage> WebKitEngineService::getFavicon()
 {
     M_ASSERT(m_currentWebView);
-    return m_currentWebView->getFavicon();
+    if(m_currentWebView)
+        return m_currentWebView->getFavicon();
+    else
+        return std::make_shared<tizen_browser::tools::BrowserImage>();
 }
 
 void WebKitEngineService::webViewClicked()
@@ -470,8 +483,7 @@ void WebKitEngineService::setZoomFactor(int zoomFactor)
 void WebKitEngineService::clearPrivateData()
 {
     for(std::map<TabId, WebViewPtr>::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();
index 75ea343..7751826 100644 (file)
@@ -24,7 +24,6 @@
 #include "WebView.h"
 
 #if defined(USE_EWEBKIT)
-//#include <EWebKit2.h>
 #include <ewk_chromium.h>
 #endif
 
 #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<tizen_browser::tools::BrowserImage> WebView::captureSnapshot(int
     M_ASSERT(targetHeight);
     Evas_Coord vw, vh;
     std::shared_ptr<tizen_browser::tools::BrowserImage> noImage = std::make_shared<tizen_browser::tools::BrowserImage>();
-    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<tizen_browser::tools::BrowserImage> 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);