From: Eugene Kurzberg Date: Thu, 19 May 2016 08:49:57 +0000 (+0300) Subject: Added filtering functionality to Genlist. X-Git-Tag: submit/tizen/20160524.113145~12 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e161659943da206dab6cae6183976db09c06b79a;p=profile%2Fmobile%2Fapps%2Fnative%2Fphone-contacts.git Added filtering functionality to Genlist. Added filtering for PersonSearchItem and PersonGroupItem. Change-Id: Id457e5e0a0cac0807dee17881ba423a6c31cfb08 Signed-off-by: Eugene Kurzberg --- diff --git a/lib-apps-common/inc/Ui/GenlistItem.h b/lib-apps-common/inc/Ui/GenlistItem.h index 2b2b5a0d..8739c5ee 100644 --- a/lib-apps-common/inc/Ui/GenlistItem.h +++ b/lib-apps-common/inc/Ui/GenlistItem.h @@ -158,14 +158,22 @@ namespace Ui /** * @brief Called whenever any item's state part needs to be updated - * @details Genlist will emit signal "elm,state,x,active" or - * "elm,state,x,passive" with part's name instead of 'x'. + * @details Genlist will emit signal "elm,state,x,active" or "elm,state,x,passive" + * with part's name instead of 'x'. * @param[in] parent Parent genlist * @param[in] part Name of the part * @return EINA_TRUE for active, EINA_FALSE for passive */ virtual Eina_Bool getState(Evas_Object *parent, const char *part) { return EINA_FALSE; } + /** + * @brief Called when genlist filter is set using elm_genlist_filter_set(). + * @param[in] parent Parent genlist + * @param[in] filter Filter to compare with + * @return Whether the item satisfies the filter. + */ + virtual Eina_Bool compare(Evas_Object *parent, void *filter) { return EINA_TRUE; } + /** * @brief Called after item was inserted into genlist. */ diff --git a/lib-apps-common/src/Ui/GenlistItem.cpp b/lib-apps-common/src/Ui/GenlistItem.cpp index fa602329..25271925 100644 --- a/lib-apps-common/src/Ui/GenlistItem.cpp +++ b/lib-apps-common/src/Ui/GenlistItem.cpp @@ -129,6 +129,7 @@ Elm_Genlist_Item_Class GenlistItem::createItemClass(const char *style, itc.func.text_get = makeCallback(&GenlistItem::getText); itc.func.content_get = makeCallback(&GenlistItem::getContent); itc.func.state_get = makeCallback(&GenlistItem::getState); + itc.func.filter_get = makeCallback(&GenlistItem::compare); itc.func.del = makeCallback(&GenlistItem::onDestroy); return itc; diff --git a/lib-contacts/inc/Contacts/List/PersonGroupItem.h b/lib-contacts/inc/Contacts/List/PersonGroupItem.h index 24b6ff77..73bd577c 100644 --- a/lib-contacts/inc/Contacts/List/PersonGroupItem.h +++ b/lib-contacts/inc/Contacts/List/PersonGroupItem.h @@ -57,6 +57,7 @@ namespace Contacts private: virtual char *getText(Evas_Object *parent, const char *part) override; + virtual Eina_Bool compare(Evas_Object *parent, void *filter) override; Utils::UniString m_Title; Elm_Object_Item *m_IndexItem; diff --git a/lib-contacts/inc/Contacts/List/PersonSearchItem.h b/lib-contacts/inc/Contacts/List/PersonSearchItem.h index fd607e02..6598c0e6 100644 --- a/lib-contacts/inc/Contacts/List/PersonSearchItem.h +++ b/lib-contacts/inc/Contacts/List/PersonSearchItem.h @@ -46,6 +46,7 @@ namespace Contacts private: virtual char *getText(Evas_Object *parent, const char *part) override; + virtual Eina_Bool compare(Evas_Object *parent, void *filter) override; std::string getHighlightedStr() const; diff --git a/lib-contacts/src/Contacts/List/PersonGroupItem.cpp b/lib-contacts/src/Contacts/List/PersonGroupItem.cpp index d1ca5ccc..116a1448 100644 --- a/lib-contacts/src/Contacts/List/PersonGroupItem.cpp +++ b/lib-contacts/src/Contacts/List/PersonGroupItem.cpp @@ -55,3 +55,8 @@ char *PersonGroupItem::getText(Evas_Object *parent, const char *part) return nullptr; } + +Eina_Bool PersonGroupItem::compare(Evas_Object *parent, void *filter) +{ + return !(filter && *(const char *) filter); +} diff --git a/lib-contacts/src/Contacts/List/PersonSearchItem.cpp b/lib-contacts/src/Contacts/List/PersonSearchItem.cpp index 320dc60b..8accb825 100644 --- a/lib-contacts/src/Contacts/List/PersonSearchItem.cpp +++ b/lib-contacts/src/Contacts/List/PersonSearchItem.cpp @@ -60,6 +60,15 @@ char *PersonSearchItem::getText(Evas_Object *parent, const char *part) return PersonItem::getText(parent, part); } +Eina_Bool PersonSearchItem::compare(Evas_Object *parent, void *filter) +{ + const char *str = filter ? (const char *) filter : ""; + bool isEqual = m_SearchData->compare(str); + + setSearchData(m_SearchData); + return isEqual; +} + std::string PersonSearchItem::getHighlightedStr() const { return highlightStr(m_SearchData->getMatchedString(), m_SearchData->getMatchedSubstring());