enum Mode
{
ModeDefault,
+ ModeSinglepick,
ModeMultipick,
ModeMax
};
typedef std::vector<int> PersonIds;
/**
- * @brief Callback, that invokes when all results are prepared
- * @details Invokes on view close
+ * @brief Callback, that invoked when all results are prepared
+ * @details Invoked on view close
*/
typedef std::function<void(PersonIds)> ResultCallback;
PersonItem::Mode getItemMode(Mode viewMode);
- void updateTitle();
+ void updatePageMode();
+ void updateSectionMode();
void createNewContactButton();
void deleteNewContactButton();
void createCancelButton();
+ void deleteCancelButton();
void createDoneButton();
+ void deleteDoneButton();
void insertMyProfileGroupItem();
void updateMyProfileItem(const char *view_uri);
void onPersonInserted(Model::PersonPtr person);
void onPersonChanged(Model::PersonPtr person, contacts_changed_e changeType, PersonItem *item);
+ void onPersonSelected(const Model::Person &person);
void onItemChecked(PersonItem *item);
+ void onItemSelected(PersonItem *item);
Ui::Genlist *m_Genlist;
Evas_Object *m_Index;
Model::PersonProvider m_Provider;
- Mode m_ViewMode;
+ Mode m_Mode;
size_t m_PersonCount;
size_t m_CheckedCount;
m_CancelButton(nullptr), m_DoneButton(nullptr),
m_Sections{ nullptr },
m_Provider(PersonProvider(personFilter)),
- m_ViewMode(ModeDefault),
+ m_Mode(ModeDefault),
m_PersonCount(0), m_CheckedCount(0)
{
}
void ListView::setMode(Mode mode)
{
- if (m_ViewMode != mode) {
- m_ViewMode = mode;
+ if (m_Mode != mode) {
+ m_Mode = mode;
- updateTitle();
-
- for (size_t i = SectionFirst; i < SectionMax; ++i) {
- if (getSectionVisibility(mode, static_cast<SectionId>(i))) {
- addSection(static_cast<SectionId>(i));
- } else {
- removeSection(static_cast<SectionId>(i));
- }
- }
-
- if (mode == ModeDefault) {
- createNewContactButton();
- } else {
- deleteNewContactButton();
- }
+ updatePageMode();
+ updateSectionMode();
}
}
void ListView::onPageAttached()
{
- updateTitle();
+ updatePageMode();
createNewContactButton();
}
if (!m_Sections[SectionFavorites]) {
//Todo Create here Favorite group
} else {
- setFavouriteItemsMode(getItemMode(m_ViewMode));
+ setFavouriteItemsMode(getItemMode(m_Mode));
}
}
++m_PersonCount;
}
} else {
- setPersonItemsMode(getItemMode(m_ViewMode));
+ setPersonItemsMode(getItemMode(m_Mode));
}
}
bool ListView::getSectionVisibility(Mode mode, SectionId sectionId)
{
static bool sectionVisibility[ListView::ModeMax][ListView::SectionMax] = {
- /* ModeDefault = */ {
+ /* ModeDefault = */ {
/* SectionSearch = */ true,
/* SectionSelectAll = */ false,
/* SectionMyProfile = */ true,
/* SectionMfc = */ true,
/* SectionPerson = */ true
},
- /* ModeMultipick = */ {
+ /* ModeSinglepick = */ {
+ /* SectionSearch = */ true,
+ /* SectionSelectAll = */ false,
+ /* SectionMyProfile = */ true,
+ /* SectionFavorites = */ true,
+ /* SectionMfc = */ false,
+ /* SectionPerson = */ true
+ },
+ /* ModeMultipick = */ {
/* SectionSearch = */ true,
/* SectionSelectAll = */ true,
/* SectionMyProfile = */ false,
}
}
-void ListView::updateTitle()
+void ListView::updatePageMode()
{
- switch (m_ViewMode) {
+ switch (m_Mode) {
case ModeDefault:
getPage()->setTitle("IDS_PB_TAB_CONTACTS");
- evas_object_del(m_CancelButton);
- evas_object_del(m_DoneButton);
- m_CancelButton = nullptr;
- m_DoneButton = nullptr;
+ deleteCancelButton();
+ deleteDoneButton();
+ createNewContactButton();
+ break;
+ case ModeSinglepick:
+ getPage()->setTitle("IDS_PB_HEADER_SELECT_CONTACT_ABB2");
+
+ deleteCancelButton();
+ deleteDoneButton();
+ deleteNewContactButton();
break;
case ModeMultipick:
{
char title[TITLE_SIZE];
snprintf(title, TITLE_SIZE, _("IDS_PB_HEADER_PD_SELECTED_ABB"), m_CheckedCount);
-
getPage()->setTitle(title);
createCancelButton();
createDoneButton();
+ deleteNewContactButton();
break;
}
- default: break;
+ default:
+ break;
+ }
+}
+
+void ListView::updateSectionMode()
+{
+ for (size_t i = SectionFirst; i < SectionMax; ++i) {
+ SectionId sectionId = static_cast<SectionId>(i);
+ if (getSectionVisibility(m_Mode, sectionId)) {
+ addSection(sectionId);
+ } else {
+ removeSection(sectionId);
+ }
}
}
getPage()->setContent(PART_TITLE_LEFT, m_CancelButton);
}
+void ListView::deleteCancelButton()
+{
+ evas_object_del(m_CancelButton);
+ m_CancelButton = nullptr;
+}
+
void ListView::createDoneButton()
{
Evas_Object *m_DoneButton = elm_button_add(getEvasObject());
getPage()->setContent(PART_TITLE_RIGHT, m_DoneButton);
}
+void ListView::deleteDoneButton()
+{
+ evas_object_del(m_DoneButton);
+ m_DoneButton = nullptr;
+}
+
void ListView::insertMyProfileGroupItem()
{
auto group = new GroupItem("IDS_PB_HEADER_ME");
{
using namespace std::placeholders;
- PersonItem *item = new PersonItem(std::move(person), getItemMode(m_ViewMode));
+ PersonItem *item = new PersonItem(std::move(person), getItemMode(m_Mode));
m_Provider.setChangeCallback(item->getPerson(),
std::bind(&ListView::onPersonChanged, this, _1, _2, item));
-
- item->setSelectedCallback([this, item]() {
- switch (m_ViewMode) {
- case ModeDefault: launchPersonDetail(item); break;
- case ModeMultipick: onItemChecked(item); break;
- default: break;
- }
- });
+ item->setSelectedCallback(std::bind(&ListView::onItemSelected, this, item));
return item;
}
void ListView::launchPersonDetail(PersonItem *item)
{
- int id = 0;
- contacts_record_get_int(item->getPerson().getRecord(), _contacts_person.display_contact_id, &id);
+ int id = item->getPerson().getDisplayContactId();
getNavigator()->navigateTo(new Details::DetailsView(id));
}
}
}
+void ListView::onPersonSelected(const Model::Person &person)
+{
+ if (m_OnResult) {
+ m_OnResult({ person.getId() });
+ }
+}
+
void ListView::onItemChecked(PersonItem *item)
{
item->isChecked() ? ++m_CheckedCount : --m_CheckedCount;
- updateTitle();
+ updatePageMode();
//Todo: Make "Select all" calculations
}
+
+void ListView::onItemSelected(PersonItem *item)
+{
+ switch (m_Mode) {
+ case ModeDefault: launchPersonDetail(item); break;
+ case ModeSinglepick: onPersonSelected(item->getPerson()); break;
+ case ModeMultipick: onItemChecked(item); break;
+ default: break;
+ }
+}