TizenRefApp-6682 Implement multi button entry in the List Selection View 24/83424/2
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Wed, 10 Aug 2016 14:46:15 +0000 (17:46 +0300)
committerEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 11 Aug 2016 11:17:11 +0000 (04:17 -0700)
Change-Id: Ia7951a994980d3664ba98028398d5b95ae1b653f
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
lib-contacts/inc/Contacts/Chooser/ContactsGroupsNavigator.h
lib-contacts/src/Contacts/Chooser/ContactsGroupsNavigator.cpp

index 93afb8b..a5b8b7a 100644 (file)
@@ -22,6 +22,7 @@
 
 namespace Ux
 {
+       class SelectItem;
        class SelectView;
 }
 
@@ -47,14 +48,30 @@ namespace Contacts
                         */
                        void addGroupsView(Ux::SelectView *view);
 
+                       /**
+                        * @brief Add selected item to be displayed in multi-button control.
+                        * @param[in]   item    Selected item to add button for
+                        */
+                       void addSelectedItem(Ux::SelectItem *item);
+
+                       /**
+                        * @brief Remove item from multi-button control.
+                        * @param[in]   item    Genlist item associated with button item
+                        */
+                       void removeSelectedItem(Ux::SelectItem *item);
+
                protected:
                        virtual void onCreated() override;
                        virtual void onPageAttached(Ui::NavigatorPage *page) override;
                        virtual Ui::TabPage *createPage(Ui::View *view, Elm_Object_Item *item) override;
 
+                       void onButtonPressed(Evas_Object *obj, Elm_Object_Item *button);
+
                        Ux::SelectView *m_ContactsView;
                        Ux::SelectView *m_GroupsView;
+
                        Evas_Object *m_TitleLayout;
+                       Evas_Object *m_MultiBtn;
                };
        }
 }
index 0930a83..dc7e4d4 100644 (file)
 
 #include "Contacts/Chooser/ContactsGroupsNavigator.h"
 #include "Contacts/Chooser/ContactsPage.h"
+#include "Contacts/List/PersonSearchItem.h"
 
 #include "App/Path.h"
 #include "Ui/Hoversel.h"
+#include "Ui/ListPopup.h"
+#include "Ux/SelectItem.h"
 #include "Ux/SelectView.h"
+#include "Utils/Callback.h"
 
 #include "ChooserTitleLayout.h"
 
+using namespace Contacts;
 using namespace Contacts::Chooser;
 
 ContactsGroupsNavigator::ContactsGroupsNavigator()
        : TabNavigator(new Ui::Hoversel()),
          m_ContactsView(nullptr), m_GroupsView(nullptr),
-         m_TitleLayout(nullptr)
+         m_TitleLayout(nullptr), m_MultiBtn(nullptr)
 {
 }
 
@@ -45,10 +50,47 @@ void ContactsGroupsNavigator::addGroupsView(Ux::SelectView *view)
        addView(m_GroupsView);
 }
 
+void ContactsGroupsNavigator::addSelectedItem(Ux::SelectItem *item)
+{
+       if (!elm_multibuttonentry_items_get(m_MultiBtn)) {
+               elm_object_part_content_set(m_TitleLayout, PART_MULTI_BTN, m_MultiBtn);
+       }
+
+       const char *name = static_cast<List::PersonSearchItem *>(item)->getPerson().getName();
+       elm_multibuttonentry_item_append(m_MultiBtn, name, nullptr, item);
+}
+
+void ContactsGroupsNavigator::removeSelectedItem(Ux::SelectItem *item)
+{
+       const Eina_List *items = elm_multibuttonentry_items_get(m_MultiBtn);
+       const Eina_List *node = nullptr;
+       void *data = nullptr;
+
+       EINA_LIST_FOREACH(items, node, data) {
+               Elm_Object_Item *button = (Elm_Object_Item *) data;
+               if (elm_object_item_data_get(button) == item) {
+                       elm_object_item_del(button);
+                       break;
+               }
+       }
+
+       if (!elm_multibuttonentry_items_get(m_MultiBtn)) {
+               elm_object_part_content_unset(m_TitleLayout, PART_MULTI_BTN);
+               evas_object_hide(m_MultiBtn);
+       }
+}
+
 void ContactsGroupsNavigator::onCreated()
 {
        m_TitleLayout = elm_layout_add(getEvasObject());
        elm_layout_file_set(m_TitleLayout, App::getResourcePath(CHOOSER_TITLE_EDJ).c_str(), GROUP_CHOOSER_TITLE);
+
+       m_MultiBtn = elm_multibuttonentry_add(m_TitleLayout);
+       elm_multibuttonentry_editable_set(m_MultiBtn, EINA_FALSE);
+       elm_multibuttonentry_expanded_set(m_MultiBtn, EINA_FALSE);
+       evas_object_smart_callback_add(m_MultiBtn, "item,selected",
+                       (Evas_Smart_Cb) makeCallback(&ContactsGroupsNavigator::onButtonPressed), this);
+
        elm_object_part_content_set(m_TitleLayout, PART_SELECTOR, getSelector()->create(m_TitleLayout));
 }
 
@@ -66,3 +108,16 @@ Ui::TabPage *ContactsGroupsNavigator::createPage(Ui::View *view, Elm_Object_Item
 
        return TabNavigator::createPage(view, item);
 }
+
+void ContactsGroupsNavigator::onButtonPressed(Evas_Object *obj, Elm_Object_Item *button)
+{
+       elm_multibuttonentry_item_selected_set(button, EINA_FALSE);
+
+       auto popup = new Ui::ListPopup();
+       popup->create(getEvasObject());
+       popup->setTitle(elm_object_item_text_get(button));
+       popup->addItem("IDS_PB_OPT_REMOVE", [button] {
+               auto item = (Ux::SelectItem *) elm_object_item_data_get(button);
+               item->setChecked(false);
+       });
+}