From 10c8321f4203454f085cc7b4e3f1d6e212056c2c Mon Sep 17 00:00:00 2001 From: Eugene Kurzberg Date: Thu, 19 May 2016 10:57:44 +0300 Subject: [PATCH] Added required functionality to SearchItem in Contacts ListView. Change-Id: I87f8447bf857e4552245cb14a739f4a72bb336fe Signed-off-by: Eugene Kurzberg --- lib-contacts/inc/Contacts/List/SearchItem.h | 10 +++++- lib-contacts/src/Contacts/List/SearchItem.cpp | 36 +++++++++++++++---- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/lib-contacts/inc/Contacts/List/SearchItem.h b/lib-contacts/inc/Contacts/List/SearchItem.h index f34a6bf3..cf2124b4 100644 --- a/lib-contacts/inc/Contacts/List/SearchItem.h +++ b/lib-contacts/inc/Contacts/List/SearchItem.h @@ -19,6 +19,7 @@ #define CONTACTS_LIST_CONTACT_SEARCH_ITEM_H #include "Ui/GenlistItem.h" +#include namespace Contacts { @@ -33,21 +34,28 @@ namespace Contacts /** * @brief Entry change callback. */ - typedef std::function ChangeCallback; + typedef std::function ChangeCallback; /** * @brief Set entry changed callback */ void setChangeCallback(ChangeCallback callback); + /** + * @brief Clear search query. + */ + void clear(); + private: virtual Elm_Genlist_Item_Class *getItemClass() const override; virtual Evas_Object *getContent(Evas_Object *parent, const char *part) override; void onDonePressed(Evas_Object *entry, void *eventInfo); void onChanged(Evas_Object *entry, void *eventInfo); + void notifyChange(); ChangeCallback m_OnChanged; + std::string m_Text; }; } } diff --git a/lib-contacts/src/Contacts/List/SearchItem.cpp b/lib-contacts/src/Contacts/List/SearchItem.cpp index 9c59ddbf..6ed89598 100644 --- a/lib-contacts/src/Contacts/List/SearchItem.cpp +++ b/lib-contacts/src/Contacts/List/SearchItem.cpp @@ -22,13 +22,32 @@ using namespace Contacts::List; +void SearchItem::setChangeCallback(ChangeCallback callback) +{ + m_OnChanged = std::move(callback); +} + +void SearchItem::clear() +{ + Evas_Object *layout = elm_object_item_part_content_get(getObjectItem(), "elm.swallow.content"); + Ui::Editfield *editfield = static_cast(Ui::Control::getControl(layout)); + + if (editfield) { + elm_entry_entry_set(editfield->getEntry(), ""); + } else { + m_Text.clear(); + notifyChange(); + } +} + Evas_Object *SearchItem::getContent(Evas_Object *parent, const char *part) { Ui::Editfield *searchField = Ui::Editfield::create(parent, "IDS_PB_NPBODY_SEARCH"); Evas_Object *entry = searchField->getEntry(); + elm_entry_entry_set(entry, m_Text.c_str()); elm_entry_input_panel_return_key_autoenabled_set(entry, EINA_TRUE); - elm_entry_input_panel_return_key_type_set(entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE); + elm_entry_input_panel_return_key_type_set(entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_SEARCH); evas_object_smart_callback_add(entry, "changed", makeCallback(&SearchItem::onChanged), this); evas_object_smart_callback_add(entry, "activated", @@ -42,19 +61,22 @@ Elm_Genlist_Item_Class *SearchItem::getItemClass() const return &itc; } -void SearchItem::setChangeCallback(ChangeCallback callback) -{ - m_OnChanged = std::move(callback); -} - void SearchItem::onDonePressed(Evas_Object *entry, void *eventInfo) { elm_object_focus_set(entry, EINA_FALSE); } void SearchItem::onChanged(Evas_Object *entry, void *eventInfo) +{ + m_Text = elm_entry_entry_get(entry); + notifyChange(); +} + +void SearchItem::notifyChange() { if (m_OnChanged) { - m_OnChanged(); + char *text = elm_entry_markup_to_utf8(m_Text.c_str()); + m_OnChanged(text); + free(text); } } -- 2.34.1