typedef std::function<void()> DeleteCallback;
DataItem();
+ DataItem(const DataItem &);
virtual ~DataItem() { }
/**
{
}
+DataItem::DataItem(const DataItem &that)
+ : DataItem()
+{
+}
+
void DataItem::update(void *data)
{
m_Changes |= onUpdate(data);
private:
virtual Evas_Object *onCreate(Evas_Object *parent) override;
virtual void onPageAttached(Ui::NavigatorPage *page) override;
+ virtual bool onBackPressed() override;
void onCancelPressed(Evas_Object *button, void *eventInfo);
void onDonePressed(Evas_Object *button, void *eventInfo);
void onNameFilled(bool isFilled);
+ bool onCancel();
+ void createCancelPopup();
void save();
void getGroupMembers();
Model::Group m_Group;
+ Model::Group m_InitialGroup;
std::vector<int> m_GroupMembers;
Evas_Object *m_DoneButton;
* @param[in] record _contacts_group record
*/
explicit Group(contacts_record_h record);
+
+ /**
+ * @brief Create group object
+ * @param[in] that Group that will be copied
+ */
+ Group(const Group &that);
virtual ~Group() override;
/**
*/
bool operator<(const Group &that) const;
+ /**
+ * @brief Compares group's values
+ * @return True if name, ringtone path and members count are equal to @a that, otherwise false
+ */
+ bool operator==(const Group &that) const;
+
private:
friend class GroupsProvider;
const Utils::UniString &getSortValue() const;
#include "Contacts/Groups/InputView.h"
#include "Contacts/Groups/AddMembersItem.h"
-#include "Contacts/Groups/Model/Group.h"
#include "Contacts/Groups/Model/Queries.h"
#include "Contacts/Groups/NameItem.h"
#include "Contacts/Groups/RingtoneItem.h"
#include "Common/Database/RecordIterator.h"
#include "Common/Database/RecordUtils.h"
#include "Ui/Genlist.h"
+#include "Ui/Popup.h"
#include "Utils/Callback.h"
#include <algorithm>
using namespace Contacts::Groups::Model;
InputView::InputView(int id)
- : m_Group(id), m_DoneButton(nullptr), m_Genlist(nullptr),
+ : m_Group(id), m_InitialGroup(m_Group), m_DoneButton(nullptr), m_Genlist(nullptr),
m_AddMembersItem(nullptr)
{
}
page->setTitle("IDS_PB_HEADER_CREATE");
}
+bool InputView::onBackPressed()
+{
+ return onCancel();
+}
+
void InputView::onCancelPressed(Evas_Object *button, void *eventInfo)
{
- getPage()->close();
+ if (onCancel()) {
+ getPage()->close();
+ }
}
void InputView::onDonePressed(Evas_Object *button, void *eventInfo)
elm_object_disabled_set(m_DoneButton, !isFilled);
}
+bool InputView::onCancel()
+{
+ if (m_InitialGroup == m_Group) {
+ bool hasMembersChanged = false;
+ for (auto &&personId : m_AddMembersItem->getMembers()) {
+ auto it = std::find_if(m_GroupMembers.begin(), m_GroupMembers.end(), [personId](int id) {
+ return personId == id;
+ });
+
+ if (it == m_GroupMembers.end()) {
+ hasMembersChanged = true;
+ break;
+ }
+ }
+ if (!hasMembersChanged) {
+ return true;
+ }
+ }
+
+ createCancelPopup();
+ return false;
+}
+
+void InputView::createCancelPopup()
+{
+ Ui::Popup *popup = new Ui::Popup();
+ popup->create(getEvasObject());
+ popup->setTitle("IDS_PB_HEADER_DISCARD_CHANGES_ABB");
+ popup->setText("IDS_PB_POP_ALL_CHANGES_WILL_BE_DISCARDED");
+
+ popup->addButton("IDS_PB_BUTTON_CANCEL");
+ popup->addButton("IDS_PB_BUTTON_DISCARD_ABB", [this] {
+ getPage()->close();
+ return true;
+ });
+ popup->show();
+}
+
void InputView::save()
{
int groupId = m_Group.save();
#include "Contacts/Common/ContactSelectTypes.h"
#include "Contacts/Groups/InputView.h"
-#include "Contacts/Groups/Model/Group.h"
#include "Contacts/Groups/Model/MembersProvider.h"
#include "App/AppControlRequest.h"
m_MembersCount = Model::getMembersCount(getId());
}
+Group::Group(const Group &that)
+ : m_DbVersion(0), m_Type(that.m_Type), m_SortValue(that.m_SortValue),
+ m_MembersCount(that.m_MembersCount)
+{
+ contacts_record_clone(that.m_Record, &m_Record);
+}
+
Group::~Group()
{
if (isStandalone()) {
return getSortValue() < that.getSortValue();
}
+bool Group::operator==(const Group &that) const
+{
+ return (compareRecordsStr(m_Record, that.m_Record, _contacts_group.name)
+ && compareRecordsStr(m_Record, that.m_Record, _contacts_group.ringtone_path)
+ && (getMembersCount() == that.getMembersCount()));
+}
+
const Utils::UniString &Group::getSortValue() const
{
if (m_SortValue.getI18nStr().empty()) {