Moved DetailsView item "remove on update" logic to the view. 89/59689/1
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Tue, 16 Feb 2016 08:45:17 +0000 (10:45 +0200)
committerEugene Kurzberg <i.kurtsberg@samsung.com>
Wed, 17 Feb 2016 10:59:25 +0000 (12:59 +0200)
Change-Id: I6ccec7818aafd3df3c275dba86a19e1b24c73e50
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
lib-contact/inc/Contacts/Details/DetailsView.h
lib-contact/inc/Contacts/Details/FieldItem.h
lib-contact/src/Contacts/Details/DetailsView.cpp
lib-contact/src/Contacts/Details/FieldItem.cpp

index ce7e1de5181208c06c1e630deb7fc8b4371805ad..4fbbb0c10c298b29df40d2a3db0104d9b335beac 100644 (file)
@@ -94,7 +94,7 @@ namespace Contacts
                        void onMultiSelected();
 
                        void onArrayUpdated(Model::ContactField &field, contacts_changed_e change);
-                       void onObjectUpdated(Model::ContactField &field, contacts_changed_e change);
+                       void onObjectUpdated(FieldItem *item, Model::ContactField &field, contacts_changed_e change);
 
                        void onDonePressed(Evas_Object *button, void *eventInfo);
                        void onCancelPressed(Evas_Object *button, void *eventInfo);
index 8f440b5274320ddff7734aa3df60c2ba0b31e7d4..de2235516143d5e0a764b41050cf323602516f82 100644 (file)
@@ -44,12 +44,6 @@ namespace Contacts
                         */
                        typedef std::function<void(SelectResult)> SelectCallback;
 
-                       /**
-                        * @brief Remove field callback.
-                        * @param[in]   Genlist item to be removed
-                        */
-                       typedef std::function<void(FieldItem *)> RemoveCallback;
-
                        /**
                         * @brief Create genlist item representing ContactObject.
                         * @param[in]   object  Contact field of TypeObject type
@@ -69,12 +63,6 @@ namespace Contacts
                         */
                        void setSelectCallback(SelectCallback callback);
 
-                       /**
-                        * @brief Set remove field callback.
-                        * @param[in]   callback    Callback to be called when the item needs to be removed.
-                        */
-                       void setRemoveCallback(RemoveCallback callback);
-
                        /**
                         * @return ContactField associated with the item.
                         */
@@ -96,6 +84,8 @@ namespace Contacts
                        ResultType getResultType() const;
 
                protected:
+                       friend class DetailsView;
+
                        /**
                         * @see GenlistItem::getItemClass()
                         */
@@ -135,7 +125,6 @@ namespace Contacts
                        ResultType m_ResultType;
 
                        SelectCallback m_OnSelected;
-                       RemoveCallback m_OnRemove;
                };
        }
 }
index edd865ba2de6383eeeb929109d474f5add447f93..1eb24eb082140263083542f50b29c6e2247ac5b4 100644 (file)
@@ -130,7 +130,7 @@ void DetailsView::onCreated()
                                        addFieldItem(field.cast<ContactObject>());
                                } else {
                                        field.setUpdateCallback(std::bind(&DetailsView::onObjectUpdated,
-                                                       this, _1, _2));
+                                                       this, nullptr, _1, _2));
                                }
                                break;
                        default:
@@ -275,7 +275,6 @@ FieldItem *DetailsView::createFieldItem(ContactObject &field)
        item->setSelectMode(m_SelectMode, m_ResultType);
        item->setSelectCallback(std::bind(&DetailsView::onSingleSelected, this, _1));
        item->setCheckCallback(std::bind(&DetailsView::onItemChecked, this, _1));
-       item->setRemoveCallback(std::bind(&DetailsView::removeFieldItem, this, _1));
 
        return item;
 }
@@ -302,14 +301,15 @@ FieldItem *DetailsView::addFieldItem(ContactObject &field)
                m_Items[fieldId] = item;
        }
 
+       field.setUpdateCallback(std::bind(&DetailsView::onObjectUpdated,
+                       this, item, _1, _2));
+
        return item;
 }
 
 void DetailsView::removeFieldItem(FieldItem *item)
 {
        ContactFieldId fieldId = ContactFieldId(item->getObject().getId());
-       item->getObject().setUpdateCallback(std::bind(&DetailsView::onObjectUpdated,
-                       this, _1, _2));
 
        if (item == m_Items[fieldId]) {
                FieldItem *nextItem = static_cast<FieldItem *>(item->getNextItem());
@@ -320,6 +320,9 @@ void DetailsView::removeFieldItem(FieldItem *item)
                }
        }
 
+       item->getObject().setUpdateCallback(std::bind(&DetailsView::onObjectUpdated,
+                       this, nullptr, _1, _2));
+
        delete item;
 }
 
@@ -361,11 +364,23 @@ void DetailsView::onArrayUpdated(ContactField &field, contacts_changed_e change)
        }
 }
 
-void DetailsView::onObjectUpdated(ContactField &field, contacts_changed_e change)
+void DetailsView::onObjectUpdated(FieldItem *item, ContactField &field, contacts_changed_e change)
 {
        if (change == CONTACTS_CHANGE_UPDATED) {
-               if (!field.isEmpty()) {
-                       addFieldItem(field.getParent()->cast<ContactObject>());
+               if (item) {
+                       if (field.isEmpty()) {
+                               removeFieldItem(item);
+                       } else {
+                               item->onFieldUpdated(field, change);
+                       }
+               } else {
+                       if (!field.isEmpty()) {
+                               addFieldItem(field.getParent()->cast<ContactObject>());
+                       }
+               }
+       } else if (change == CONTACTS_CHANGE_DELETED) {
+               if (item) {
+                       removeFieldItem(item);
                }
        }
 }
index fec5961f876aba2bfec6491402f49316e73caadb..bfcaf07d47b33377c3567e5b8412cf7ead3ca440 100644 (file)
@@ -34,7 +34,6 @@ FieldItem::FieldItem(ContactObject &object)
        : m_Object(object), m_Field(*object.getField(0)),
          m_SelectMode(SelectNone), m_ResultType(ResultNone)
 {
-       m_Object.setUpdateCallback(std::bind(&FieldItem::onFieldUpdated, this, _1, _2));
 }
 
 void FieldItem::setSelectMode(SelectMode mode, ResultType type)
@@ -49,11 +48,6 @@ void FieldItem::setSelectCallback(SelectCallback callback)
        m_OnSelected = std::move(callback);
 }
 
-void FieldItem::setRemoveCallback(RemoveCallback callback)
-{
-       m_OnRemove = std::move(callback);
-}
-
 ContactObject &FieldItem::getObject() const
 {
        return m_Object;
@@ -138,11 +132,5 @@ void FieldItem::onFieldUpdated(ContactField &field, contacts_changed_e change)
 {
        if (&field == &m_Field) {
                elm_genlist_item_fields_update(getObjectItem(), "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
-       } else if (&field == &m_Object) {
-               if (change == CONTACTS_CHANGE_DELETED || field.isEmpty()) {
-                       if (m_OnRemove) {
-                               m_OnRemove(this);
-                       }
-               }
        }
 }