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);
*/
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
*/
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.
*/
ResultType getResultType() const;
protected:
+ friend class DetailsView;
+
/**
* @see GenlistItem::getItemClass()
*/
ResultType m_ResultType;
SelectCallback m_OnSelected;
- RemoveCallback m_OnRemove;
};
}
}
addFieldItem(field.cast<ContactObject>());
} else {
field.setUpdateCallback(std::bind(&DetailsView::onObjectUpdated,
- this, _1, _2));
+ this, nullptr, _1, _2));
}
break;
default:
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;
}
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());
}
}
+ item->getObject().setUpdateCallback(std::bind(&DetailsView::onObjectUpdated,
+ this, nullptr, _1, _2));
+
delete item;
}
}
}
-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);
}
}
}
: 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)
m_OnSelected = std::move(callback);
}
-void FieldItem::setRemoveCallback(RemoveCallback callback)
-{
- m_OnRemove = std::move(callback);
-}
-
ContactObject &FieldItem::getObject() const
{
return m_Object;
{
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);
- }
- }
}
}