phonebookui/pbkcommonui/src/cntfavoritesview.cpp
changeset 40 b46a585f6909
parent 37 fd64c38c277d
child 47 7cbcb2896f0e
--- a/phonebookui/pbkcommonui/src/cntfavoritesview.cpp	Thu May 27 12:45:19 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntfavoritesview.cpp	Fri Jun 11 13:29:23 2010 +0300
@@ -16,12 +16,13 @@
 */
 
 #include "cntfavoritesview.h"
-#include "cntgroupselectionpopup.h"
-#include "qtpbkglobal.h"
+#include "cntfetchcontactsview.h"
+#include "cntglobal.h"
 #include <hbpushbutton.h>
 #include <hbaction.h>
 #include <hbview.h>
 #include <hbmainwindow.h>
+#include <QSet>
 
 const char *CNT_FAVORITE_UI_XML = ":/xml/contacts_favorite.docml";
 
@@ -29,7 +30,8 @@
     mContact(NULL),
     mView(NULL),
     mSoftkey(NULL),
-    mViewManager(NULL)
+    mViewManager(NULL),
+    mFetchView(NULL)
 {
     bool ok = false;
     mDocumentLoader.load(CNT_FAVORITE_UI_XML, &ok);
@@ -56,6 +58,9 @@
     
     delete mContact;
     mContact = 0;
+
+    delete mFetchView;
+    mFetchView = 0;
 }
 
 void CntFavoritesView::activate( CntAbstractViewManager* aMgr, const CntViewParameters aArgs )
@@ -76,43 +81,54 @@
 
 void CntFavoritesView::deactivate()
 {
-
 }
 
 void CntFavoritesView::openSelectionPopup()
 {
-   // call a dialog to display the contacts
-   CntGroupSelectionPopup *groupSelectionPopup = new CntGroupSelectionPopup(mViewManager->contactManager(SYMBIAN_BACKEND), mContact);
-   groupSelectionPopup->populateListOfContact();
-   groupSelectionPopup->open(this, SLOT(handleMemberSelection(HbAction*)));
+    QSet<QContactLocalId> emptySet;
+    
+    if (!mFetchView) {
+        mFetchView = new CntFetchContacts(getContactManager());
+        connect(mFetchView, SIGNAL(clicked()), this, SLOT(handleMemberSelection()));
+    }
+    mFetchView->setDetails(hbTrId("txt_phob_subtitle_favorites"), hbTrId("txt_common_button_save"));
+    mFetchView->displayContacts(CntFetchContacts::popup, HbAbstractItemView::MultiSelection, emptySet);
 }
 
-void CntFavoritesView::handleMemberSelection(HbAction *action)
+void CntFavoritesView::handleMemberSelection()
 {
-    CntGroupSelectionPopup *groupSelectionPopup = static_cast<CntGroupSelectionPopup*>(sender());
-    
-    if (groupSelectionPopup && action == groupSelectionPopup->actions().first())
-    {
-        bool membersSaved = groupSelectionPopup->saveOldGroup();
-        
-        if (membersSaved)
-        {
-            CntViewParameters viewParameters;
-            viewParameters.insert(EViewId, FavoritesMemberView);
-            QVariant var;
-            var.setValue(*mContact);
-            viewParameters.insert(ESelectedGroupContact, var);
-            mViewManager->changeView(viewParameters);
-        }
-        else
-        {
-            showPreviousView();
-        }
+    QSet<QContactLocalId> members = mFetchView->getSelectedContacts();
+    QList<QContactRelationship> memberships;
+    bool saveChanges = !mFetchView->wasCanceled();
+
+    delete mFetchView;
+    mFetchView = 0;
+
+    if (!saveChanges || members.count() == 0) {
+        showPreviousView();
+        return;
     }
-    else if (groupSelectionPopup && action == groupSelectionPopup->actions().at(1))
-    {
-        showPreviousView();
+
+    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;
+        getContactManager()->saveRelationships(&memberships, &errors);
+    }
+
+    CntViewParameters viewParameters;
+    viewParameters.insert(EViewId, FavoritesMemberView);
+    QVariant var;
+    var.setValue(*mContact);
+    viewParameters.insert(ESelectedGroupContact, var);
+    mViewManager->changeView(viewParameters);
 }
 
 void CntFavoritesView::setOrientation(Qt::Orientation orientation)
@@ -135,4 +151,13 @@
     mViewManager->back(args);
 }
 
+QContactManager* CntFavoritesView::getContactManager()
+{
+    if (!mViewManager) {
+        return NULL;
+    }
+
+    return mViewManager->contactManager(SYMBIAN_BACKEND);
+}
+
 // end of file