Fixed creating history list 72/47472/2
authorAlbert Malewski <a.malewski@samsung.com>
Thu, 3 Sep 2015 06:16:11 +0000 (08:16 +0200)
committerAlbert Malewski <a.malewski@samsung.com>
Thu, 3 Sep 2015 14:31:15 +0000 (16:31 +0200)
[Issue#]    https://bugs.tizen.org/jira/browse/TT-159
[Problem]   "Close Tabs" function is not implemented in Tab Manager.
[Cause]     N/A
[Solution]  Added closeAllTabs, closeTabsClicked functions. Added boolean
            'editMode' variable that conditions action in _thumbSelected function.
            Added callback to make 'X' icon and '[OK] to close' visible.
[Verify]    Launch browser > Add tabs > Tab manager > Close Tabs
            Check if 'Close all' button works properly
            Check if closing selected item works properly

Change-Id: I98453027ad3ccfa797ab94e1e2c3ffa67f65d28f

services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h
services/TabUI/TabUI.cpp
services/TabUI/TabUI.h
services/TabUI/edc/TabUI.edc

index 951e86daf715a6bc42fac9d6601a298f62e2e1e8..91bcecbc62f7521c53afdc4d7ac971879e005c8e 100644 (file)
@@ -938,6 +938,7 @@ void SimpleUI::showTabUI()
     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->closeTabsClicked.connect(boost::bind(&SimpleUI::closeTabsClicked, this,_1));
     m_tabUI->newIncognitoTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this,_1));
     m_tabUI->show(m_window.get());
     m_tabUI->addTabItems(m_webEngine->getTabContents());
@@ -961,6 +962,12 @@ void SimpleUI::tabClicked(const tizen_browser::basic_webengine::TabId& tabId)
     switchToTab(tabId);
 }
 
+void SimpleUI::closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId)
+{
+    BROWSER_LOGD("%s", __func__);
+    m_webEngine->closeTab(tabId);
+}
+
 void SimpleUI::handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation)
 {
     BROWSER_LOGD("%s", __func__);
index e760b6fa93dce47afce5ba012a58226a8aedf06a..b8df3a1c1c735fb8afe628a85ee7c6fd417dd461 100644 (file)
@@ -116,6 +116,7 @@ private:
     void switchToTab(const tizen_browser::basic_webengine::TabId& tabId);
     void newTabClicked(const std::string &);
     void tabClicked(const tizen_browser::basic_webengine::TabId& tabId);
+    void closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId);
     void tabCreated();
     void tabClosed(const tizen_browser::basic_webengine::TabId& id);
 
index d92dd180bf2092dd0c21d7a93581b4a4cd1ec2ea..cfb9e362ba8ecac75df2a47c5f5216e0e39076c0 100644 (file)
@@ -50,6 +50,7 @@ TabUI::TabUI()
     m_edjFilePath.append("TabUI/TabUI.edj");
     elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
     createTabItemClass();
+    editMode = false;
 }
 
 TabUI::~TabUI()
@@ -105,9 +106,9 @@ Evas_Object* TabUI::createTabUILayout(Evas_Object* 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_horizontal_set(m_gengrid, EINA_TRUE);
     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_policy_set(m_gengrid, ELM_SCROLLER_POLICY_AUTO, 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);
@@ -115,6 +116,8 @@ Evas_Object* TabUI::createTabUILayout(Evas_Object* parent)
 
     double efl_scale = elm_config_scale_get() / elm_app_base_scale_get();
     elm_gengrid_item_size_set(m_gengrid, 364 * efl_scale, 320 * efl_scale);
+    evas_object_event_callback_add(m_gengrid, EVAS_CALLBACK_MOUSE_IN, _focus_in, this);
+
     return tab_layout;
 }
 
@@ -160,6 +163,7 @@ void TabUI::_close_clicked(void* data, Evas_Object*, void*)
         TabUI * tabUI = static_cast<TabUI*>(data);
         tabUI->closeTabUIClicked(std::string());
         tabUI->clearItems();
+        tabUI->editMode = false;
     }
 }
 
@@ -203,6 +207,7 @@ void TabUI::_newtab_clicked(void * data, Evas_Object*, void*)
         TabUI* tabUI = static_cast<TabUI*>(data);
         tabUI->clearItems();
         tabUI->newTabClicked(std::string());
+        tabUI->editMode = false;
     }
 
 }
@@ -223,27 +228,34 @@ void TabUI::_newincognitotab_clicked(void* data, Evas_Object*, void*)
         TabUI* tabUI = static_cast<TabUI*>(data);
         tabUI->clearItems();
         tabUI->newIncognitoTabClicked(std::string());
+        tabUI->editMode = false;
     }
 }
 
-void TabUI::_closetabs_clicked(void* data, Evas_Object*, void*)
+void TabUI::_closetabs_clicked(void* data, Evas_Object* obj, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data) {
         TabUI* tabUI = static_cast<TabUI*>(data);
-        tabUI->closeTabsClicked(std::string());
+        if (!tabUI->editMode) {
+            tabUI->editMode = true;
+            BROWSER_LOGD("[%s:%d] --------> edit mode: %d ", __PRETTY_FUNCTION__, __LINE__, tabUI->editMode);
+            elm_layout_text_set(elm_layout_content_get(tabUI->m_tab_layout, "action_bar"), "closetabs_text", "Close all");
+        } else {
+            tabUI->closeAllTabs();
+            elm_gengrid_realized_items_update(tabUI->m_gengrid);
+        }
     }
+
 }
 
 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, nullptr, this);
+    Elm_Object_Item* tabView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, _thumbSelected, itemData);
     m_map_tab_views.insert(std::pair<std::string,Elm_Object_Item*>(hi->getTitle(),tabView));
 
     // unselect by default
@@ -254,9 +266,7 @@ void TabUI::addTabItem(std::shared_ptr<tizen_browser::basic_webengine::TabConten
 void TabUI::addTabItems(std::vector<std::shared_ptr<tizen_browser::basic_webengine::TabContent>>items)
 {
     BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
-    //limiting number of added items to 10
-    auto eit = std::min(items.end(), items.begin() + 10);
-    for (auto it = items.begin(); it != eit; ++it) {
+    for (auto it = items.begin(); it < items.end(); it++) {
         addTabItem(*it);
     }
 }
@@ -292,12 +302,6 @@ Evas_Object * TabUI::_tab_grid_content_get(void *data, Evas_Object *obj, const c
         const char *part_name2 = "tab_thumbButton";
         static const int part_name2_len = strlen(part_name2);
 
-        if (!strncmp(part_name2, part, part_name2_len)) {
-            Evas_Object *thumbButton = elm_button_add(obj);
-            elm_object_style_set(thumbButton, "tab_thumbButton");
-            evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::TabUI::_thumbSelected, data);
-            return thumbButton;
-        }
         if (!strncmp(part_name1, part, part_name1_len)) {
             if (itemData->item->getThumbnail()) {
                 return tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->tabUI->m_parent);
@@ -317,8 +321,15 @@ void TabUI::_thumbSelected(void *data, Evas_Object*, void*)
     BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
     if (data) {
         TabItemData *itemData = static_cast<TabItemData*>(data);
-        itemData->tabUI->clearItems();
-        itemData->tabUI->tabClicked(itemData->item->getId());
+        if (!itemData->tabUI->editMode) {
+            itemData->tabUI->clearItems();
+            itemData->tabUI->tabClicked(itemData->item->getId());
+        } else {
+            itemData->tabUI->closeTabsClicked(itemData->item->getId());
+            Elm_Object_Item* it = elm_gengrid_selected_item_get(itemData->tabUI->m_gengrid);
+            elm_object_item_del(it);
+            elm_gengrid_realized_items_update(itemData->tabUI->m_gengrid);
+        }
     }
 }
 
@@ -339,6 +350,18 @@ Evas_Object* TabUI::createNoHistoryLabel()
     return label;
 }
 
+void TabUI::closeAllTabs()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    Elm_Object_Item* it = elm_gengrid_first_item_get(m_gengrid);
+    while (it) {
+        TabItemData *item = (TabItemData *)elm_object_item_data_get(it);
+        item->tabUI->closeTabsClicked(item->item->getId());
+        it = elm_gengrid_item_next_get(it);
+    }
+    hide();
+}
+
 void TabUI::setEmptyGengrid(bool setEmpty)
 {
     if (setEmpty) {
@@ -348,6 +371,16 @@ void TabUI::setEmptyGengrid(bool setEmpty)
     }
 }
 
+void TabUI::_focus_in(void * data, Evas*, Evas_Object * obj, void * event_info)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    Evas_Event_Mouse_In* ee  = (Evas_Event_Mouse_In*)event_info;
+    int x, y;
+    TabUI* tabUI = static_cast<TabUI*>(data);
+    Elm_Object_Item* it = elm_gengrid_at_xy_item_get(tabUI->m_gengrid, ee->canvas.x, ee->canvas.y, &x, &y);
+    if(it && tabUI->editMode)
+        elm_object_item_signal_emit(it, "selected", "over3");
+}
 
 }
 }
index 19d5507fea6d914c5387908d3d67ed1fbc7b3ea3..b83f1187de58d1dceb9c927352142690b98da4f0 100644 (file)
@@ -47,7 +47,7 @@ public:
     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 tizen_browser::basic_webengine::TabId&)> 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;
@@ -67,17 +67,19 @@ private:
     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);
+    static void _focus_in(void * data, Evas*, Evas_Object * obj, void * event_info);
 
     Evas_Object* createTabUILayout(Evas_Object* parent);
     Evas_Object* createActionBar(Evas_Object* parent);
     Evas_Object* createTopButtons(Evas_Object* parent);
     Evas_Object* createNoHistoryLabel();
     void createTabItemClass();
+    void closeAllTabs();
 
-private:
     Evas_Object *m_tab_layout;
     Evas_Object *m_gengrid;
     Evas_Object *m_parent;
+    bool editMode;
 
     Elm_Gengrid_Item_Class * m_item_class;
     std::map<std::string,Elm_Object_Item*> m_map_tab_views;
index 0094215f168feee9f96513251fb894ecd31d9b93..07f51923b30011e2c2b88059804947cdeaf438b8 100644 (file)
@@ -63,12 +63,12 @@ group { name: "elm/button/base/tab_thumbButton";
                }
                parts {
                        part { name: "elm.swallow.content";
-                               type: RECT;
+                       type: RECT;
                                mouse_events: 1;
                                repeat_events: 1;
                                description { state: "default" 0.0;
                                        color: 0 0 0 0;
-                                       visible: 1;
+                                       visible: 0;
                                        rel1.relative: 0.0 0.0;
                        rel2.relative: 1.0 1.0;
                        align: 0.0 0.0;
@@ -536,14 +536,62 @@ group { name: "elm/gengrid/item/tab_item/default";
                     //color: highlightTextColor;
                 }
                 }
+                               part { name: "click_ok_to_close_text";
+                                       type: TEXT;
+                                       description { state: "default" 0.0;
+                                               color: 0 119 246 204;
+                                               min: 300 48;
+                                               max: 300 48;
+                                               align: 0 0.5;
+                                               rel1 {
+                                                       to: "tab_thumbnail";
+                                                       offset: 10 150;
+                                                       relative: 0.0 0.0;
+                                               }
+                                               rel2 {
+                                                       to: "tab_thumbnail";
+                                                       relative: 1.0  1.0;
+                                                       }
+                                               text {
+                                               text: "[OK] to close";
+                                               font: "Sans";
+                                               size: 20;
+                                               align: 0.5 0.8;
+                                       }
+                                       visible: 0;
+                               }
+                               description { state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                               }
+
 
                part { name: "tab_thumbButton";
-                       type: SWALLOW;
-                       description { state: "default" 0.0;
-                               rel1.to: "tab_thumbnail";
-                               rel2.to: "tab_thumbnail";
+                       type: IMAGE;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description { state: "default" 0.0;
+                                       color: 0 119 246 204;
+                                       visible: 0;
+                                       rel1 {
+                                               to: "bg";
+                                               offset: 274 14;
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "bg";
+                                               offset: 324 64;
+                                               relative: 0.0 0.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       image.normal: "ico_delete.png";
+                               }
+                               description { state: "selected";
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
                        }
-               }
 
                part { name: "over2";
                        type: RECT;
@@ -561,7 +609,7 @@ group { name: "elm/gengrid/item/tab_item/default";
                        repeat_events: 1;
                        description { state: "default" 0.0;
                                color: 0 0 0 0;
-                               rel1.to: "background";
+                               rel1.to: "bg";
                                rel2.to: "background";
                        }
                }
@@ -583,6 +631,15 @@ group { name: "elm/gengrid/item/tab_item/default";
                        target:  "background";
                        target: "focus_highlight";
                        target: "bg";
+                       target: "tab_thumbButton";
+                       target: "click_ok_to_close_text";
+               }
+               program { name: "close_icon_show";
+                       signal: "selected";
+                       source: "over3";
+                       action: STATE_SET "selected" 0.0;
+                       target: "tab_thumbButton";
+                       target: "click_ok_to_close_text";
                }
        }
 }
@@ -900,7 +957,7 @@ group { name: "action_bar_layout";
                     visible: 1;
                 }
              }
-               part{
+               part {
                 name: "closetabs_text";
                 type: TEXT;
                 scale: 1;
@@ -911,7 +968,7 @@ group { name: "action_bar_layout";
                     rel2 { relative: 1.0 1.0;to: "closetabs_button";}
                     color: 0 0 0 255;
                     text {
-                        text: "Close all";
+                        text: "Close Tabs";
                         font: "Sans";
                         size: 27;
                         align: 0.5 0.5;
@@ -1108,7 +1165,6 @@ group { name: "action_bar_layout";
                 action: STATE_SET "highlight" 0.0;
                 target: "closetabs_button";
                 target: "closetabs_over";
-                target: "closetabs_text";
              }
             program {
                 name: "mouse_out_closetabs_click";
@@ -1117,7 +1173,6 @@ group { name: "action_bar_layout";
                 action: STATE_SET "default" 0.0;
                 target: "closetabs_button";
                 target: "closetabs_over";
-                target: "closetabs_text";
             }
            program {
                 name: "mouse_in_close_click";