TizenRefApp-7009 Implement scrolling of area with selected contacts in the Contact... 46/85646/2
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Fri, 26 Aug 2016 08:43:54 +0000 (11:43 +0300)
committerAleksandr Sapozhnik <a.sapozhnik@samsung.com>
Mon, 29 Aug 2016 10:06:34 +0000 (03:06 -0700)
Change-Id: I80f73d93e8fdb0c760f466b55f83c3c2d2a6eda1
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
lib-apps-common/src/Ui/Scale.cpp
lib-contacts/inc/Contacts/Chooser/ContactsGroupsNavigator.h
lib-contacts/src/Contacts/Chooser/ContactsGroupsNavigator.cpp

index 4cd99a0..ecf9a70 100644 (file)
@@ -22,5 +22,5 @@
 int Ui::getScaledValue(int value)
 {
        static double factor = elm_config_scale_get() / elm_app_base_scale_get();
-       return value * factor;
+       return round(value * factor);
 }
index a5b8b7a..33846cc 100644 (file)
@@ -65,13 +65,18 @@ namespace Contacts
                        virtual void onPageAttached(Ui::NavigatorPage *page) override;
                        virtual Ui::TabPage *createPage(Ui::View *view, Elm_Object_Item *item) override;
 
+                       Evas_Object *createMultiBtn(Evas_Object *parent);
+                       Evas_Object *createMultiBtnScroller(Evas_Object *parent);
+
                        void onButtonPressed(Evas_Object *obj, Elm_Object_Item *button);
+                       void onMultiBtnResized(Evas *e, Evas_Object *obj, void *eventInfo);
 
                        Ux::SelectView *m_ContactsView;
                        Ux::SelectView *m_GroupsView;
 
                        Evas_Object *m_TitleLayout;
                        Evas_Object *m_MultiBtn;
+                       Evas_Object *m_MultiBtnBox;
                };
        }
 }
index ffd62b7..08151fe 100644 (file)
 #include "App/Path.h"
 #include "Ui/Hoversel.h"
 #include "Ui/ListPopup.h"
+#include "Ui/Scale.h"
 #include "Ux/SelectItem.h"
 #include "Ux/SelectView.h"
 #include "Utils/Callback.h"
 
 #include "ChooserTitleLayout.h"
 
+#define MULTI_BTN_TB 20
+#define MULTI_BTN_ITEM_H 76
+#define MULTI_BTN_LINE_MAX 3
+
 using namespace Contacts;
 using namespace Contacts::Chooser;
 
 ContactsGroupsNavigator::ContactsGroupsNavigator()
        : TabNavigator(new Ui::Hoversel()),
          m_ContactsView(nullptr), m_GroupsView(nullptr),
-         m_TitleLayout(nullptr), m_MultiBtn(nullptr)
+         m_TitleLayout(nullptr), m_MultiBtn(nullptr), m_MultiBtnBox(nullptr)
 {
 }
 
@@ -53,10 +58,6 @@ void ContactsGroupsNavigator::addGroupsView(Ux::SelectView *view)
 
 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::PersonItem *>(item)->getPerson().getName();
        elm_multibuttonentry_item_append(m_MultiBtn, name, nullptr, item);
 }
@@ -74,11 +75,6 @@ void ContactsGroupsNavigator::removeSelectedItem(Ux::SelectItem *item)
                        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()
@@ -86,13 +82,12 @@ 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);
+       Evas_Object *scroller = createMultiBtnScroller(m_TitleLayout);
+       m_MultiBtn = createMultiBtn(scroller);
+       elm_object_content_set(scroller, m_MultiBtn);
 
        elm_object_part_content_set(m_TitleLayout, PART_SELECTOR, getSelector()->create(m_TitleLayout));
+       elm_object_part_content_set(m_TitleLayout, PART_MULTI_BTN, m_MultiBtnBox);
 }
 
 void ContactsGroupsNavigator::onPageAttached(Ui::NavigatorPage *page)
@@ -118,6 +113,34 @@ Ui::TabPage *ContactsGroupsNavigator::createPage(Ui::View *view, Elm_Object_Item
        return page;
 }
 
+Evas_Object *ContactsGroupsNavigator::createMultiBtn(Evas_Object *parent)
+{
+       Evas_Object *multiBtn = elm_multibuttonentry_add(parent);
+       elm_multibuttonentry_editable_set(multiBtn, EINA_FALSE);
+       elm_multibuttonentry_expanded_set(multiBtn, EINA_FALSE);
+       evas_object_smart_callback_add(multiBtn, "item,selected",
+                       (Evas_Smart_Cb) makeCallback(&ContactsGroupsNavigator::onButtonPressed), this);
+       evas_object_event_callback_add(multiBtn, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+                       makeCallback(&ContactsGroupsNavigator::onMultiBtnResized), this);
+
+       evas_object_size_hint_weight_set(multiBtn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(multiBtn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       return multiBtn;
+}
+
+Evas_Object *ContactsGroupsNavigator::createMultiBtnScroller(Evas_Object *parent)
+{
+       m_MultiBtnBox = elm_box_add(parent);
+       Evas_Object *scroller = elm_scroller_add(m_MultiBtnBox);
+       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(scroller);
+       elm_box_pack_end(m_MultiBtnBox, scroller);
+
+       return scroller;
+}
+
 void ContactsGroupsNavigator::onButtonPressed(Evas_Object *obj, Elm_Object_Item *button)
 {
        elm_multibuttonentry_item_selected_set(button, EINA_FALSE);
@@ -131,3 +154,19 @@ void ContactsGroupsNavigator::onButtonPressed(Evas_Object *obj, Elm_Object_Item
        });
        popup->show();
 }
+
+void ContactsGroupsNavigator::onMultiBtnResized(Evas *e, Evas_Object *obj, void *eventInfo)
+{
+       static int maxHeight = Ui::getScaledValue(MULTI_BTN_ITEM_H) * MULTI_BTN_LINE_MAX
+                       + Ui::getScaledValue(MULTI_BTN_TB) * 2;
+
+       int w = 0, h = 0;
+       if (elm_multibuttonentry_items_get(m_MultiBtn)) {
+               evas_object_size_hint_min_get(m_MultiBtn, &w, &h);
+               if (h > maxHeight) {
+                       h = maxHeight;
+               }
+       }
+
+       evas_object_size_hint_min_set(m_MultiBtnBox, w, h);
+}