#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)
{
}
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);
}
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);
+ 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)
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);
});
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);
+}