--- a/phonebookui/pbkcommonui/src/cntfavoritesmemberview.cpp Thu May 27 12:45:19 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntfavoritesmemberview.cpp Fri Jun 11 13:29:23 2010 +0300
@@ -16,8 +16,8 @@
*/
#include "cntfavoritesmemberview.h"
-#include "cntgroupselectionpopup.h"
-#include "qtpbkglobal.h"
+#include "cntfetchcontactsview.h"
+#include "cntglobal.h"
#include <hblistview.h>
#include <hbmenu.h>
@@ -29,7 +29,8 @@
#include <hbview.h>
#include <hbaction.h>
#include <hblabel.h>
-#include <mobcntmodel.h>
+#include <hbparameterlengthlimiter.h>
+#include <cntlistmodel.h>
#include <hbframebackground.h>
#include <xqservicerequest.h>
@@ -39,7 +40,8 @@
mContact(NULL),
mModel(NULL),
mFavoriteListView(NULL),
-mViewManager(NULL)
+mViewManager(NULL),
+mFetchView(NULL)
{
bool ok = false;
mDocumentLoader.load(CNT_FAVORITESMEMBERVIEW_XML, &ok);
@@ -131,28 +133,66 @@
void CntFavoritesMemberView::manageFavorites()
{
- // call a dialog to display the contacts
- CntGroupSelectionPopup *groupSelectionPopup = new CntGroupSelectionPopup(mViewManager->contactManager(SYMBIAN_BACKEND), mContact);
-
- groupSelectionPopup->populateListOfContact();
-
- groupSelectionPopup->open(this, SLOT(handleManageFavorites(HbAction*)));
+ QContactRelationshipFilter membersFilter;
+ membersFilter.setRelationshipType(QContactRelationship::HasMember);
+ membersFilter.setRelatedContactRole(QContactRelationship::First);
+ membersFilter.setRelatedContactId(mContact->id());
+ mOriginalGroupMembers = getContactManager()->contactIds(membersFilter).toSet();
+
+ if (!mFetchView) {
+ mFetchView = new CntFetchContacts(getContactManager());
+ connect(mFetchView, SIGNAL(clicked()), this, SLOT(handleManageFavorites()));
+ }
+ mFetchView->setDetails(hbTrId("txt_phob_subtitle_favorites"), hbTrId("txt_common_button_save"));
+ mFetchView->displayContacts(CntFetchContacts::popup,
+ HbAbstractItemView::MultiSelection,
+ mOriginalGroupMembers);
}
-void CntFavoritesMemberView::handleManageFavorites(HbAction *action)
+void CntFavoritesMemberView::handleManageFavorites()
{
- CntGroupSelectionPopup *groupSelectionPopup = static_cast<CntGroupSelectionPopup*>(sender());
+ QSet<QContactLocalId> selectedContacts = mFetchView->getSelectedContacts();
+ bool saveChanges = !mFetchView->wasCanceled();
+
+ delete mFetchView;
+ mFetchView = 0;
- if (groupSelectionPopup && action == groupSelectionPopup->actions().first())
- {
- groupSelectionPopup->saveOldGroup();
+ if (!saveChanges) {
+ return;
}
+
+ for (int i = 0; i < 2; ++i) {
+ // first iteration processes added members, second removed members
+ QSet<QContactLocalId> members = (i == 0 ? selectedContacts - mOriginalGroupMembers
+ : mOriginalGroupMembers - selectedContacts);
+ QList<QContactRelationship> memberships;
+
+ foreach (QContactLocalId id, members) {
+ QContact contact = getContactManager()->contact(id);
+ QContactRelationship membership;
+ membership.setRelationshipType(QContactRelationship::HasMember);
+ membership.setFirst(mContact->id());
+ membership.setSecond(contact.id());
+ memberships.append(membership);
+ }
+
+ if (!memberships.isEmpty()) {
+ QMap<int, QContactManager::Error> errors;
+ if (i == 0) {
+ getContactManager()->saveRelationships(&memberships, &errors);
+ }
+ else {
+ getContactManager()->removeRelationships(memberships, &errors);
+ }
+ }
+ }
+
+ // delete the model and recreate it with relationship changes
delete mModel;
mModel = 0;
createModel();
- mFavoriteListView->setModel(mModel);
-
}
+
void CntFavoritesMemberView::createModel()
{
QContactRelationshipFilter rFilter;
@@ -162,27 +202,28 @@
QContactSortOrder sortOrderFirstName;
sortOrderFirstName.setDetailDefinitionName(QContactName::DefinitionName,
- QContactName::FieldFirst);
+ QContactName::FieldFirstName);
sortOrderFirstName.setCaseSensitivity(Qt::CaseInsensitive);
QContactSortOrder sortOrderLastName;
sortOrderLastName.setDetailDefinitionName(QContactName::DefinitionName,
- QContactName::FieldLast);
+ QContactName::FieldLastName);
sortOrderLastName.setCaseSensitivity(Qt::CaseInsensitive);
QList<QContactSortOrder> sortOrders;
sortOrders.append(sortOrderFirstName);
sortOrders.append(sortOrderLastName);
- mModel = new MobCntModel(mViewManager->contactManager(SYMBIAN_BACKEND), rFilter, sortOrders, false);
+ mModel = new CntListModel(getContactManager(), rFilter, sortOrders, false);
+ mFavoriteListView->setModel(mModel);
}
/*!
Called when a list item is longpressed
*/
-void CntFavoritesMemberView::onLongPressed (HbAbstractViewItem *aItem, const QPointF &aCoords)
+void CntFavoritesMemberView::onLongPressed(HbAbstractViewItem *aItem, const QPointF &aCoords)
{
- QVariant data( aItem->modelIndex().row() );
+ QVariant data(aItem->modelIndex().row());
QModelIndex index = aItem->modelIndex();
QVariant variant = index.data(Qt::UserRole+1);
@@ -213,7 +254,7 @@
}
void CntFavoritesMemberView::handleMenu(HbAction* action)
- {
+{
int row = action->data().toInt();
HbMenu *menuItem = static_cast<HbMenu*>(sender());
QModelIndex index = mModel->index(row, 0);
@@ -236,7 +277,7 @@
{
sendToHs(index);
}
- }
+}
void CntFavoritesMemberView::openContact(const QModelIndex &index)
{
@@ -276,7 +317,16 @@
relationship.setRelationshipType(QContactRelationship::HasMember);
relationship.setFirst(mContact->id());
relationship.setSecond(selectedContact.id());
- mViewManager->contactManager(SYMBIAN_BACKEND)->removeRelationship(relationship);
+ getContactManager()->removeRelationship(relationship);
+}
+
+QContactManager* CntFavoritesMemberView::getContactManager()
+{
+ if (!mViewManager) {
+ return NULL;
+ }
+
+ return mViewManager->contactManager(SYMBIAN_BACKEND);
}
/*!
@@ -288,9 +338,9 @@
preferences["contactId"] = mModel->contact(index).id().localId();
XQServiceRequest snd("com.nokia.services.hsapplication.IHomeScreenClient",
- "addWidget(QString,QVariantHash)"
- ,false);
- snd << QString("hscontactwidgetplugin");
+ "addWidget(QString,QVariantHash)",
+ false);
+ snd << QString("contactwidgethsplugin");
snd << preferences;
snd.send();
}