class Genlist;
class GenItem;
class GenGroupItem;
+ class CheckItem;
}
namespace Contacts
virtual Evas_Object *onCreate(Evas_Object *parent) override;
virtual void onMenuPressed() override;
virtual void onSelectAllInsert(Ui::GenItem *item) override;
+ virtual void onSelectModeChanged(Ux::SelectMode selectMode) override;
+ virtual void onSelectCountChanged(size_t selectCount) override;
+
+ void updateSelectAllItem();
+ void updateNotAssignedItem();
void updateCreateItem();
+ bool onNotAssignedChecked(bool isChecked);
+
void onInserted(::Model2::DataItem &data);
GroupItem *createItem(Model::Group &group);
void insertItem(GroupItem *item);
void deleteMembers(const std::vector<int> &groupIds);
Ui::Genlist *m_Genlist;
- CreateGroupItem *m_CreateItem;
- Model::GroupsProvider m_Provider;
Ui::GenGroupItem *m_GroupsItem;
std::vector<GroupItem *> m_MainItems;
+ Ui::GenItemPtr m_SelectAllItem;
+ Ui::CheckItem *m_NotAssignedItem;
+ CreateGroupItem *m_CreateItem;
+
bool m_IsAssignMode;
int m_NewGroupId;
+ Model::GroupsProvider m_Provider;
};
}
}
using namespace Ux;
GroupsView::GroupsView()
- : m_Genlist(nullptr), m_CreateItem(nullptr), m_GroupsItem(nullptr),
+ : m_Genlist(nullptr), m_GroupsItem(nullptr),
+ m_NotAssignedItem(nullptr), m_CreateItem(nullptr),
m_IsAssignMode(false), m_NewGroupId(0)
{
auto strings = getSelectViewStrings();
void GroupsView::setAssignMode(bool isEnabled)
{
m_IsAssignMode = isEnabled;
+ updateSelectAllItem();
+ updateNotAssignedItem();
updateCreateItem();
}
}
});
+ updateNotAssignedItem();
updateCreateItem();
return m_Genlist->getEvasObject();
}
void GroupsView::onSelectAllInsert(GenItem *item)
{
- m_Genlist->insert(item, nullptr, nullptr, Genlist::After);
+ m_SelectAllItem = item->getWeakPtr();
+ updateSelectAllItem();
+}
+
+void GroupsView::onSelectModeChanged(SelectMode selectMode)
+{
+ updateNotAssignedItem();
+}
+
+void GroupsView::onSelectCountChanged(size_t selectCount)
+{
+ if (m_NotAssignedItem) {
+ m_NotAssignedItem->setChecked(selectCount == 0);
+ }
+}
+
+void GroupsView::updateSelectAllItem()
+{
+ Ui::GenItem *item = m_SelectAllItem.lock().get();
+ if (!item) {
+ return;
+ }
+ if (m_IsAssignMode == !item->isInserted()) {
+ return;
+ }
+
+ if (m_IsAssignMode) {
+ item->pop();
+ } else {
+ m_Genlist->insert(item, nullptr, nullptr, Genlist::After);
+ }
+}
+
+void GroupsView::updateNotAssignedItem()
+{
+ if (!m_Genlist) {
+ return;
+ }
+
+ bool shouldExist = m_IsAssignMode && (getSelectMode() == SelectMulti);
+ if (shouldExist == (m_NotAssignedItem != nullptr)) {
+ return;
+ }
+
+ if (shouldExist) {
+ m_NotAssignedItem = new Ux::SelectAllItem("IDS_PB_BODY_NOT_ASSIGNED");
+ m_NotAssignedItem->setChecked(getSelectCount() == 0);
+ m_NotAssignedItem->setCheckCallback(std::bind(&GroupsView::onNotAssignedChecked, this, _1));
+ m_Genlist->insert(m_NotAssignedItem, nullptr, nullptr, Genlist::After);
+ } else {
+ delete m_NotAssignedItem;
+ m_NotAssignedItem = nullptr;
+ }
}
void GroupsView::updateCreateItem()
if (!m_Genlist) {
return;
}
+ if (m_IsAssignMode == (m_CreateItem != nullptr)) {
+ return;
+ }
if (m_IsAssignMode) {
- if (!m_CreateItem) {
- m_CreateItem = new CreateGroupItem();
- m_CreateItem->setResultCallback([this](int groupId) {
- m_NewGroupId = groupId;
- });
- m_Genlist->insert(m_CreateItem);
- elm_genlist_item_select_mode_set(m_CreateItem->getObjectItem(), ELM_OBJECT_SELECT_MODE_NONE);
- }
+ m_CreateItem = new CreateGroupItem();
+ m_CreateItem->setResultCallback([this](int groupId) {
+ m_NewGroupId = groupId;
+ });
+ m_Genlist->insert(m_CreateItem);
+ elm_genlist_item_select_mode_set(m_CreateItem->getObjectItem(), ELM_OBJECT_SELECT_MODE_NONE);
} else {
- if (m_CreateItem) {
- delete m_CreateItem;
- m_CreateItem = nullptr;
- }
+ delete m_CreateItem;
+ m_CreateItem = nullptr;
+ }
+}
+
+bool GroupsView::onNotAssignedChecked(bool isChecked)
+{
+ if (isChecked == (getSelectCount() == 0)) {
+ return true;
+ }
+
+ if (!isChecked) {
+ return false;
+ }
+
+ for (auto &&item : getSelectItems()) {
+ item->setChecked(false);
}
+ return true;
}
void GroupsView::onInserted(::Model2::DataItem &data)
void ContactGroupsFieldItem::onSelected()
{
+ pickGroups();
+}
+
+void ContactGroupsFieldItem::onFocused()
+{
+ pickGroups();
+}
+
+std::string ContactGroupsFieldItem::formatGroups() const
+{
+ std::string groups;
+ for (auto &&field : m_GroupRels) {
+ const char *name = getRecordStr(field.getRecord(), _contacts_group_relation.name);
+ GroupType type = getGroupType(name);
+ const char *groupName = (type == GroupCustom) ? name : _(getDefaultGroupName(type));
+ if (!groups.empty()) {
+ groups.append(", ");
+ }
+ groups.append(groupName);
+ }
+
+ return groups;
+}
+
+void ContactGroupsFieldItem::pickGroups()
+{
Ui::Navigator *navigator = getParent()->findParent<Ui::Navigator>();
if (!navigator) {
return;
auto view = new GroupsView();
view->setAssignMode(true);
view->setSelectMode(Ux::SelectMulti);
+ view->setEmptyResultAllowed(true);
view->setSelectCallback(std::bind(&ContactGroupsFieldItem::onGroupsSelected, this, _1));
navigator->navigateTo(view);
update();
return true;
}
-
-std::string ContactGroupsFieldItem::formatGroups() const
-{
- std::string groups;
- for (auto &&field : m_GroupRels) {
- const char *name = getRecordStr(field.getRecord(), _contacts_group_relation.name);
- GroupType type = getGroupType(name);
- const char *groupName = (type == GroupCustom) ? name : _(getDefaultGroupName(type));
- if (!groups.empty()) {
- groups.append(", ");
- }
- groups.append(groupName);
- }
-
- return groups;
-}