Task TT-78 Implement Tab Manager view 60/45260/2
authork.lis2 <k.lis2@samsung.com>
Tue, 4 Aug 2015 08:27:40 +0000 (10:27 +0200)
committerk.lis2 <k.lis2@samsung.com>
Tue, 4 Aug 2015 08:27:40 +0000 (10:27 +0200)
    [Issue#]   https://bugs.tizen.org/jira/browse/TT-78
    [Problem]  Task TT-78 Implement Tab Manager view
    [Cause]    -
    [Solution] Add TabUI. Enable code referring to TabUI in SimpleUI.
    [Verify]   Perform basic sanity check.

Change-Id: I3745297ce0e82320ccd32d0897ac3d3716574fbc

20 files changed:
services/BookmarkService/BookmarkService.cpp
services/CMakeLists.txt
services/SimpleUI/CMakeLists.txt
services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h
services/TabUI/CMakeLists.txt [new file with mode: 0644]
services/TabUI/TabUI.cpp [new file with mode: 0644]
services/TabUI/TabUI.h [new file with mode: 0644]
services/TabUI/edc/TabUI.edc [new file with mode: 0644]
services/TabUI/edc/error.edc [new file with mode: 0644]
services/TabUI/images/btn_bar_incognito_dis.png [new file with mode: 0644]
services/TabUI/images/btn_bar_incognito_foc.png [new file with mode: 0644]
services/TabUI/images/btn_bar_incognito_nor.png [new file with mode: 0644]
services/TabUI/images/btn_bar_new_dis.png [new file with mode: 0644]
services/TabUI/images/btn_bar_new_foc.png [new file with mode: 0644]
services/TabUI/images/btn_bar_new_nor.png [new file with mode: 0644]
services/TabUI/images/btn_bar_stop_nor.png [new file with mode: 0644]
services/TabUI/images/ico_delete.png [new file with mode: 0644]
services/TabUI/images/web_frame_selected.png [new file with mode: 0644]
services/TabUI/images/web_shadow.png [new file with mode: 0644]

index a1ffdaee4888cc6aa95a25a9f5f3576c48435edc..7e30362e142062c40bb187b4b38a41eaa2d5873e 100644 (file)
@@ -207,8 +207,9 @@ std::vector<std::shared_ptr<BookmarkItem> > BookmarkService::getBookmarks(int fo
     {
         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(""),(int) bookmark_info.parent, ids[i]);
+        std::string url = (bookmark_info.url != nullptr) ? bookmark_info.url : "";
+        std::string title = (bookmark_info.title != nullptr) ? bookmark_info.title : "";
+        std::shared_ptr<BookmarkItem> bookmark = std::make_shared<BookmarkItem>(url, 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;
index 1d3239382bbdee41e606c1122aac883f65c0b449..547901f1d791c3f18fb6e3a1787d27a62b3d9c9a 100644 (file)
@@ -6,7 +6,7 @@ add_subdirectory(WebKitEngineService)
 add_subdirectory(MainUI)
 # MERGE_ME
 #add_subdirectory(HistoryUI)
-#add_subdirectory(TabUI)
+add_subdirectory(TabUI)
 add_subdirectory(SimpleUI)
 #MERGE_ME
 #add_subdirectory(SettingsUI)
index bc3292c0727a9594aa6c93d93374ddaadb0650e6..62578b1cac035e1525165603f14a7d2e13b5d20b 100644 (file)
@@ -54,7 +54,7 @@ include_directories(${CMAKE_SOURCE_DIR}/services/MoreMenuUI)
 include_directories(${CMAKE_SOURCE_DIR}/services/MainUI)
 #MERGE_ME
 #include_directories(${CMAKE_SOURCE_DIR}/services/SettingsUI)
-#include_directories(${CMAKE_SOURCE_DIR}/services/TabUI)
+include_directories(${CMAKE_SOURCE_DIR}/services/TabUI)
 include_directories(${CMAKE_SOURCE_DIR}/services/PlatformInputManager)
 include_directories(${CMAKE_SOURCE_DIR}/services/SessionStorage)
 
@@ -74,7 +74,7 @@ add_dependencies(${PROJECT_NAME} MainUI)
 #MERGE_ME
 #add_dependencies(${PROJECT_NAME} HistoryUI)
 #add_dependencies(${PROJECT_NAME} SettingsUI)
-#add_dependencies(${PROJECT_NAME} TabUI)
+add_dependencies(${PROJECT_NAME} TabUI)
 add_dependencies(${PROJECT_NAME} PlatformInputManager)
 add_dependencies(${PROJECT_NAME} SessionStorage)
 target_link_libraries(${PROJECT_NAME} SimpleURI)
@@ -86,7 +86,8 @@ target_link_libraries(${PROJECT_NAME} MainUI)
 #MERGE_ME
 #target_link_libraries(${PROJECT_NAME} HistoryUI)
 #target_link_libraries(${PROJECT_NAME} SettingsUI)
-#target_link_libraries(${PROJECT_NAME} TabUI)
+target_link_libraries(${PROJECT_NAME} TabUI)
+#MERGE_ME
 #target_link_libraries(${PROJECT_NAME} BookmarkManagerUI)
 target_link_libraries(${PROJECT_NAME} PlatformInputManager)
 target_link_libraries(${PROJECT_NAME} SessionStorage)
index 381088fc3d7ca32f9c476b059bae32ae77a335bb..edf05bd94608c8a6967b015bfc5e74d7fad27d2f 100644 (file)
@@ -65,7 +65,9 @@ SimpleUI::SimpleUI()
 #if MERGE_ME
     , m_settings()
     , m_moreMenuUI()
+#endif
     , m_tabUI()
+#if MERGE_ME
     , m_bookmarkManagerUI()
 #endif
     , m_mainUI()
@@ -891,28 +893,22 @@ void SimpleUI::AddNewFolderPopup(std::string& str)
 
 void SimpleUI::showTabUI()
 {
-#if MERGE_ME
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-        m_tabUI =
-                std::dynamic_pointer_cast
-                <tizen_browser::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
+    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());
 }
 
 void SimpleUI::closeTabUI(const std::string& str)
 {
-#if MERGE_ME
-        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-        m_tabUI = nullptr;
-#endif
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    m_tabUI = nullptr;
 }
 
 void SimpleUI::newTabClicked(const std::string& str)
index d106d49fc08643f86ed072c17b81c29b497a06a6..ea7220c91be4b42385b12edb3d213899d724e30d 100644 (file)
@@ -41,9 +41,7 @@
 #include "SettingsUI.h"
 #endif
 #include "MainUI.h"
-#if MERGE_ME
 #include "TabUI.h"
-#endif
 #include "ButtonBar.h"
 #include "HistoryService.h"
 #if MERGE_ME
@@ -305,8 +303,8 @@ private:
 #if MERGE_ME
     std::shared_ptr<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::TabUI> m_tabUI;
     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;
diff --git a/services/TabUI/CMakeLists.txt b/services/TabUI/CMakeLists.txt
new file mode 100644 (file)
index 0000000..570381c
--- /dev/null
@@ -0,0 +1,29 @@
+project(TabUI)
+
+set(TabUI_SRCS
+    TabUI.cpp
+    )
+
+set(TabUI_HEADERS
+    TabUI.h
+    )
+
+include(Coreheaders)
+include(EFLHelpers)
+
+include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService)
+
+add_library(${PROJECT_NAME} SHARED ${TabUI_SRCS})
+
+if(TIZEN_BUILD)
+    target_link_libraries(${PROJECT_NAME} ${pkgs_LDFLAGS})
+endif(TIZEN_BUILD)
+
+install(TARGETS ${PROJECT_NAME}
+            LIBRARY DESTINATION services
+            ARCHIVE DESTINATION services/static)
+
+include(EDCCompile)
+EDJ_TARGET(TabUI.edj
+    ${CMAKE_CURRENT_SOURCE_DIR}/edc/TabUI.edc
+    ${CMAKE_CURRENT_BINARY_DIR})
diff --git a/services/TabUI/TabUI.cpp b/services/TabUI/TabUI.cpp
new file mode 100644 (file)
index 0000000..5646f26
--- /dev/null
@@ -0,0 +1,500 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Elementary.h>
+#include <boost/concept_check.hpp>
+#include <vector>
+#include <AbstractMainWindow.h>
+
+#include "TabUI.h"
+#include "ServiceManager.h"
+#include "BrowserLogger.h"
+#include "Tools/EflTools.h"
+#include "../Tools/BrowserImage.h"
+
+#define efl_scale       (elm_config_scale_get() / elm_app_base_scale_get())
+
+namespace tizen_browser{
+namespace base_ui{
+
+EXPORT_SERVICE(TabUI, "org.tizen.browser.tabui")
+
+typedef struct _TabItemData
+{
+       std::shared_ptr<tizen_browser::basic_webengine::TabContent> item;
+        std::shared_ptr<tizen_browser::base_ui::TabUI> tabUI;
+} TabItemData;
+
+struct ItemData{
+        tizen_browser::base_ui::TabUI* tabUI;
+        Elm_Object_Item * e_item;
+};
+
+TabUI::TabUI()
+    : m_gengrid(NULL)
+    , m_tab_layout(NULL)
+    , m_genListTop(NULL)
+    , m_genListActionBar(NULL)
+    , m_parent(NULL)
+    , m_itemClassActionBar(NULL)
+    , m_itemClassTop(NULL)
+    , m_item_class(NULL)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    edjFilePath = EDJE_DIR;
+    edjFilePath.append("TabUI/TabUI.edj");
+}
+
+TabUI::~TabUI()
+{
+
+}
+
+void TabUI::show(Evas_Object* parent)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    //m_parent = p;
+    elm_theme_extension_add(NULL, edjFilePath.c_str());
+    m_tab_layout = elm_layout_add(parent);
+    elm_layout_file_set(m_tab_layout, edjFilePath.c_str(), "tab-layout");
+    evas_object_size_hint_weight_set(m_tab_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(m_tab_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    evas_object_show(m_tab_layout);
+
+    showActionBar();
+    showTopButtons();
+
+    m_gengrid = elm_gengrid_add(m_tab_layout);
+    elm_object_part_content_set(m_tab_layout, "tab_gengird", m_gengrid);
+
+    evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, NULL);
+    evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, NULL);
+    evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this);
+
+      if (!m_item_class) {
+            m_item_class = elm_gengrid_item_class_new();
+            m_item_class->item_style = "tab_item";
+            m_item_class->func.text_get = _grid_text_get;
+            m_item_class->func.content_get =  _tab_grid_content_get;
+            m_item_class->func.state_get = NULL;
+            m_item_class->func.del = NULL;
+        }
+    
+    M_ASSERT(m_parent);
+        elm_gengrid_align_set(m_gengrid, 0, 0);
+        elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS);
+        elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE);
+        elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE);
+        elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE);
+        elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+        elm_scroller_page_size_set(m_gengrid, 0, 327);
+
+        evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+        evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+    elm_gengrid_item_size_set(m_gengrid, 364 * efl_scale, 320 * efl_scale);
+}
+
+
+void TabUI::showActionBar()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    elm_theme_extension_add(NULL, edjFilePath.c_str());
+    m_genListActionBar = elm_genlist_add(m_tab_layout);
+    elm_object_part_content_set(m_tab_layout, "action_bar_genlist", m_genListActionBar);
+    elm_genlist_homogeneous_set(m_genListActionBar, EINA_FALSE);
+    elm_genlist_multi_select_set(m_genListActionBar, EINA_FALSE);
+    elm_genlist_select_mode_set(m_genListActionBar, ELM_OBJECT_SELECT_MODE_ALWAYS);
+    elm_genlist_mode_set(m_genListActionBar, ELM_LIST_LIMIT);
+    elm_genlist_decorate_mode_set(m_genListActionBar, EINA_TRUE);
+    evas_object_size_hint_weight_set(m_genListActionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+  //  evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this);
+   // evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, NULL);*/
+
+    m_itemClassActionBar = elm_genlist_item_class_new();
+    m_itemClassActionBar->item_style = "action_bar_items";
+    m_itemClassActionBar->func.text_get = NULL; // &listTopItemTextGet;
+    m_itemClassActionBar->func.content_get = &listActionBarContentGet;
+    m_itemClassActionBar->func.state_get = 0;
+    m_itemClassActionBar->func.del = 0;
+
+    ItemData * id = new ItemData;
+    id->tabUI = this;
+    Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListActionBar,            //genlist
+                                                       m_itemClassActionBar,          //item Class
+                                                      id,
+                                                      NULL,                    //parent item
+                                                      ELM_GENLIST_ITEM_NONE,//item type
+                                                      NULL,
+                                                      NULL                  //data passed to above function
+                                                     );
+    id->e_item = elmItem;
+    ItemData * id2 = new ItemData;
+    id2->tabUI = this;
+    Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListActionBar,            //genlist
+                                                       m_itemClassActionBar,          //item Class
+                                                      id2,
+                                                      NULL,                    //parent item
+                                                      ELM_GENLIST_ITEM_NONE,//item type
+                                                      NULL,
+                                                      NULL                  //data passed to above function
+                                                     );
+    id2->e_item = elmItem2;
+
+    ItemData * id3 = new ItemData;
+    id3->tabUI = this;
+    Elm_Object_Item* elmItem3 = elm_genlist_item_append(m_genListActionBar,            //genlist
+                                                       m_itemClassActionBar,          //item Class
+                                                      id3,
+                                                      NULL,                    //parent item
+                                                      ELM_GENLIST_ITEM_NONE,//item type
+                                                      NULL,
+                                                      NULL                  //data passed to above function
+                                                     );
+    id3->e_item = elmItem3;
+
+    /*ItemData * id4 = new ItemData;
+    id4->tabUI = this;
+    Elm_Object_Item* elmItem4 = elm_genlist_item_append(m_genListActionBar,            //genlist
+                                                       m_itemClassActionBar,          //item Class
+                                                      //id.get(),        //item data
+                                                      id4,
+                                                      NULL,                    //parent item
+                                                      ELM_GENLIST_ITEM_NONE,//item type
+                                                      NULL,
+                                                      NULL                  //data passed to above function
+                                                     );
+    id4->e_item = elmItem4;*/
+
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+}
+
+Evas_Object* TabUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part)
+{
+        //ItemData *itemData = reinterpret_cast<ItemData*>(data);
+        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+        if(!strcmp(part, "newtab_click"))
+        {
+                BROWSER_LOGD("############in new tab button part##################");
+                Evas_Object *newtabButton = elm_button_add(obj);
+                elm_object_style_set(newtabButton, "tab_button");
+                evas_object_smart_callback_add(newtabButton, "clicked", tizen_browser::base_ui::TabUI::_newtab_clicked, data);
+                return newtabButton;
+        }
+        else if(!strcmp(part, "newincognitotab_click"))
+        {
+                Evas_Object *newincognitotabButton = elm_button_add(obj);
+                elm_object_style_set(newincognitotabButton, "tab_button");
+                evas_object_smart_callback_add(newincognitotabButton, "clicked", tizen_browser::base_ui::TabUI::_newincognitotab_clicked, data);
+                return newincognitotabButton;
+        }
+        else if(!strcmp(part, "closetabs_click"))
+        {
+                Evas_Object *closetabsButton = elm_button_add(obj);
+                elm_object_style_set(closetabsButton, "tab_button");
+                evas_object_smart_callback_add(closetabsButton, "clicked", tizen_browser::base_ui::TabUI::_closetabs_clicked, data);
+                return closetabsButton;
+        }
+        else if(!strcmp(part, "close_click"))
+       {
+               Evas_Object *close_click = elm_button_add(obj);
+               elm_object_style_set(close_click, "tab_button");
+               evas_object_smart_callback_add(close_click, "clicked", TabUI::close_clicked_cb, data);
+               return close_click;
+       }
+        return NULL;
+}
+
+void TabUI::close_clicked_cb(void* data, Evas_Object* /* obj */, void* /* event_info */)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    ItemData * id = static_cast<ItemData *>(data);
+    id->tabUI->closeTabUIClicked(std::string());
+    id->tabUI->clearItems();
+}
+
+void TabUI::hide()
+{
+        evas_object_hide(elm_layout_content_get(m_tab_layout, "action_bar_genlist"));
+        evas_object_hide(elm_layout_content_get(m_tab_layout, "top_bar_genlist"));
+        evas_object_hide(elm_layout_content_get(m_tab_layout, "tab_gengird"));
+        evas_object_hide(m_tab_layout);
+}
+
+void TabUI::showTopButtons()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    elm_theme_extension_add(NULL, edjFilePath.c_str());
+    m_genListTop = elm_genlist_add(m_tab_layout);
+    elm_object_part_content_set(m_tab_layout, "top_bar_genlist", m_genListTop);
+    elm_genlist_homogeneous_set(m_genListTop, EINA_FALSE);
+    elm_genlist_multi_select_set(m_genListTop, EINA_FALSE);
+    elm_genlist_select_mode_set(m_genListTop, ELM_OBJECT_SELECT_MODE_ALWAYS);
+    elm_genlist_mode_set(m_genListTop, ELM_LIST_LIMIT);
+    elm_genlist_decorate_mode_set(m_genListTop, EINA_TRUE);
+    evas_object_size_hint_weight_set(m_genListTop, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+    /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this);
+    evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, NULL);*/
+
+    m_itemClassTop = elm_genlist_item_class_new();
+    m_itemClassTop->item_style = "top_buttons";
+    m_itemClassTop->func.text_get = NULL;// &listTapTopItemTextGet;
+    m_itemClassTop->func.content_get = &listTopButtonItemsContentGet;
+    m_itemClassTop->func.state_get = 0;
+    m_itemClassTop->func.del = 0;
+
+    ItemData * id = new ItemData;
+    id->tabUI = this;
+    Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListTop,            //genlist
+                                                       m_itemClassTop,          //item Class
+                                                      id,
+                                                      NULL,                    //parent item
+                                                      ELM_GENLIST_ITEM_NONE,//item type
+                                                      NULL,
+                                                      NULL                  //data passed to above function
+                                                     );
+    id->e_item = elmItem;
+    ItemData * id2 = new ItemData;
+    id2->tabUI = this;
+    Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListTop,            //genlist
+                                                       m_itemClassTop,          //item Class
+                                                      id2,
+                                                      NULL,                    //parent item
+                                                      ELM_GENLIST_ITEM_NONE,//item type
+                                                      NULL,
+                                                      NULL                  //data passed to above function
+                                                     );
+    id2->e_item = elmItem2;
+
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+}
+
+Evas_Object* TabUI::listTopButtonItemsContentGet(void* data, Evas_Object* obj , const char* part)
+{
+        //ItemData *itemData = reinterpret_cast<ItemData*>(data);
+        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+        if(!strcmp(part, "openedtabs_button"))
+        {
+                Evas_Object *openedtabsButton = elm_button_add(obj);
+                elm_object_style_set(openedtabsButton, "tab_button");
+                evas_object_smart_callback_add(openedtabsButton, "clicked", tizen_browser::base_ui::TabUI::_openedtabs_clicked, data);
+                return openedtabsButton;
+        }
+        else if(!strcmp(part, "onotherdevices_button"))
+        {
+               Evas_Object *onotherdevicesButton = elm_button_add(obj);
+                elm_object_style_set(onotherdevicesButton, "tab_button");
+                evas_object_smart_callback_add(onotherdevicesButton, "clicked", tizen_browser::base_ui::TabUI::_onotherdevices_clicked, data);
+               return onotherdevicesButton;
+       }
+        return NULL;
+}
+
+void TabUI::_newtab_clicked(void * data, Evas_Object * /* obj */, void * event_info)
+{
+        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+       ItemData* itemData = reinterpret_cast<ItemData *>(data);
+       itemData->tabUI->clearItems();
+       itemData->tabUI->newTabClicked(std::string());
+
+}
+void TabUI::_openedtabs_clicked(void * data, Evas_Object * /* obj */, void * event_info)
+{
+        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+        /*ItemData* itemData = reinterpret_cast<ItemData *>(data);
+        itemData->tabUI->newTabClicked(std::string());*/
+}
+
+void TabUI::_onotherdevices_clicked(void * data, Evas_Object * /* obj */, void * event_info)
+{
+        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+        /*ItemData* itemData = reinterpret_cast<ItemData *>(data);
+        itemData->tabUI->newTabClicked(std::string());*/
+}
+
+void TabUI::_newincognitotab_clicked(void * data, Evas_Object * /* obj */, void * event_info)
+{
+        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+       ItemData* itemData = reinterpret_cast<ItemData *>(data);
+       itemData->tabUI->clearItems();
+       itemData->tabUI->newIncognitoTabClicked(std::string());
+}
+
+void TabUI::_closetabs_clicked(void * data, Evas_Object * /* obj */, void * event_info)
+{
+        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+        ItemData* itemData = reinterpret_cast<ItemData *>(data);
+        itemData->tabUI->closeTabsClicked(std::string());
+}
+
+/*
+char* TabUI::listItemTopTextGet(void* data, Evas_Object* obj , const char* part)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    ItemData * id = static_cast<ItemData *>(data);
+    if(!strcmp(part, "Tabmanager"))
+    {
+        if(!id->h_item->getTitle().empty()){
+            return strdup(id->h_item->getTitle().c_str());
+        }
+    }
+    else if(!strcmp(part, "tab_url"))
+        {
+        if(!id->h_item->getUrl().empty()){
+            return strdup(id->h_item->getUrl().c_str());
+        }
+    }
+    return strdup("");
+}
+*/
+
+void TabUI::addTabItem(std::shared_ptr<tizen_browser::basic_webengine::TabContent> hi)
+{
+    BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
+    if (m_map_tab_views.size() >= 10)
+       return;
+    TabItemData *itemData = new TabItemData();
+    itemData->item = hi;
+        itemData->tabUI = std::shared_ptr<tizen_browser::base_ui::TabUI>(this);
+    Elm_Object_Item* tabView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, NULL, this);
+    m_map_tab_views.insert(std::pair<std::string,Elm_Object_Item*>(hi->getTitle(),tabView));
+
+    // unselect by default
+    elm_gengrid_item_selected_set(tabView, EINA_FALSE);
+    setEmptyGengrid(false);
+}
+
+void TabUI::addTabItems(std::vector<std::shared_ptr<tizen_browser::basic_webengine::TabContent>>items)
+{
+         BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
+        int i = 0;
+         for (auto it = items.begin(); it != items.end(); ++it) {
+                i++;
+                if (i > 10) break;
+                 addTabItem(*it);
+         }
+}
+
+
+char* TabUI::_grid_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       TabItemData *itemData = reinterpret_cast<TabItemData*>(data);
+       if (!strcmp(part, "tab_title")) {
+               return strdup(itemData->item->getTitle().c_str());
+       }
+       if (!strcmp(part, "tab_url")) {
+               //return strdup(itemData->item->getUrl().c_str());
+               return strdup("");
+       }
+
+       return strdup("");
+}      
+
+Evas_Object * TabUI::_tab_grid_content_get(void *data, Evas_Object *obj, const char *part)
+{
+
+    BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part);
+    TabItemData *itemData = reinterpret_cast<TabItemData*>(data);
+
+    if (!strcmp(part, "tab_thumbnail")) {
+       if (itemData->item->getThumbnail()) {
+                Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->tabUI->m_parent);
+                return thumb;
+        }
+        else {
+                return NULL;
+        }
+    }
+    else if (!strcmp(part, "tab_thumbButton")) {
+               Evas_Object *thumbButton = elm_button_add(obj);
+               elm_object_style_set(thumbButton, "tab_thumbButton");
+               evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::TabUI::_thumbSelected, data);
+               return thumbButton;
+    }
+    return NULL;
+
+}
+
+void TabUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info)
+{
+       Elm_Object_Item * selected = reinterpret_cast<Elm_Object_Item *>(event_info);
+       TabItemData * itemData = reinterpret_cast<TabItemData *>(elm_object_item_data_get(selected));
+       TabUI * self = reinterpret_cast<TabUI *>(data);
+
+//     self->historyClicked(itemData->item);
+}
+
+void TabUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */ )
+{
+        BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
+       TabItemData * itemData = reinterpret_cast<TabItemData *>(data);
+       itemData->tabUI->clearItems();
+       itemData->tabUI->tabClicked(itemData->item->getId());
+}
+
+void TabUI::clearItems()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    hide();
+    elm_gengrid_clear(m_gengrid);
+    elm_genlist_clear(m_genListActionBar);
+    elm_genlist_clear(m_genListTop);
+    m_map_tab_views.clear();
+}
+
+Evas_Object* TabUI::createNoHistoryLabel()
+{
+    Evas_Object *label = elm_label_add(m_parent);
+    elm_object_text_set(label, "No favorite websites.");
+    evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    return label;
+}
+
+void TabUI::setEmptyGengrid(bool setEmpty)
+{
+    if(setEmpty) {
+        elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoHistoryLabel());
+    } else {
+        elm_object_part_content_set(m_gengrid, "elm.swallow.empty", NULL);
+    }
+}
+
+void TabUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    Elm_Object_Item *item = reinterpret_cast<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 TabUI::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/TabUI/TabUI.h b/services/TabUI/TabUI.h
new file mode 100644 (file)
index 0000000..505ca5a
--- /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 TABUI_H
+#define TABUI_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 "TabId.h"
+namespace tizen_browser{
+namespace base_ui{
+
+class BROWSER_EXPORT TabUI
+        : public tizen_browser::interfaces::AbstractUIComponent
+        , public tizen_browser::core::AbstractService
+{
+public:
+    TabUI();
+    ~TabUI();
+    void show(Evas_Object *main_layout);
+    virtual std::string getName();
+    void showActionBar();
+    void showTopButtons();
+    void clearItems();
+    void hide();
+
+    void addTabItem(std::shared_ptr<tizen_browser::basic_webengine::TabContent>);
+    void addTabItems(std::vector<std::shared_ptr<tizen_browser::basic_webengine::TabContent> > items);
+//    void addBookmarkItem(std::shared_ptr<tizen_browser::services::BookmarkItem>);
+//    void addbookmarkItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> >);
+
+    boost::signals2::signal<void (const tizen_browser::basic_webengine::TabId&)> tabClicked;
+    boost::signals2::signal<void (const std::string & )> newTabClicked;
+    boost::signals2::signal<void (const std::string & )> newIncognitoTabClicked;
+    boost::signals2::signal<void (const std::string & )> closeTabsClicked;
+    boost::signals2::signal<void (const std::string & )> openedTabsClicked;
+    boost::signals2::signal<void (const std::string & )> onOtherDevicesClicked;
+    boost::signals2::signal<void (const std::string & )> closeTabUIClicked;
+private:
+    static Evas_Object* listActionBarContentGet(void *data, Evas_Object *obj, const char *part);
+    static Evas_Object* listTopButtonItemsContentGet(void *data, Evas_Object *obj, const char *part);
+    //static char*        listItemTextGet(void *data, Evas_Object *obj, const char *part);
+
+    static char* _grid_text_get(void *data, Evas_Object *obj, const char *part);
+    static Evas_Object * _tab_grid_content_get(void *data, Evas_Object *obj, const char *part);
+    static void _itemSelected(void * data, Evas_Object * obj, void * event_info);
+    static void _item_deleted(void *data, Evas_Object *obj);
+    static void _thumbSelected(void * data, Evas_Object * obj, void * event_info);
+    static void _deleteBookmark(void *data, Evas_Object *obj, void *event_info);
+    static void close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+    void setEmptyGengrid(bool setEmpty);
+
+    static void _openedtabs_clicked(void * data, Evas_Object * obj, void * event_info);
+    static void _newtab_clicked(void * data, Evas_Object * obj, void * event_info);
+    static void _newincognitotab_clicked(void * data, Evas_Object * obj, void * event_info);
+    static void _closetabs_clicked(void * data, Evas_Object * obj, void * event_info);
+    static void _onotherdevices_clicked(void * data, Evas_Object * obj, void * event_info);
+private:
+    Evas_Object *m_tab_layout;
+    Evas_Object *m_genListActionBar;
+    Elm_Genlist_Item_Class *m_itemClassActionBar;
+    Evas_Object *m_genListTop;
+    Elm_Genlist_Item_Class *m_itemClassTop;
+    Evas_Object *m_gengrid;
+    Evas_Object *m_parent;
+    
+    Elm_Gengrid_Item_Class * m_item_class;
+    std::map<std::string,Elm_Object_Item*> m_map_tab_views;
+    bool m_gengridSetup;
+    std::string edjFilePath;
+    Evas_Object *createNoHistoryLabel();
+
+    static void focusItem(void* data, Evas_Object* obj, void* event_info);
+    static void unFocusItem(void* data, Evas_Object* obj, void* event_info);
+};
+
+}
+}
+
+#endif // BOOKMARKSUI_H
diff --git a/services/TabUI/edc/TabUI.edc b/services/TabUI/edc/TabUI.edc
new file mode 100644 (file)
index 0000000..e4e88cd
--- /dev/null
@@ -0,0 +1,1421 @@
+#define DEBUG_RECT_OVER(over_part, r, g, b)                         \
+    part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__));   \
+                                                                   \
+scale:1;                                                            \
+        type : RECT;                                                \
+        repeat_events: 1;                                           \
+        description {                                               \
+            state: "default" 0.0;                                   \
+            visible: 1;                                             \
+            color: r g b 128;                                       \
+            rel1 { to: over_part; relative: 0 0; }                  \
+            rel2 { to: over_part; relative: 1 1; }                  \
+        }                                                           \
+    }
+
+collections 
+{
+#define WIDTH 1920
+#define HEIGHT 181
+#define ITEM_WIDTH 374
+
+    group{
+        name: "elm/button/base/tab_button";
+        parts{
+            part{
+                name: "button";
+                type: RECT;
+                scale: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    color: 0 0 0 0;
+                }
+            }
+            part{
+                name: "over";
+                type: RECT;
+                scale: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    rel1 { relative: 0.0 0.0;to: "button";}
+                    rel2 { relative: 1.0 1.0;to: "button";}
+                    color: 0 0 0 0;
+                }
+            }
+        }
+        programs{
+            program {
+                name: "mouse_click";
+                signal: "mouse,clicked,1";
+                source: "over";
+                script {
+                    emit("elm,action,click", "");
+                }
+            }
+        }
+    }
+
+group { name: "elm/button/base/tab_thumbButton";
+               images {
+                       image: "ico_delete.png" COMP;
+               }
+               parts {
+                       part { name: "elm.swallow.content";
+                               type: RECT;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description { state: "default" 0.0;
+                                       color: 0 0 0 0;
+                                       visible: 1;
+                                       rel1.relative: 0.0 0.0;
+                       rel2.relative: 1.0 1.0;
+                       align: 0.0 0.0;
+               }
+                       }
+               }
+
+               programs {
+                       program { name: "mouse,clicked";
+                               signal: "mouse,down,1";
+                               source: "elm.swallow.content";
+                               action: SIGNAL_EMIT "elm,action,click" "";
+                       }
+               }
+}
+
+group {
+       name: "tab-layout";
+    data {
+        item: "highlight_focus" "off";
+    }
+       images {
+               image: "btn_bar_stop_nor.png" COMP;
+       }
+       color_classes{
+            color_class{
+                name: "defaultBgColor";
+                color: 18 22 34 255;
+            }
+            color_class{
+                name: "focusBgColor";
+                color: 69 143 255 255;
+            }
+            color_class{
+                name: "highlightBgColor";
+                color: 69 143 255 102;
+            }
+            color_class{
+                name: "imageHighlight";
+                color: 255 255 255 102;
+            }
+            color_class{
+                name: "focusbtBgColor";
+                color: 22 120 224 255;
+            }
+            color_class{
+                name: "titleTextColor";
+                color: 74 74 74 255;
+            }
+            color_class{
+                name: "focusTextColor";
+                color: 255 255 255 255;
+            }
+            color_class{
+                name: "highlightTextColor";
+                color: 255 255 255 51;
+            }
+            color_class{
+                name: "urlTextColor";
+                color: 116 116 116 204;
+            }
+            color_class{
+                name: "transparent";
+                color: 0 0 0 0;
+            }
+        }
+
+       images {
+            image: "web_shadow.png" COMP;
+        }
+        parts {
+            part { name: "action_bar_genlist_bg";
+                type: RECT;
+                mouse_events: 0;
+                description { state: "default" 0.0;
+                               visible: 1;
+                               align: 0.0 0.0;
+                               min: 1920 104;
+                               max: 1920 104;
+                                color: 70 143 254 255;
+                    rel1 {
+                                                relative: 0 0;
+                    }
+                    rel2{
+                                                relative: 1 1;
+                    }
+                }
+            }
+          part { name: "top_bar_genlist_bg";
+                type: RECT;
+                mouse_events: 0;
+                description { state: "default" 0.0;
+                                visible: 1;
+                                align: 0.0 0.0;
+                                min: 1920 181;
+                                max: 1920 181;
+                                color: 70 143 254 255;
+                    rel1 {
+                                                relative: 0 1; to: "action_bar_genlist_bg";
+                    }
+                    rel2{
+                                                relative: 1 1;
+                    }
+                }
+            }
+           part { name: "gengrid_bg";
+                type: RECT;
+                mouse_events: 0;
+                description { state: "default" 0.0;
+                               visible: 1;
+                               align: 0.0 0.0;
+                               min: 1920 714;
+                               max: 1920 714;
+                                        color: 231 231 231 255;
+                    rel1 {
+                                                relative: 0 1; to: "top_bar_genlist_bg";
+                    }
+                    rel2{
+                                                relative: 1 1;
+                    }
+                }
+            }
+           part { name: "no_of_tabs_bg";
+                type: RECT;
+                mouse_events: 0;
+                description { state: "default" 0.0;
+                                visible: 1;
+                                align: 0.0 0.0;
+                                min: 1920 81;
+                                max: 1920 81;
+                                        color: 231 231 231 255;
+                    rel1 {
+                                                relative: 0 1; to: "gengrid_bg";
+                    }
+                    rel2{
+                                                relative: 1 1;
+                    }
+                }
+            }
+            part { name: "action_bar_genlist";
+                type : SWALLOW;
+                scale: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    min: 1920 104;
+                    max: 1920 104;
+                    align: 0.0 0.0;
+                    fixed: 0 0;
+                    rel1 { relative: 0.0 0.0; to: "action_bar_genlist_bg";}
+                    rel2 { relative: 1.0 1.0; }
+                }
+                description {
+                    state: "hidden" 0.0;
+                    inherit: "default" 0.0;
+                    visible: 0;
+                }
+                description {
+                    state: "visible" 0.0;
+                    inherit: "default" 0.0;
+                    visible: 1;
+                }
+             }
+            part { name: "top_bar_genlist";
+                type : SWALLOW;
+                scale: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    min: 1920 181;
+                   max: 1920 181;
+                    align: 0.0 0.0;
+                    fixed: 0 0;
+                    rel1 { relative: 0.0 0.0; to: "top_bar_genlist_bg"; offset: 0 0;}
+                    rel2 { relative: 1.0 1.0; }
+                }
+                description {
+                    state: "hidden" 0.0;
+                    inherit: "default" 0.0;
+                    visible: 0;
+                }
+                description {
+                    state: "visible" 0.0;
+                    inherit: "default" 0.0;
+                    visible: 1;
+                }
+           }
+          part { name: "tab_gengird";
+                type : SWALLOW;
+                scale: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    min: 1920 714;
+                    max: 1920 714;
+                    align: 0.0 0.0;
+                    fixed: 0 0;
+                    rel1 { relative: 0.0 0.0; to: "gengrid_bg"; offset: 63 63;}
+                    rel2 { relative: 1.0 1.0; }
+                }
+                description {
+                    state: "hidden" 0.0;
+                    inherit: "default" 0.0;
+                    visible: 0;
+                }
+                description {
+                    state: "visible" 0.0;
+                    inherit: "default" 0.0;
+                    visible: 1;
+                }
+           }
+          part { name: "uri_bar_shadow";
+                type: IMAGE;
+                scale: 1;
+                repeat_events: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0.0 0.0;
+                    fixed: 0 0;
+                    min: 1920 14;
+                    max: 1920 14;
+                    image.normal: "web_shadow.png";
+                    rel1 { relative: 0.0 1.0; to: "action_bar_genlist_bg"; }
+                    rel2 { relative: 1.0 1.0; }
+                }
+             }
+          part { name: "text_genlist";
+                type : SWALLOW;
+                scale: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    min: 1920 81;
+                    max: 1920 81;
+                    align: 0.0 0.0;
+                    fixed: 0 0;
+                    rel1 { relative: 0.0 0.0; to: "top_bar_genlist_bg"; offset: 0 0;}
+                    rel2 { relative: 1.0 1.0; }
+                }
+                description {
+                    state: "hidden" 0.0;
+                    inherit: "default" 0.0;
+                    visible: 0;
+                }
+                description {
+                    state: "visible" 0.0;
+                    inherit: "default" 0.0;
+                    visible: 1;
+                }
+           }
+    }
+}
+
+
+/*group { name: "elm/genlist/base/openedtabs_onotherdevices";
+    data {
+        item: "focus_highlight" "off";
+    }
+
+        parts {
+            part { name: "clipper";
+                type: RECT;
+                mouse_events: 0;
+                description { state: "default" 0.0;
+                               color: 70 143 254 255;
+                    rel1 {
+                                               relative: 0 0;
+                    }
+                    rel2{
+                                               relative: 1 1;
+                    }
+                }
+            }
+           part { name: "background";
+                type: RECT;
+                mouse_events: 0;
+                description { state: "default" 0.0;
+                                       color: 255 255 255 255;
+                    rel1 {
+                                               relative: 0 0;
+                    }
+                    rel2{
+                                               relative: 1 1;
+                    }
+                }
+            }
+            part { name: "elm.swallow.content";
+                type: SWALLOW;
+                description { state: "default" 0.0;
+                    rel1 {
+                                               relative: 0 0;
+                                               offset: 62 0;
+                    }
+                    rel2 {
+                        relative: 1 1;
+                        offset: 0 0;
+                    }
+                }
+            }
+            part { name: "elm.swallow.empty";
+                type: SWALLOW;
+                description { state: "default" 0.0;
+                align: 0.5 0.5;
+                    rel1 {
+                        relative: 0.5 0.5;
+                    }
+                    rel2 {
+                        relative: 0.5 0.5;
+                    }
+                }
+            }
+    }
+}*/
+
+group { name: "elm/gengrid/item/tab_item/default";
+       data.item: "texts" "tab_title tab_url";
+       data.item: "contents" "tab_thumbnail tab_thumbButton";
+       images {
+               image: "web_frame_selected.png" COMP;
+               image: "ico_bg_round_shape_37x37.png" COMP;
+       }
+       parts {
+               part { name: "bg";
+                       type: RECT;
+                       mouse_events: 0;
+                       description { state: "default" 0.0;
+                               min: 338 294;
+                               max: 338 294;
+                               visible: 1;
+                               color: 255 255 255 255;
+                               rel1.offset: -26 -26;
+                       }
+                       description { state: "selected";
+                               inherit: "default" 0.0;
+                               color: 70 143 254 255;
+                       }
+               }
+
+               part { name: "tab_thumbnail";
+                       type: SWALLOW;
+                       description { state: "default" 0.0;
+                               fixed: 1 0;
+                               align: 0.0 0.0;
+                               color : 255 255 255 255;
+                               min: 338 198;
+                               max: 338 198;
+                               rel1 {
+                                       relative: 0.0  0.0; to: "bg";
+                               }
+                               rel2 {
+                                       relative: 1.0  1.0; to: "bg";
+                               }
+                       }
+                       description { state: "selected";
+                               inherit: "default" 0.0;
+                       }
+               }
+
+               part { name: "focus_highlight";
+                       type: IMAGE;
+                       description { state: "default" 0.0;
+                               rel1 {
+                                       to: "tab_thumbnail";
+                                       relative: 0.0  0.0;
+                               }
+                               rel2 {
+                                       to: "tab_thumbnail";
+                                       relative: 1.0  1.0;
+                               }
+                               image.normal: "web_frame_selected.png";
+                               image.border: 8 8 8 0;
+                               image.border_scale: 1;
+                               image.middle: NONE;
+                               visible: 0;
+                       }
+                       description { state: "selected";
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+               }
+
+               part { name: "background";
+                       type: RECT;
+                       description { state: "default" 0.0;
+                               min: 338 87;
+                               max: 338 87;
+                               align: 0.0 0.0;
+                               color: 255 255 255 255;
+                               rel1 {
+                                       to: "tab_thumbnail";
+                                       relative: 0.0  1.0;
+                               }
+                               rel2 {
+                                       relative: 1.0  1.0;
+                               }
+                       }
+                       description { state: "selected" 0.0;
+                               inherit: "default" 0.0;
+                               color: 70 143 254 255;
+                       }
+               }
+
+               part { name: "tab_title";
+                       type: TEXT;
+                       description { state: "default" 0.0;
+                               min: 300 48;
+                               max: 300 48;
+                               align: 0.0 0.5;
+                               rel1 {
+                                       to: "background";
+                                       relative: 0.0 0.0;
+                                       offset: 17 0;
+                               }
+                               rel2 {
+                                       to: "background";
+                                       relative: 1.0  1.0;
+                               }
+               color: 51 51 51 255;
+                    text {
+                        text: "Web page title";
+                        font: "Sans";
+                        size: 27;
+                        align: 0 0.5;
+                    }
+                }
+                description { state: "focus" 0.0;
+                    inherit: "default" 0.0;
+                    //color: focusTextColor;
+                }
+                description { state: "highlight" 0.0;
+                    inherit: "default" 0.0;
+                    //color: highlightTextColor;
+                }
+               }
+
+               part { name: "tab_url";
+                        type: TEXT;
+                        description { state: "default" 0.0;
+                                min: 300 48;
+                                max: 300 48;
+                                align: 0 0.5;
+                                rel1 {
+                                        to: "tab_title";
+                                        relative: 0.0 1.0;
+                                }
+                                rel2 {
+                                        to: "tab_title";
+                                        relative: 1.0  1.0;
+                                }
+                               color: 153 153 153 255;
+                    text {
+                        text: "Web page url";
+                        font: "Sans";
+                        size: 24;
+                        align: 0 0.5;
+                    }
+                }
+                description { state: "focus" 0.0;
+                    inherit: "default" 0.0;
+                    //color: focusTextColor;
+                }
+                description { state: "highlight" 0.0;
+                    inherit: "default" 0.0;
+                    //color: highlightTextColor;
+                }
+                }
+
+               part { name: "tab_thumbButton";
+                       type: SWALLOW;
+                       description { state: "default" 0.0;
+                               rel1.to: "tab_thumbnail";
+                               rel2.to: "tab_thumbnail";
+                       }
+               }
+
+               part { name: "over2";
+                       type: RECT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description { state: "default" 0.0;
+                               color: 0 0 0 0;
+                               rel1.to: "bg";
+                               rel2.to: "background";
+                       }
+               }
+               part { name: "over3";
+                       type: RECT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description { state: "default" 0.0;
+                               color: 0 0 0 0;
+                               rel1.to: "background";
+                               rel2.to: "background";
+                       }
+               }
+       }
+
+       programs{
+               program { name: "mouse_in";
+                       signal: "mouse,in";
+                       source: "over2";
+                       action:  STATE_SET "selected" 0.0;
+                       target:  "background";
+                       target: "focus_highlight";
+                       target: "bg";
+               }
+               program { name: "mouse_out";
+                       signal: "mouse,out";
+                       source: "over2";
+                       action:  STATE_SET "default" 0.0;
+                       target:  "background";
+                       target: "focus_highlight";
+                       target: "bg";
+               }
+       }
+}
+group { name: "elm/genlist/item/action_bar_items/default";
+        min: 1920 104;
+        max: 1920 104;
+        data.item: "texts" "closetabs_text";
+        data.item: "contents" "newtab_click newincognitotab_click closetabs_click close_click";
+       images {
+                        image: "btn_bar_new_nor.png" COMP;
+                        image: "btn_bar_new_foc.png" COMP;
+                        image: "btn_bar_incognito_nor.png" COMP;
+                        image: "btn_bar_incognito_foc.png" COMP;
+               }
+        parts{
+            part {
+                name: "bg_clipper";
+                scale:1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    color: 255 255 255 255;
+                    align: 0 0;
+                    min: 1920 104;
+                    max: 1920 104;
+                    rel1 { relative: 0.0 0.0;}
+                    rel2 { relative: 1.0 1.0;}
+                            }
+                 }
+
+                part {
+                name: "newtab_button";
+                scale:1;
+                mouse_events: 1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    color: 255 255 255 255;
+                    align: 0 0;
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 63 1;}
+                    rel2 { relative: 1.0 1.0; to: "bg_clipper"; }
+                }
+                description {
+                    state: "highlight" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusBgColor;
+                    visible: 1;
+                }
+                  description {
+                    state: "focus" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusbtBgColor;
+                    visible: 1;
+                }
+            }
+           part {
+                name: "newtab_icon";
+                type: IMAGE;
+                scale: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    align: 0 0;
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "newtab_button";}
+                    rel2 { relative: 1.0 1.0; to: "newtab_button";}
+                    image.normal: "btn_bar_new_nor.png";
+                }
+                description { state: "highlight" 0.0;
+                    image.normal: "btn_bar_new_foc.png";
+                    inherit: "default" 0.0;
+                    visible: 1;
+                }
+                description { state: "focus" 0.0;
+                    inherit: "highlight" 0.0;
+                }
+            }
+            part {
+                name: "newtab_over";
+                scale:1;
+                type: RECT;
+                mouse_events: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    fixed: 1 1;
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "newtab_button";}
+                    rel2 { relative: 1.0 1.0; to: "newtab_button";}
+                    color_class: transparent;
+                }
+            }
+
+             part {
+                name: "newtab_click";
+                scale:1;
+                type: SWALLOW;
+                mouse_events: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    fixed: 1 1;
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "newtab_over";}
+                    rel2 { relative: 1.0 1.0; to: "newtab_over";}
+                }
+            }
+
+            part {
+                name: "newincognitotab_button_bg";
+                scale:1;
+                mouse_events: 1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    color: 255 255 255 255;
+                    align: 0 0;
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 175 1;}
+                    rel2 { relative: 1.0 1.0; to: "bg_clipper"; }
+                }
+            }
+            part {
+                name: "newincognitotab_button";
+                scale:1;
+                mouse_events: 1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    align: 0 0;
+
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "newincognitotab_button_bg"; }
+                    rel2 { relative: 1.0 1.0; to: "newincognitotab_button_bg"; }
+                    color_class: transparent;
+                }
+                description {
+                    state: "highlight" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusBgColor;
+                    visible: 1;
+                }
+                  description {
+                    state: "focus" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusbtBgColor;
+                    visible: 1;
+                }
+            }
+         part {
+                name: "newincognitotab_icon";
+                type: IMAGE;
+                scale: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    align: 0 0;
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "newincognitotab_button";}
+                    rel2 { relative: 1.0 1.0; to: "newincognitotab_button";}
+                    image.normal: "btn_bar_incognito_nor.png";
+                }
+                description { state: "highlight" 0.0;
+                    image.normal: "btn_bar_incognito_foc.png";
+                    inherit: "default" 0.0;
+                    visible: 1;
+                }
+                description { state: "focus" 0.0;
+                    inherit: "highlight" 0.0;
+                }
+            }
+            part {
+                name: "newincognitotab_over";
+                scale:1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    fixed: 1 1;
+
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "newincognitotab_button";}
+                    rel2 { relative: 1.0 1.0; to: "newincognitotab_button";}
+                    color_class: transparent;
+                }
+            }
+
+          part {
+                name: "newincognitotab_click";
+                scale:1;
+                type: SWALLOW;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    fixed: 1 1;
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "newincognitotab_over";}
+                    rel2 { relative: 1.0 1.0; to: "newincognitotab_over";}
+                    color_class: transparent;
+                }
+            }
+  
+             part {
+                name: "item3_bg";
+                type: SWALLOW;
+                scale: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    min: 348 65;
+                    max: 348 65;
+                    align: 0.5 0.5;
+                    rel1 { relative: 0.0 0.0;to: "bg_clipper";}
+                    rel2 { relative: 1.0 1.0;to: "bg_clipper";}
+                    color : 255 255 255 255;
+
+                }
+                   }
+
+            part {
+                name: "Tabmanager";
+                scale:1;
+                mouse_events: 1;
+                type: TEXT;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    align: 0 .3;
+                    min: 348 65;
+                    max: 348 65;
+                    color: 116 116 116 255;
+                    rel1 { relative: 0.0 0.0; to: "item3_bg";  }
+                    rel2 { relative: 1.0 1.0; to: "item3_bg"; }
+                    text {
+                        text: "Tab Manager";
+                        font: "Sans";
+                        size: 40;
+                        align: 0.5 0.5;
+                    }
+                }
+                description {
+                    state: "highlight" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusBgColor1;
+                    visible: 1;
+                  }
+                  description {
+                    state: "focus" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusbtBgColor1;
+                    visible: 1;
+                }
+            } 
+                part {
+                name: "closetabs_button_bg";
+                scale:1;
+                mouse_events: 1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    color: 192 192 192 255;
+                    align: 0 0;
+                    min: 220 65;
+                    max: 220 65;
+                    rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 1500 20;}
+                    rel2 { relative: 1.0 1.0; to: "bg_clipper"; }
+                }
+            }
+            part {
+                name: "closetabs_button";
+                scale:1;
+                mouse_events: 1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    align: 0 0;
+
+                    min: 220 65;
+                    max: 220 65;
+                    rel1 { relative: 0.0 0.0; to: "closetabs_button_bg"; }
+                    rel2 { relative: 1.0 1.0; to: "closetabs_button_bg"; }
+                    color_class: transparent;
+                }
+                description {
+                    state: "highlight" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusBgColor;
+                    visible: 1;
+                }
+                  description {
+                    state: "focus" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusbtBgColor;
+                    visible: 1;
+                }
+             }
+               part{
+                name: "closetabs_text";
+                type: TEXT;
+                scale: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    rel1 { relative: 0.0 0.0;to: "closetabs_button";}
+                    rel2 { relative: 1.0 1.0;to: "closetabs_button";}
+                    color: 0 0 0 255;
+                    text {
+                        text: "Close all";
+                        font: "Sans";
+                        size: 27;
+                        align: 0.5 0.5;
+                    }
+                }
+            } 
+
+            part {
+                name: "closetabs_over";
+                scale:1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    fixed: 1 1;
+
+                    min: 220 65;
+                    max: 220 65;
+                    rel1 { relative: 0.0 0.0; to: "closetabs_button";}
+                    rel2 { relative: 1.0 1.0; to: "closetabs_button";}
+                    color_class: transparent;
+                }
+            }
+
+          part {
+                name: "closetabs_click";
+                scale:1;
+                type: SWALLOW;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    fixed: 1 1;
+                    min: 220 65;
+                    max: 220 65;
+                    rel1 { relative: 0.0 0.0; to: "closetabs_over";}
+                    rel2 { relative: 1.0 1.0; to: "closetabs_over";}
+                    color_class: transparent;
+                }
+            }
+       part {
+                name: "close_bg";
+                scale:1;
+                mouse_events: 1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    align: 0 0.5;
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 1758 0;}
+                    rel2 { relative: 1.0 1.0; to: "bg_clipper";}
+                    color_class: transparent;
+                }
+                description {
+                    state: "highlight" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusBgColor;
+                    visible: 1;
+                }
+                  description {
+                    state: "focus" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusDelBgColor;
+                    visible: 1;
+                }
+            }
+           part {
+                name: "close_icon";
+                type: IMAGE;
+                scale: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    align: 0 0;
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "close_bg";}
+                    rel2 { relative: 1.0 1.0; to: "close_bg";}
+                    image.normal: "btn_bar_stop_nor.png";
+                }
+                description { state: "highlight" 0.0;
+                    inherit: "default" 0.0;
+                    visible: 1;
+                }
+                description { state: "focus" 0.0;
+                    inherit: "highlight" 0.0;
+                }
+            }
+           part {
+                name: "close_over";
+                scale:1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    fixed: 1 1;
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "close_bg";}
+                    rel2 { relative: 1.0 1.0; to: "close_bg";}
+                    color_class: transparent;
+                }
+            }
+            part {
+                name: "close_click";
+                scale:1;
+                type: SWALLOW;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    fixed: 1 1;
+                    min: 82 102;
+                    max: 82 102;
+                    rel1 { relative: 0.0 0.0; to: "close_over";}
+                    rel2 { relative: 1.0 1.0; to: "close_over";}
+                    color_class: transparent;
+                }
+            }
+        
+        programs{
+
+           program {
+                name: "mouse_click_newtab";
+                signal: "mouse,clicked,1";
+                source: "newtab_over";
+                script {
+                    emit("elm,action,click", "");
+                }
+            }
+           program {
+                name: "mouse_in_newtab_click";
+                signal: "mouse,in";
+                source: "newtab_*";
+                action: STATE_SET "highlight" 0.0;
+                target: "newtab_button";
+                target: "newtab_over";
+                target: "newtab_icon";
+             }
+            program {
+                name: "mouse_out_newtab_click";
+                signal: "mouse,out";
+                source: "newtab_*";
+                action: STATE_SET "default" 0.0;
+                target: "newtab_button";
+                target: "newtab_over";
+                target: "newtab_icon";
+            }
+
+           program {
+                name: "mouse_click_newincognitotab";
+
+                signal: "mouse,clicked,1";
+                source: "newincognitotab_over";
+                script {
+                    emit("elm,action,click", "");
+                }
+            }
+           program {
+                name: "mouse_in_newincognitotab_click";
+                signal: "mouse,in";
+                source: "newincognitotab_*";
+                action: STATE_SET "highlight" 0.0;
+                target: "newincognitotab_button";
+                target: "newincognitotab_over";
+                target: "newincognitotab_icon";
+             }
+            program {
+                name: "mouse_out_newincognitotab_click";
+                signal: "mouse,out";
+                source: "newincognitotab_*";
+                action: STATE_SET "default" 0.0;
+                target: "newincognitotab_button";
+                target: "newincognitotab_over";
+                target: "newincognitotab_icon";
+            }
+         program {
+                name: "mouse_click_closetabs";
+                signal: "mouse,clicked,1";
+                source: "closetabs_over";
+                script {
+                    emit("elm,action,click", "");
+                }
+            }
+           program {
+                name: "mouse_in_closetabs_click";
+                signal: "mouse,in";
+                source: "closetabs_*";
+                action: STATE_SET "highlight" 0.0;
+                target: "closetabs_button";
+                target: "closetabs_over";
+                target: "closetabs_text";
+             }
+            program {
+                name: "mouse_out_closetabs_click";
+                signal: "mouse,out";
+                source: "closetabs_*";
+                action: STATE_SET "default" 0.0;
+                target: "closetabs_button";
+                target: "closetabs_over";
+                target: "closetabs_text";
+            }
+           program {
+                name: "mouse_in_close_click";
+                signal: "mouse,in";
+                source: "close_click";
+                script {
+                    emit("mouse_in_close_click", "");
+                }
+            }
+            program {
+                name: "mouse_out_close_click";
+                signal: "mouse,out";
+                source: "close_click";
+                script {
+                    emit("mouse_out_close_click", "");
+                }
+            }
+            program {
+                name: "mouse_in_close";
+                signal: "mouse_in_close_click";
+                source: "";
+                action: STATE_SET "highlight" 0.0;
+                target: "close_over";
+                target: "close_bg";
+                target: "close_icon";
+            }
+            program {
+                name: "mouse_out_close";
+                signal: "mouse_out_close_click";
+                source: "";
+                action: STATE_SET "default" 0.0;
+                target: "close_over";
+                target: "close_bg";
+                target: "close_icon";
+            }
+       }
+    }           
+}
+
+group { name: "elm/genlist/item/top_buttons/default";
+        min: 1920 181;
+        max: 1920 181;
+        data.item: "texts" "openedtabs_button_text onotherdevices_button_text";
+        data.item: "contents" "openedtabs_click onotherdevices_click";
+        parts{
+           part {
+                name: "bg_clipper";
+                scale:1;
+                mouse_events: 1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    color: 231 231 231 255;
+                    align: 0 0;
+                    min: 1920 181;
+                    max: 1920 181;
+                    rel1 { relative: 0.0 0.0;}
+                    rel2 { relative: 1.0 1.0;}
+                }
+            }
+            part {
+                name: "button_bg";
+                scale:1;
+                mouse_events: 1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    color: 192 192 192 255;
+                    align: 0 0;
+                    min: 348 65;
+                    max: 348 65;
+                    rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 611 67;}
+                    rel2 { relative: 1.0 1.0; to: "bg_clipper"; }
+                }
+            }
+           part {
+                name: "openedtabs_button";
+                scale:1;
+                mouse_events: 1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    align: 0.5 0.5;
+                    min: 348 65;
+                    max: 348 65;
+                    rel1 { relative: 0.0 0.0; to: "button_bg"; }
+                    rel2 { relative: 1.0 1.0; to: "button_bg"; }
+                    color_class: transparent;
+                }
+                description {
+                    state: "highlight" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusBgColor;
+                    visible: 1;
+                }
+                  description {
+                    state: "focus" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusbtBgColor;
+                    visible: 1;
+                }
+            }
+            part{
+                name: "openedtabs_over";
+                type: RECT;
+                scale: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    rel1 { relative: 0.0 0.0;to: "openedtabs_button";}
+                    rel2 { relative: 1.0 1.0;to: "openedtabs_button";}
+                    color: 0 0 0 0;
+                }
+            }
+           part{
+                name: "openedtabs_text";
+                type: TEXT;
+                scale: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    rel1 { relative: 0.0 0.0;to: "button_bg";}
+                    rel2 { relative: 1.0 1.0;to: "button_bg";}
+                    color: 0 0 0 255;
+                   text {
+                        text: "Opened Tabs";
+                        font: "Sans";
+                        size: 27;
+                        align: 0.5 0.5;
+                    }
+                }
+            }
+       
+            part {
+                name: "openedtabs_click";
+                scale:1;
+                type: SWALLOW;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    fixed: 1 1;
+                    min: 348 65;
+                    max: 348 65;
+                    rel1 { relative: 0.0 0.0; to: "openedtabs_over";}
+                    rel2 { relative: 1.0 1.0; to: "openedtabs_over";}
+                    color_class: transparent;
+                }
+            }
+           part {
+                name: "onotherdevices_button_bg";
+                scale:1;
+                mouse_events: 1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    color: 192 192 192 255;
+                    align: 0 0;
+                    min: 348 65;
+                    max: 348 65;
+                    rel1 { relative: 0.0 0.0; to: "bg_clipper"; offset: 961 67;}
+                    rel2 { relative: 1.0 1.0; to: "bg_clipper"; }
+                }
+            }
+           part {
+                name: "onotherdevices_button";
+                scale:1;
+                mouse_events: 1;
+                type: RECT;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    align: 0 0;
+                    min: 348 65;
+                    max: 348 65;
+                    rel1 { relative: 0.0 0.0; to: "onotherdevices_button_bg"; }
+                    rel2 { relative: 1.0 1.0; to: "onotherdevices_button_bg"; }
+                    color_class: transparent;
+                }
+                description {
+                    state: "highlight" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusBgColor;
+                    visible: 1;
+                }
+                  description {
+                    state: "focus" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: focusbtBgColor;
+                    visible: 1;
+                }
+            }
+            part{
+                name: "onotherdevices_over";
+                type: RECT;
+                scale: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    rel1 { relative: 0.0 0.0;to: "onotherdevices_button";}
+                    rel2 { relative: 1.0 1.0;to: "onotherdevices_button";}
+                    color: 0 0 0 0;
+                }
+            }
+           part{
+                name: "onotherdevices_text";
+                type: TEXT;
+                scale: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    fixed: 1 1;
+                    rel1 { relative: 0.0 0.0;to: "onotherdevices_button_bg";}
+                    rel2 { relative: 1.0 1.0;to: "onotherdevices_button_bg";}
+                    color: 0 0 0 255;
+                   text {
+                        text: "On Other Devices";
+                        font: "Sans";
+                        size: 27;
+                        align: 0.5 0.5;
+                    }
+                }
+            }
+
+          part {
+                name: "onotherdevicess_click";
+                scale:1;
+                type: SWALLOW;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    fixed: 1 1;
+                    min: 348 65;
+                    max: 348 65;
+                    rel1 { relative: 0.0 0.0; to: "onotherdevices_over";}
+                    rel2 { relative: 1.0 1.0; to: "onotherdevices_over";}
+                    color_class: transparent;
+                }
+            }
+        }
+        programs{
+
+          program {
+                name: "mouse_click_openedtabs";
+                signal: "mouse,clicked,1";
+                source: "openedtabs_over";
+                script {
+                    emit("elm,action,click", "");
+                }
+            }
+           program {
+                name: "mouse_in_openedtabs_click";
+                signal: "mouse,in";
+                source: "openedtabs_*";
+                action: STATE_SET "highlight" 0.0;
+                target: "openedtabs_button";
+                target: "openedtabs_over";
+                target: "openedtabs_text";
+             }
+            program {
+                name: "mouse_out_openedtabs_click";
+                signal: "mouse,out";
+                source: "openedtabs_*";
+                action: STATE_SET "default" 0.0;
+                target: "openedtabs_button";
+                target: "openedtabs_over";
+                target: "openedtabs_text";
+            }
+
+          program {
+                name: "mouse_click_onotherdevices";
+                signal: "mouse,clicked,1";
+                source: "onotherdevices_over";
+                script {
+                    emit("elm,action,click", "");
+                }
+            }
+           program {
+                name: "mouse_in_onotherdevices_click";
+                signal: "mouse,in";
+                source: "onotherdevices_*";
+                action: STATE_SET "highlight" 0.0;
+                target: "onotherdevices_button";
+                target: "onotherdevices_over";
+                target: "onotherdevices_text";
+             }
+            program {
+                name: "mouse_out_onotherdevices_click";
+                signal: "mouse,out";
+                source: "onotherdevices_*";
+                action: STATE_SET "default" 0.0;
+                target: "onotherdevices_button";
+                target: "onotherdevices_over";
+                target: "onotherdevices_text";
+            }
+       }
+    }
+}
diff --git a/services/TabUI/edc/error.edc b/services/TabUI/edc/error.edc
new file mode 100644 (file)
index 0000000..0291971
--- /dev/null
@@ -0,0 +1,144 @@
+collections {
+    images {
+        image: "web_browsing_icon_error.png" COMP;
+    }
+    group { name: "error_message";
+    styles {
+        style { name: "mssage_style";
+            base: "font=Sans font_size=35 color=#d3d3d3 wrap=word align=0.5";
+        }
+        style { name: "mssage_hint_style";
+            base: "font=Sans font_size=24 color=#868686 wrap=word align=0.5";
+        }
+    }
+    parts {
+        part{
+            name: "message_background";
+            type: RECT;
+            description{
+                state: "default" 0.0;
+                visible: 1;
+                rel1.relative: 0 0;
+                rel2.relative: 1 1;
+                color: 42 50 64 255;
+            }
+        }
+        part{
+            name: "error_message_background";
+            type:RECT;
+            description{
+                state: "default" 0.0;
+                visible: 1;
+                min: 1582 730;
+                max: 1582 730;
+                fixed: 1 1;
+                align: 0.5 0.5;
+                color: 30 38 50 153;
+            }
+        }
+        part{
+            name: "err_ico";
+            type: IMAGE;
+            description{
+                state: "default" 0.0;
+                visible: 1;
+                min: 140 140;
+                max:140 140;
+                fixed: 1 1;
+                align: 0.5 0;
+                rel1{
+                    relative: 0 0;
+                    offset:0 163;
+                    to: "error_message_background";
+                }
+                rel2{
+                    relative: 1 1;
+                    to: "error_message_background";
+                    }
+                image{
+                    normal: "web_browsing_icon_error.png";
+                }
+            }
+        }
+
+        part{
+            name: "error_text";
+            type: TEXTBLOCK;
+            description{
+                state: "default" 0.0;
+                visible: 1;
+                fixed: 1 1;
+                min: 1502 96;
+                max: 1502 96;
+                //color: 211 211 211 255;
+                align: 0.5 0;
+                rel1{
+                    relative: 0 1;
+                    to_x: "error_message_background";
+                    to_y: "err_ico";
+                }
+                rel2{
+                    relative: 1 1;
+                    to: "error_message_background";
+                }
+                text{
+                    style: "mssage_style";
+                    text: "Server not found.<br/>sdf Please check the followings:";
+                    //min: 0 0;
+                    //max: 1 1;
+                    //align: 1 0;
+                    //size: 35;
+                }
+            }
+        }
+
+
+        part{
+            name: "error_hint";
+            type: TEXTBLOCK;
+            description{
+                state: "default" 0.0;
+                visible: 1;
+                fixed: 1 1;
+                min: 1502 117;
+                max: 1502 117;
+                color: 134 134 134 255;
+                align: 0.5 0;
+                rel1{
+                    relative: 0 1;
+                    to_x: "error_message_background";
+                    to_y: "error_text";
+                }
+                rel2{
+                    relative: 1 1;
+                    to: "error_message_background";
+                }
+                text{
+                    max: 0 1;
+                    style: "mssage_hint_style";
+                    text: "Check for any typing error in URL. <br/>"
+                    "Check your network settings.<br/>"
+                    "Try again later.<br/>"
+                    "Click refresh to reload.";
+                }
+            }
+        }
+    }
+/*
+      programs {
+         program { name: "mouse_down";
+            signal: "mouse,down,1";
+            source: "logo";
+            action: STATE_SET "hide" 0.0;
+            target: "logo";
+         }
+         program { name: "mouse_up";
+            signal: "mouse,up,1";
+            source: "logo";
+            action: STATE_SET "default" 0.0;
+            target: "logo";
+         }
+      }
+*/
+   }
+}
diff --git a/services/TabUI/images/btn_bar_incognito_dis.png b/services/TabUI/images/btn_bar_incognito_dis.png
new file mode 100644 (file)
index 0000000..a6bbd1a
Binary files /dev/null and b/services/TabUI/images/btn_bar_incognito_dis.png differ
diff --git a/services/TabUI/images/btn_bar_incognito_foc.png b/services/TabUI/images/btn_bar_incognito_foc.png
new file mode 100644 (file)
index 0000000..686e40d
Binary files /dev/null and b/services/TabUI/images/btn_bar_incognito_foc.png differ
diff --git a/services/TabUI/images/btn_bar_incognito_nor.png b/services/TabUI/images/btn_bar_incognito_nor.png
new file mode 100644 (file)
index 0000000..3dbffec
Binary files /dev/null and b/services/TabUI/images/btn_bar_incognito_nor.png differ
diff --git a/services/TabUI/images/btn_bar_new_dis.png b/services/TabUI/images/btn_bar_new_dis.png
new file mode 100644 (file)
index 0000000..af49c5a
Binary files /dev/null and b/services/TabUI/images/btn_bar_new_dis.png differ
diff --git a/services/TabUI/images/btn_bar_new_foc.png b/services/TabUI/images/btn_bar_new_foc.png
new file mode 100644 (file)
index 0000000..2a5c00b
Binary files /dev/null and b/services/TabUI/images/btn_bar_new_foc.png differ
diff --git a/services/TabUI/images/btn_bar_new_nor.png b/services/TabUI/images/btn_bar_new_nor.png
new file mode 100644 (file)
index 0000000..352a2f4
Binary files /dev/null and b/services/TabUI/images/btn_bar_new_nor.png differ
diff --git a/services/TabUI/images/btn_bar_stop_nor.png b/services/TabUI/images/btn_bar_stop_nor.png
new file mode 100644 (file)
index 0000000..c5cdc11
Binary files /dev/null and b/services/TabUI/images/btn_bar_stop_nor.png differ
diff --git a/services/TabUI/images/ico_delete.png b/services/TabUI/images/ico_delete.png
new file mode 100644 (file)
index 0000000..92f42cc
Binary files /dev/null and b/services/TabUI/images/ico_delete.png differ
diff --git a/services/TabUI/images/web_frame_selected.png b/services/TabUI/images/web_frame_selected.png
new file mode 100644 (file)
index 0000000..4470ca4
Binary files /dev/null and b/services/TabUI/images/web_frame_selected.png differ
diff --git a/services/TabUI/images/web_shadow.png b/services/TabUI/images/web_shadow.png
new file mode 100644 (file)
index 0000000..f9018b0
Binary files /dev/null and b/services/TabUI/images/web_shadow.png differ