phonebookui/pbkcommonui/src/cntfavoritesmemberview.cpp
changeset 40 b46a585f6909
parent 37 fd64c38c277d
child 46 efe85016a067
--- 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();
 }