namespace Ux
{
+ class SelectItem;
class SelectView;
}
*/
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;
};
}
}
#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)
{
}
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));
}
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);
+ });
+}