phonebookui/pbkcommonui/src/cntgroupmemberview.cpp
changeset 53 e6aff7b69165
parent 50 77bc263e1626
child 54 47627ab5d7a4
equal deleted inserted replaced
51:81c360d47083 53:e6aff7b69165
    14 * Description:
    14 * Description:
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 #include "cntgroupmemberview.h"
    18 #include "cntgroupmemberview.h"
    19 #include "cntfetchcontactsview.h"
    19 #include "cntfetchcontactpopup.h"
    20 #include "cntcontactcardheadingitem.h"
    20 #include "cntcontactcardheadingitem.h"
    21 #include "cntglobal.h"
    21 #include "cntglobal.h"
    22 #include "cntimagelabel.h"
    22 #include "cntimagelabel.h"
    23 #include "cntimageutility.h"
    23 #include "cntimageutility.h"
    24 #include <hbnotificationdialog.h>
    24 #include <hbnotificationdialog.h>
    34 #include <hblabel.h>
    34 #include <hblabel.h>
    35 #include <hbparameterlengthlimiter.h>
    35 #include <hbparameterlengthlimiter.h>
    36 #include <thumbnailmanager_qt.h>
    36 #include <thumbnailmanager_qt.h>
    37 #include <cntlistmodel.h>
    37 #include <cntlistmodel.h>
    38 #include <hbmainwindow.h>
    38 #include <hbmainwindow.h>
       
    39 #include <xqservicerequest.h>
    39 
    40 
    40 #include "cntdocumentloader.h"
    41 #include "cntdocumentloader.h"
    41 
    42 
    42 const char *CNT_GROUPMEMBERVIEW_XML = ":/xml/contacts_groupmembers.docml";
    43 const char *CNT_GROUPMEMBERVIEW_XML = ":/xml/contacts_groupmembers.docml";
    43 
    44 
    61     mViewManager(NULL),
    62     mViewManager(NULL),
    62     mHeadingItem(NULL),
    63     mHeadingItem(NULL),
    63     mModel(NULL),
    64     mModel(NULL),
    64     mImageLabel(NULL), 
    65     mImageLabel(NULL), 
    65     mListView(NULL),
    66     mListView(NULL),
    66     mFetchView(NULL),
       
    67     mAvatar(NULL)
    67     mAvatar(NULL)
    68 {
    68 {
    69     mDocument = new CntDocumentLoader;
    69     mDocument = new CntDocumentLoader;
    70     
    70     
    71     bool ok;
    71     bool ok;
   122 CntGroupMemberView::~CntGroupMemberView()
   122 CntGroupMemberView::~CntGroupMemberView()
   123 {
   123 {
   124     mView->deleteLater();
   124     mView->deleteLater();
   125     
   125     
   126     delete mGroupContact;
   126     delete mGroupContact;
   127     mGroupContact = 0;
   127     mGroupContact = NULL;
   128     
   128     
   129     delete mModel;
   129     delete mModel;
   130     mModel = 0;
   130     mModel = NULL;
   131     
       
   132     delete mFetchView;
       
   133     mFetchView = 0;
       
   134     
   131     
   135     delete mAvatar;
   132     delete mAvatar;
   136     mAvatar = NULL;
   133     mAvatar = NULL;
   137 }
   134 }
   138 
   135 
   201     
   198     
   202     createModel();
   199     createModel();
   203     
   200     
   204     if (mArgs.value(ESelectedAction).toString() == CNT_SAVE_ACTION)
   201     if (mArgs.value(ESelectedAction).toString() == CNT_SAVE_ACTION)
   205     {
   202     {
   206         QString name = getContactManager()->synthesizedDisplayLabel(*mGroupContact);
   203         QString name = getContactManager()->synthesizedContactDisplayLabel(*mGroupContact);
   207         HbNotificationDialog::launchDialog(HbParameterLengthLimiter(hbTrId("txt_phob_dpophead_new_group_1_created").arg(name)));
   204         HbNotificationDialog::launchDialog(HbParameterLengthLimiter(hbTrId("txt_phob_dpophead_new_group_1_created").arg(name)));
   208     }
   205     }
   209 }
   206 }
   210 
   207 
   211 void CntGroupMemberView::deactivate()
   208 void CntGroupMemberView::deactivate()
   238 {
   235 {
   239     QContactRelationshipFilter membersFilter;
   236     QContactRelationshipFilter membersFilter;
   240     membersFilter.setRelationshipType(QContactRelationship::HasMember);
   237     membersFilter.setRelationshipType(QContactRelationship::HasMember);
   241     membersFilter.setRelatedContactRole(QContactRelationship::First);
   238     membersFilter.setRelatedContactRole(QContactRelationship::First);
   242     membersFilter.setRelatedContactId(mGroupContact->id());   
   239     membersFilter.setRelatedContactId(mGroupContact->id());   
       
   240     
   243     mOriginalGroupMembers = getContactManager()->contactIds(membersFilter);
   241     mOriginalGroupMembers = getContactManager()->contactIds(membersFilter);
   244     
   242     
   245     QSet<QContactLocalId> contactsSet = mOriginalGroupMembers.toSet();
   243     QContactName contactName = mGroupContact->detail( QContactName::DefinitionName );
   246 
   244     QString groupName = contactName.value( QContactName::FieldCustomLabel );
   247     QString groupName = mGroupContact->displayLabel();
       
   248     if (groupName.isEmpty())
   245     if (groupName.isEmpty())
   249     {
   246     {
   250         groupName = hbTrId("txt_phob_list_unnamed");
   247         groupName = hbTrId("txt_phob_list_unnamed");
   251     }
   248     }
   252     
   249     
   253     if (!mFetchView) {
   250     CntFetchContactPopup* popup = CntFetchContactPopup::createMultiSelectionPopup(
   254         mFetchView = new CntFetchContacts(*mViewManager->contactManager( SYMBIAN_BACKEND ));
   251             HbParameterLengthLimiter(hbTrId("txt_phob_title_members_of_1_group")).arg(groupName),
   255         connect(mFetchView, SIGNAL(clicked()), this, SLOT(handleManageMembers()));
   252             hbTrId("txt_common_button_save"),
   256     }
   253             *mViewManager->contactManager(SYMBIAN_BACKEND));
   257     mFetchView->setDetails(HbParameterLengthLimiter(hbTrId("txt_phob_title_members_of_1_group")).arg(groupName),
   254     connect( popup, SIGNAL(fetchReady(QSet<QContactLocalId>)),this, SLOT(handleManageMembers(QSet<QContactLocalId>)) );
   258                            hbTrId("txt_common_button_save"));
   255     popup->setSelectedContacts( mOriginalGroupMembers.toSet() );
   259     mFetchView->displayContacts(HbAbstractItemView::MultiSelection, contactsSet);
   256     popup->showPopup();
   260 }
   257 }
   261 
   258 
   262 void CntGroupMemberView::handleManageMembers()
   259 void CntGroupMemberView::handleManageMembers(QSet<QContactLocalId> aIds)
   263 {
   260 {
   264     
       
   265     QSet<QContactLocalId> selectedContacts = mFetchView->getSelectedContacts();
       
   266     
       
   267     if (mFetchView->wasCanceled()) {
       
   268         delete mFetchView;
       
   269         mFetchView = 0;
       
   270         return;
       
   271     }
       
   272 
       
   273     QList<QContactRelationship> removedMemberships;
   261     QList<QContactRelationship> removedMemberships;
   274     QList<QContactRelationship> addedMemberships;
   262     QList<QContactRelationship> addedMemberships;
   275 
   263 
   276     QSet<QContactLocalId> removedMembers = mOriginalGroupMembers.toSet() - selectedContacts;
   264     QSet<QContactLocalId> removedMembers = mOriginalGroupMembers.toSet() - aIds;
   277     setRelationship(removedMembers, removedMemberships);
   265     setRelationship(removedMembers, removedMemberships);
   278 
   266 
   279     QSet<QContactLocalId> addedMembers = selectedContacts - mOriginalGroupMembers.toSet();
   267     QSet<QContactLocalId> addedMembers = aIds - mOriginalGroupMembers.toSet();
   280     setRelationship(addedMembers, addedMemberships);
   268     setRelationship(addedMembers, addedMemberships);
   281     
   269     
   282     QMap<int, QContactManager::Error> errors;
   270     QMap<int, QContactManager::Error> errors;
   283     if (!addedMemberships.isEmpty()) {
   271     if (!addedMemberships.isEmpty()) 
       
   272     {
   284         getContactManager()->saveRelationships(&addedMemberships, &errors);
   273         getContactManager()->saveRelationships(&addedMemberships, &errors);
   285     }
   274     }
   286     
   275     
   287     if (!removedMemberships.isEmpty()) {
   276     if (!removedMemberships.isEmpty()) 
       
   277     {
   288         getContactManager()->removeRelationships(removedMemberships, &errors);
   278         getContactManager()->removeRelationships(removedMemberships, &errors);
   289     }
   279     }
   290     
       
   291     delete mFetchView;
       
   292     mFetchView = 0;
       
   293 }
   280 }
   294 
   281 
   295 void CntGroupMemberView::createModel()
   282 void CntGroupMemberView::createModel()
   296 {
   283 {
   297     QContactRelationshipFilter rFilter;
   284     QContactRelationshipFilter rFilter;
   312     mViewManager->changeView(mArgs);
   299     mViewManager->changeView(mArgs);
   313 }
   300 }
   314 
   301 
   315 void CntGroupMemberView::deleteGroup()
   302 void CntGroupMemberView::deleteGroup()
   316 {
   303 {
   317     QString groupName = mGroupContact->displayLabel();
   304     QContactName contactName = mGroupContact->detail( QContactName::DefinitionName );
       
   305     QString groupName = contactName.value( QContactName::FieldCustomLabel );
   318     if (groupName.isNull())
   306     if (groupName.isNull())
   319     {
   307     {
   320         groupName = hbTrId("txt_phob_list_unnamed");
   308         groupName = hbTrId("txt_phob_list_unnamed");
   321     }
   309     }
   322     
   310     
   350     menu->setPreferredPos( aCoords );
   338     menu->setPreferredPos( aCoords );
   351     
   339     
   352     HbAction *removeFromGroupAction = 0;
   340     HbAction *removeFromGroupAction = 0;
   353     HbAction *openContactAction = 0;
   341     HbAction *openContactAction = 0;
   354     HbAction *editContactAction = 0;
   342     HbAction *editContactAction = 0;
       
   343     HbAction *sendToHsAction = 0;
   355 
   344 
   356     openContactAction = menu->addAction(hbTrId("txt_common_menu_open"));
   345     openContactAction = menu->addAction(hbTrId("txt_common_menu_open"));
   357     editContactAction = menu->addAction(hbTrId("txt_common_menu_edit"));
   346     editContactAction = menu->addAction(hbTrId("txt_common_menu_edit"));
   358     removeFromGroupAction = menu->addAction(hbTrId("txt_phob_menu_remove_from_group"));
   347     removeFromGroupAction = menu->addAction(hbTrId("txt_phob_menu_remove_from_group"));
       
   348     sendToHsAction = menu->addAction(hbTrId("txt_phob_menu_send_to_homescreen"));
   359     
   349     
   360     openContactAction->setData( data );
   350     openContactAction->setData( data );
   361     editContactAction->setData( data );
   351     editContactAction->setData( data );
   362     removeFromGroupAction->setData( data );
   352     removeFromGroupAction->setData( data );
       
   353     sendToHsAction->setData( data );
   363 
   354 
   364     menu->open(this, SLOT(handleMenu(HbAction*)));
   355     menu->open(this, SLOT(handleMenu(HbAction*)));
   365 }
   356 }
   366 
   357 
   367 void CntGroupMemberView::handleMenu(HbAction* action)
   358 void CntGroupMemberView::handleMenu(HbAction* action)
   380         }
   371         }
   381     else if (action == menuItem->actions().at(2))
   372     else if (action == menuItem->actions().at(2))
   382         {
   373         {
   383         removeFromGroup(index);
   374         removeFromGroup(index);
   384         }
   375         }
   385 }
   376     else if (action == menuItem->actions().at(3))
   386 
   377         {
       
   378         sendToHs(index);
       
   379         }
       
   380 }
   387 
   381 
   388 /*!
   382 /*!
   389 Called after user clicked on the listview.
   383 Called after user clicked on the listview.
   390 */
   384 */
       
   385 void CntGroupMemberView::sendToHs(const QModelIndex &index)
       
   386 {
       
   387     QVariantHash preferences;
       
   388     preferences["contactId"] = mModel->contact(index).id().localId();
       
   389     
       
   390     XQServiceRequest snd("com.nokia.symbian.IHomeScreenClient",
       
   391                          "addWidget(QString,QVariantHash)",
       
   392                          false);
       
   393     snd << QString("contactwidgethsplugin");
       
   394     snd << preferences;
       
   395     snd.send();
       
   396 }
       
   397 
       
   398 /*!
       
   399 Called after user clicked on the listview.
       
   400 */
   391 void CntGroupMemberView::showContactView(const QModelIndex &index)
   401 void CntGroupMemberView::showContactView(const QModelIndex &index)
   392 {
   402 {
   393     mArgs.insert(EViewId, commLauncherView);
   403     mArgs.insert(EViewId, contactCardView);
   394     QVariant var;
   404     QVariant var;
   395     var.setValue(mModel->contact(index));
   405     var.setValue(mModel->contact(index));
   396     mArgs.insert(ESelectedContact, var);
   406     mArgs.insert(ESelectedContact, var);
   397     QVariant varGroup;
   407     QVariant varGroup;
   398     varGroup.setValue(*mGroupContact);
   408     varGroup.setValue(*mGroupContact);
   427     Q_UNUSED(data);
   437     Q_UNUSED(data);
   428     Q_UNUSED(id);
   438     Q_UNUSED(id);
   429     Q_UNUSED(error);
   439     Q_UNUSED(error);
   430     if (!error)
   440     if (!error)
   431     {
   441     {
   432         QIcon qicon(pixmap);
   442         HbIcon icon(pixmap);
   433         HbIcon icon(qicon);
       
   434         mHeadingItem->setIcon(icon);
   443         mHeadingItem->setIcon(icon);
   435         
   444         
   436         mImageLabel->clear();
   445         mImageLabel->clear();
   437         mImageLabel->setIcon(icon);
   446         mImageLabel->setIcon(pixmap);
   438     }
   447     }
   439 }
   448 }
   440 
   449 
   441 void CntGroupMemberView::openImageEditor()
   450 void CntGroupMemberView::openImageEditor()
   442 {
   451 {
   502             {
   511             {
   503                 imageUtility.removeImage(mAvatar->imageUrl().toString());
   512                 imageUtility.removeImage(mAvatar->imageUrl().toString());
   504             }
   513             }
   505             mAvatar->setImageUrl(QUrl());
   514             mAvatar->setImageUrl(QUrl());
   506             mImageLabel->clear();
   515             mImageLabel->clear();
   507             mImageLabel->setIcon(HbIcon("qtg_large_add_group_picture"));
   516             mImageLabel->setAvatarIcon(HbIcon("qtg_large_add_group_picture"));
   508             mHeadingItem->setIcon(HbIcon("qtg_large_add_group_picture"));
   517             mHeadingItem->setIcon(HbIcon("qtg_large_add_group_picture"));
   509             mViewManager->contactManager( SYMBIAN_BACKEND )->saveContact(mGroupContact);
   518             mViewManager->contactManager( SYMBIAN_BACKEND )->saveContact(mGroupContact);
   510        }
   519        }
   511     }
   520     }
   512 }
   521 }