Added filtering functionality to Genlist. 44/70544/2
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 19 May 2016 08:49:57 +0000 (11:49 +0300)
committerAleksandr Sapozhnik <a.sapozhnik@samsung.com>
Thu, 19 May 2016 18:49:23 +0000 (11:49 -0700)
Added filtering for PersonSearchItem and PersonGroupItem.

Change-Id: Id457e5e0a0cac0807dee17881ba423a6c31cfb08
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
lib-apps-common/inc/Ui/GenlistItem.h
lib-apps-common/src/Ui/GenlistItem.cpp
lib-contacts/inc/Contacts/List/PersonGroupItem.h
lib-contacts/inc/Contacts/List/PersonSearchItem.h
lib-contacts/src/Contacts/List/PersonGroupItem.cpp
lib-contacts/src/Contacts/List/PersonSearchItem.cpp

index 2b2b5a0d0e0616d7897cdec1eb2a8f0928bf4bf0..8739c5eeb7564d99adb7b9c1009b60316ff531eb 100644 (file)
@@ -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.
                 */
index fa6023290cef7a986a4c2b2aadde4938f9a3ee09..252719252ec402de2bad671afa3f413378dcb59d 100644 (file)
@@ -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;
index 24b6ff77181b9d7641ecfd0148499e3dbf4d7373..73bd577c349b55d3b735cd30e31b9621c12d6d17 100644 (file)
@@ -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;
index fd607e026dd452562ef59d8a0da040483ed8e03e..6598c0e644391218d3502e49f906be9204d91b93 100644 (file)
@@ -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;
 
index d1ca5ccc751d4d5bfbe7cab683752eda9afceb1b..116a14480df65b161246c2575df4ef3c0bdfdbd9 100644 (file)
@@ -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);
+}
index 320dc60b2c637d7826a4431cbe5eed29e8e36a64..8accb8250953b3079b55bfe5b569b116b67cdfad 100644 (file)
@@ -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());