phonebookui/pbkcommonui/src/cntgroupmemberview.cpp
changeset 37 fd64c38c277d
parent 31 2a11b5b00470
child 40 b46a585f6909
equal deleted inserted replaced
31:2a11b5b00470 37:fd64c38c277d
    62     mHeadingItem(NULL),
    62     mHeadingItem(NULL),
    63     mModel(NULL),
    63     mModel(NULL),
    64     mImageLabel(NULL), 
    64     mImageLabel(NULL), 
    65     mListView(NULL),
    65     mListView(NULL),
    66     mFetchView(NULL),
    66     mFetchView(NULL),
    67     mIsPreviousImageEditorView(false),
       
    68     mAvatar(NULL)
    67     mAvatar(NULL)
    69 {
    68 {
    70 
    69 
    71     mDocument = new CntDocumentLoader;
    70     mDocument = new CntDocumentLoader;
    72     
    71     
    82     mSoftkey = new HbAction(Hb::BackNaviAction, mView);
    81     mSoftkey = new HbAction(Hb::BackNaviAction, mView);
    83     connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
    82     connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
    84     
    83     
    85     mImageLabel = static_cast<CntImageLabel*>(mDocument->findWidget("editViewImage"));
    84     mImageLabel = static_cast<CntImageLabel*>(mDocument->findWidget("editViewImage"));
    86     connect( mImageLabel, SIGNAL(iconClicked()), this, SLOT(openImageEditor()) );
    85     connect( mImageLabel, SIGNAL(iconClicked()), this, SLOT(openImageEditor()) );
       
    86     connect( mImageLabel, SIGNAL(iconLongPressed(const QPointF&)), this, SLOT(drawImageMenu(const QPointF&)) );
    87     
    87     
    88     mListView = static_cast<HbListView*>( mDocument->findWidget("listView") );
    88     mListView = static_cast<HbListView*>( mDocument->findWidget("listView") );
    89     connect(mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), this,
    89     connect(mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), this,
    90         SLOT(showContextMenu(HbAbstractViewItem*,QPointF)));
    90         SLOT(showContextMenu(HbAbstractViewItem*,QPointF)));
    91     connect(mListView, SIGNAL(activated (const QModelIndex&)), this,
    91     connect(mListView, SIGNAL(activated (const QModelIndex&)), this,
    92         SLOT(showContactView(const QModelIndex&)));
    92         SLOT(showContactView(const QModelIndex&)));
    93     
    93     
    94     mHeadingItem = static_cast<CntContactCardHeadingItem*>( mDocument->findWidget("editViewHeading") );
    94     mHeadingItem = static_cast<CntContactCardHeadingItem*>( mDocument->findWidget("editViewHeading") );
       
    95     connect(mHeadingItem, SIGNAL(passShortPressed(const QPointF&)), this, SLOT(openImageEditor()) );
    95     connect(mHeadingItem, SIGNAL(passLongPressed(const QPointF&)), this, SLOT(drawImageMenu(const QPointF&)));
    96     connect(mHeadingItem, SIGNAL(passLongPressed(const QPointF&)), this, SLOT(drawImageMenu(const QPointF&)));
    96 
    97 
    97     // menu actions
    98     // menu actions
    98     mEditGroupAction = static_cast<HbAction*>( mDocument->findObject("cnt:editgroupdetails"));
    99     mEditGroupAction = static_cast<HbAction*>( mDocument->findObject("cnt:editgroupdetails"));
    99     connect(mEditGroupAction, SIGNAL(triggered()), this, SLOT(editGroup()));
   100     connect(mEditGroupAction, SIGNAL(triggered()), this, SLOT(editGroup()));
   157     if (mView->navigationAction() != mSoftkey)
   158     if (mView->navigationAction() != mSoftkey)
   158         {
   159         {
   159         mView->setNavigationAction(mSoftkey);   
   160         mView->setNavigationAction(mSoftkey);   
   160         }
   161         }
   161         
   162         
   162     QVariant contact = aArgs.value( ESelectedContact );
   163     QVariant contact = aArgs.value( ESelectedGroupContact );
   163     mGroupContact = new QContact( contact.value<QContact>() );
   164     mGroupContact = new QContact( contact.value<QContact>() );
   164     
       
   165     if (aArgs.value(ECustomParam).toInt() == imageEditorView)
       
   166         {    
       
   167             mIsPreviousImageEditorView = true;   
       
   168         }
       
   169     
   165     
   170     HbMainWindow* window = mView->mainWindow();
   166     HbMainWindow* window = mView->mainWindow();
   171     if ( window )
   167     if ( window )
   172     {
   168     {
   173         connect(window, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(setOrientation(Qt::Orientation)));
   169         connect(window, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(setOrientation(Qt::Orientation)));
   201     HbFrameBackground frame;
   197     HbFrameBackground frame;
   202     frame.setFrameGraphicsName("qtg_fr_list_normal");
   198     frame.setFrameGraphicsName("qtg_fr_list_normal");
   203     frame.setFrameType(HbFrameDrawer::NinePieces);
   199     frame.setFrameType(HbFrameDrawer::NinePieces);
   204     mListView->itemPrototypes().first()->setDefaultFrame(frame);
   200     mListView->itemPrototypes().first()->setDefaultFrame(frame);
   205     
   201     
   206     QContactRelationshipFilter rFilter;
   202     createModel();
   207     rFilter.setRelationshipType(QContactRelationship::HasMember);
       
   208     rFilter.setRelatedContactRole(QContactRelationship::First);
       
   209     rFilter.setRelatedContactId(mGroupContact->id());
       
   210     
       
   211     QContactSortOrder sortOrderFirstName;
       
   212     sortOrderFirstName.setDetailDefinitionName(QContactName::DefinitionName,
       
   213         QContactName::FieldFirst);
       
   214     sortOrderFirstName.setCaseSensitivity(Qt::CaseInsensitive);
       
   215 
       
   216     QContactSortOrder sortOrderLastName;
       
   217     sortOrderLastName.setDetailDefinitionName(QContactName::DefinitionName,
       
   218         QContactName::FieldLast);
       
   219     sortOrderLastName.setCaseSensitivity(Qt::CaseInsensitive);
       
   220 
       
   221     QList<QContactSortOrder> sortOrders;
       
   222     sortOrders.append(sortOrderFirstName);
       
   223     sortOrders.append(sortOrderLastName);
       
   224 
       
   225     mModel = new MobCntModel(getContactManager(), rFilter, sortOrders, false);
       
   226     mListView->setModel(mModel);
       
   227     
   203     
   228     if (aArgs.value(ESelectedAction).toString() == "save")
   204     if (aArgs.value(ESelectedAction).toString() == "save")
   229     {
   205     {
   230         QString name = getContactManager()->synthesizedDisplayLabel(*mGroupContact);
   206         QString name = getContactManager()->synthesizedDisplayLabel(*mGroupContact);
   231         HbNotificationDialog::launchDialog(hbTrId("Group \"%1\" saved").arg(name));
   207         HbNotificationDialog::launchDialog(hbTrId("Group \"%1\" saved").arg(name));
   240     
   216     
   241 }
   217 }
   242 
   218 
   243 void CntGroupMemberView::showPreviousView()
   219 void CntGroupMemberView::showPreviousView()
   244 {
   220 {
   245     //save an avatar
   221     //save the contact if avatar has been changed.
   246     if (mIsPreviousImageEditorView)
   222     QContact contact = mViewManager->contactManager( SYMBIAN_BACKEND )->contact(mGroupContact->localId());
   247     {
   223     if ( contact != *mGroupContact )
   248         if (!mAvatar->imageUrl().isEmpty())
   224     {
       
   225         QList<QContactAvatar> details = mGroupContact->details<QContactAvatar>();
       
   226         for (int i = 0; i < details.count(); i++)
   249         {
   227         {
   250             mViewManager->contactManager( SYMBIAN_BACKEND )->saveContact(mGroupContact);
   228             if (!details.at(i).imageUrl().isEmpty())
       
   229             {
       
   230                 getContactManager()->saveContact(mGroupContact);
       
   231                 break;
       
   232             }
   251         }
   233         }
   252     }
   234     }
   253     
   235     
   254     CntViewParameters viewParameters;
   236     CntViewParameters viewParameters;
   255     mViewManager->back(viewParameters);
   237     mViewManager->back(viewParameters);
   259 {
   241 {
   260     CntViewParameters viewParameters;
   242     CntViewParameters viewParameters;
   261     viewParameters.insert(EViewId, groupActionsView);
   243     viewParameters.insert(EViewId, groupActionsView);
   262     QVariant var;
   244     QVariant var;
   263     var.setValue(*mGroupContact);
   245     var.setValue(*mGroupContact);
   264     viewParameters.insert(ESelectedContact, var);
   246     viewParameters.insert(ESelectedGroupContact, var);
   265     mViewManager->changeView(viewParameters);
   247     mViewManager->changeView(viewParameters);
   266 }
   248 }
   267 
   249 
   268 void CntGroupMemberView::manageMembers()
   250 void CntGroupMemberView::manageMembers()
   269 {
   251 {
   270     QContactRelationshipFilter membersFilter;
   252     QContactRelationshipFilter membersFilter;
   271     membersFilter.setRelationshipType(QContactRelationship::HasMember);
   253     membersFilter.setRelationshipType(QContactRelationship::HasMember);
   272     membersFilter.setRelatedContactRole(QContactRelationshipFilter::First);
   254     membersFilter.setRelatedContactRole(QContactRelationship::First);
   273     membersFilter.setRelatedContactId(mGroupContact->id());   
   255     membersFilter.setRelatedContactId(mGroupContact->id());   
   274     mOriginalGroupMembers = getContactManager()->contactIds(membersFilter);
   256     mOriginalGroupMembers = getContactManager()->contactIds(membersFilter);
   275     
   257     
   276     QSet<QContactLocalId> contactsSet = mOriginalGroupMembers.toSet();
   258     QSet<QContactLocalId> contactsSet = mOriginalGroupMembers.toSet();
   277     QContactName groupContactName = mGroupContact->detail( QContactName::DefinitionName );
   259     QContactName groupContactName = mGroupContact->detail( QContactName::DefinitionName );
   278     QString groupName(groupContactName.value( QContactName::FieldCustomLabel ));
   260     QString groupName(groupContactName.value( QContactName::FieldCustomLabel ));
       
   261     
       
   262     if (!mFetchView) {
       
   263         mFetchView = new CntFetchContacts(mViewManager->contactManager( SYMBIAN_BACKEND ));
       
   264         connect(mFetchView, SIGNAL(clicked()), this, SLOT(handleManageMembers()));
       
   265     }
   279     mFetchView->setDetails(HbParameterLengthLimiter(hbTrId("txt_phob_subtitle_1_group")).arg(groupName),
   266     mFetchView->setDetails(HbParameterLengthLimiter(hbTrId("txt_phob_subtitle_1_group")).arg(groupName),
   280                            hbTrId("Save"));
   267                            hbTrId("txt_common_button_save"));
   281     mFetchView->displayContacts(CntFetchContacts::popup,
   268     mFetchView->displayContacts(CntFetchContacts::popup,
   282                                 HbAbstractItemView::MultiSelection,
   269                                 HbAbstractItemView::MultiSelection,
   283                                 contactsSet);
   270                                 contactsSet);
   284 }
   271 }
   285 
   272 
   286 void CntGroupMemberView::handleManageMembers()
   273 void CntGroupMemberView::handleManageMembers()
   287 {
   274 {
       
   275     
   288     QSet<QContactLocalId> selectedContacts = mFetchView->getSelectedContacts();
   276     QSet<QContactLocalId> selectedContacts = mFetchView->getSelectedContacts();
   289     
   277     
   290     if (mFetchView->wasCanceled()) {
   278     if (mFetchView->wasCanceled()) {
   291         delete mFetchView;
   279         delete mFetchView;
   292         mFetchView = 0;
   280         mFetchView = 0;
   319         membership.setRelationshipType(QContactRelationship::HasMember);
   307         membership.setRelationshipType(QContactRelationship::HasMember);
   320         membership.setFirst(mGroupContact->id());
   308         membership.setFirst(mGroupContact->id());
   321         membership.setSecond(contact.id());
   309         membership.setSecond(contact.id());
   322         addedMemberships.append(membership);
   310         addedMemberships.append(membership);
   323     }
   311     }
   324         
   312     
       
   313     QMap<int, QContactManager::Error> errors;
   325     if (!addedMemberships.isEmpty()) {
   314     if (!addedMemberships.isEmpty()) {
   326         getContactManager()->saveRelationships(&addedMemberships);
   315         getContactManager()->saveRelationships(&addedMemberships, &errors);
   327     }
   316     }
   328     
   317     
   329     if (!removedMemberships.isEmpty()) {
   318     if (!removedMemberships.isEmpty()) {
   330         getContactManager()->removeRelationships(removedMemberships);
   319         getContactManager()->removeRelationships(removedMemberships, &errors);
   331     }
   320     }
       
   321     
       
   322     // delete the model and recreate it with relationship changes
       
   323     delete mModel;
       
   324     mModel = 0;
       
   325     
       
   326     createModel();
       
   327 }
       
   328 
       
   329 void CntGroupMemberView::createModel()
       
   330 {
       
   331     QContactRelationshipFilter rFilter;
       
   332     rFilter.setRelationshipType(QContactRelationship::HasMember);
       
   333     rFilter.setRelatedContactRole(QContactRelationship::First);
       
   334     rFilter.setRelatedContactId(mGroupContact->id());
       
   335     
       
   336     QContactSortOrder sortOrderFirstName;
       
   337     sortOrderFirstName.setDetailDefinitionName(QContactName::DefinitionName,
       
   338         QContactName::FieldFirst);
       
   339     sortOrderFirstName.setCaseSensitivity(Qt::CaseInsensitive);
       
   340 
       
   341     QContactSortOrder sortOrderLastName;
       
   342     sortOrderLastName.setDetailDefinitionName(QContactName::DefinitionName,
       
   343         QContactName::FieldLast);
       
   344     sortOrderLastName.setCaseSensitivity(Qt::CaseInsensitive);
       
   345 
       
   346     QList<QContactSortOrder> sortOrders;
       
   347     sortOrders.append(sortOrderFirstName);
       
   348     sortOrders.append(sortOrderLastName);
       
   349 
       
   350     mModel = new MobCntModel(getContactManager(), rFilter, sortOrders, false);
       
   351     mListView->setModel(mModel);
   332 }
   352 }
   333 
   353 
   334 void CntGroupMemberView::editGroup()
   354 void CntGroupMemberView::editGroup()
   335 {
   355 {
   336     CntViewParameters viewParameters;
   356     CntViewParameters viewParameters;
   337     viewParameters.insert(EViewId, groupEditorView);
   357     viewParameters.insert(EViewId, groupEditorView);
   338     QVariant var;
   358     QVariant var;
   339     var.setValue(*mGroupContact);
   359     var.setValue(*mGroupContact);
   340     viewParameters.insert(ESelectedContact, var);
   360     viewParameters.insert(ESelectedGroupContact, var);
   341     mViewManager->changeView(viewParameters);
   361     mViewManager->changeView(viewParameters);
   342 }
   362 }
   343 
   363 
   344 void CntGroupMemberView::deleteGroup()
   364 void CntGroupMemberView::deleteGroup()
   345 {
   365 {
   392 
   412 
   393 void CntGroupMemberView::handleMenu(HbAction* action)
   413 void CntGroupMemberView::handleMenu(HbAction* action)
   394 {
   414 {
   395     int row = action->data().toInt();
   415     int row = action->data().toInt();
   396     HbMenu *menuItem = static_cast<HbMenu*>(sender());
   416     HbMenu *menuItem = static_cast<HbMenu*>(sender());
   397     QModelIndex index = mModel->index(row, 0);
   417     QModelIndex index = mModel->index(row);
   398     
       
   399     int id = index.data(Qt::UserRole).toInt();
       
   400     
   418     
   401     if ( action == menuItem->actions().first() )
   419     if ( action == menuItem->actions().first() )
   402         {
   420         {
   403         showContactView(index);
   421         showContactView(index);
   404         }
   422         }
   424     var.setValue(mModel->contact(index));
   442     var.setValue(mModel->contact(index));
   425     viewParameters.insert(ESelectedContact, var);
   443     viewParameters.insert(ESelectedContact, var);
   426     QVariant varGroup;
   444     QVariant varGroup;
   427     varGroup.setValue(*mGroupContact);
   445     varGroup.setValue(*mGroupContact);
   428     viewParameters.insert(ESelectedGroupContact, varGroup);
   446     viewParameters.insert(ESelectedGroupContact, varGroup);
   429     viewParameters.insert(ESelectedAction, "FromGroupMemberView");
       
   430     mViewManager->changeView(viewParameters);
   447     mViewManager->changeView(viewParameters);
   431         
   448         
   432 }
   449 }
   433 
   450 
   434 void CntGroupMemberView::removeFromGroup(const QModelIndex &index)
   451 void CntGroupMemberView::removeFromGroup(const QModelIndex &index)
   438     QContactRelationship relationship;
   455     QContactRelationship relationship;
   439     relationship.setRelationshipType(QContactRelationship::HasMember);
   456     relationship.setRelationshipType(QContactRelationship::HasMember);
   440     relationship.setFirst(mGroupContact->id());
   457     relationship.setFirst(mGroupContact->id());
   441     relationship.setSecond(selectedContact.id());
   458     relationship.setSecond(selectedContact.id());
   442     getContactManager()->removeRelationship(relationship);
   459     getContactManager()->removeRelationship(relationship);
       
   460     
       
   461     // delete the model and recreate it with relationship changes
       
   462     delete mModel;
       
   463     mModel = NULL;
       
   464     
       
   465     createModel();
   443 }
   466 }
   444 
   467 
   445 void CntGroupMemberView::editContact(const QModelIndex &index)
   468 void CntGroupMemberView::editContact(const QModelIndex &index)
   446 {
   469 {
   447     CntViewParameters viewParameters;
   470     CntViewParameters viewParameters;
   472 {
   495 {
   473     QVariant var;
   496     QVariant var;
   474     var.setValue(*mGroupContact);
   497     var.setValue(*mGroupContact);
   475                 
   498                 
   476     CntViewParameters viewParameters;
   499     CntViewParameters viewParameters;
       
   500     // SelectedGroupContact is needed so we know which group to show
       
   501     // when we come back to this view, and selected contact is needed
       
   502     // for image editor to be able to assign the image to correct contact.
       
   503     viewParameters.insert(ESelectedGroupContact, var);
   477     viewParameters.insert(ESelectedContact, var);
   504     viewParameters.insert(ESelectedContact, var);
       
   505     
   478     viewParameters.insert(EViewId, imageEditorView );
   506     viewParameters.insert(EViewId, imageEditorView );
   479         
   507         
   480     mViewManager->changeView( viewParameters );
   508     mViewManager->changeView( viewParameters );
   481 }
   509 }
   482 
   510 
   483 QContactManager* CntGroupMemberView::getContactManager()
   511 QContactManager* CntGroupMemberView::getContactManager()
   484 {
   512 {
   485     if (!mViewManager) return NULL;
       
   486 
       
   487     return mViewManager->contactManager(SYMBIAN_BACKEND);
   513     return mViewManager->contactManager(SYMBIAN_BACKEND);
   488 }
   514 }
   489 
   515 
   490 /*!
   516 /*!
   491 Draw the image specific content menu
   517 Draw the image specific content menu
   492 */
   518 */
   493 void CntGroupMemberView::drawImageMenu(const QPointF &aCoords)
   519 void CntGroupMemberView::drawImageMenu(const QPointF &aCoords)
   494 {
   520 {
   495     HbMenu *menu = new HbMenu();
   521     HbMenu *menu = new HbMenu();
   496     HbAction *changeImageAction = menu->addAction(hbTrId("txt_phob_menu_change_picture"));
   522     HbAction *changeImageAction = menu->addAction(hbTrId("txt_phob_menu_change_picture"), this, SLOT(openImageEditor()));
   497     HbAction *removeAction = menu->addAction(hbTrId("txt_phob_menu_remove_image"));
   523     if (mAvatar)
       
   524     {
       
   525         HbAction *removeAction = menu->addAction(hbTrId("txt_phob_menu_remove_image"), this, SLOT(removeImage()));
       
   526     }
   498     menu->setPreferredPos(aCoords);
   527     menu->setPreferredPos(aCoords);
   499     menu->open(this, SLOT(handleImageMenu(HbAction*)));
   528     menu->open();
   500 }
   529 }
   501 
   530 
   502 void CntGroupMemberView::handleImageMenu(HbAction* action)
       
   503 {
       
   504     HbMenu *menuItem = static_cast<HbMenu*>(sender());
       
   505     if ( action == menuItem->actions().first() ) {
       
   506         changeImage();
       
   507     }
       
   508     else if (action == menuItem->actions().at(1)) {
       
   509         removeImage();
       
   510     }
       
   511 }
       
   512 
       
   513 void CntGroupMemberView::changeImage()
       
   514 {
       
   515     CntViewParameters viewParameters;
       
   516     viewParameters.insert(EViewId, imageEditorView);
       
   517     QVariant var;
       
   518     var.setValue(*mGroupContact);
       
   519     viewParameters.insert(ESelectedContact, var);
       
   520     mViewManager->changeView(viewParameters);
       
   521 }
       
   522 
   531 
   523 void CntGroupMemberView::removeImage()
   532 void CntGroupMemberView::removeImage()
   524 {
   533 {
   525 if (mAvatar) 
   534     if (mAvatar) 
   526     {
   535     {
   527     if (!mAvatar->imageUrl().isEmpty())
   536         if (!mAvatar->imageUrl().isEmpty())
       
   537         {
       
   538             mGroupContact->removeDetail(mAvatar);
       
   539             // Check if image removable.
       
   540             CntImageUtility imageUtility;
       
   541             if(imageUtility.isImageRemovable(mAvatar->imageUrl().toString()))
   528             {
   542             {
   529                 mGroupContact->removeDetail(mAvatar);
   543                 imageUtility.removeImage(mAvatar->imageUrl().toString());
   530                 // Check if image removable.
       
   531                 CntImageUtility imageUtility;
       
   532                 if(imageUtility.isImageRemovable(mAvatar->imageUrl().toString()))
       
   533                 {
       
   534                     imageUtility.removeImage(mAvatar->imageUrl().toString());
       
   535                 }
       
   536                 mViewManager->contactManager( SYMBIAN_BACKEND )->saveContact(mGroupContact);
       
   537                 mHeadingItem->setIcon(HbIcon("qtg_large_avatar"));
       
   538                 
       
   539             }
   544             }
       
   545             mViewManager->contactManager( SYMBIAN_BACKEND )->saveContact(mGroupContact);
       
   546             mHeadingItem->setIcon(HbIcon("qtg_large_avatar"));
       
   547         }
   540     }
   548     }
   541 }
   549 }
   542 
   550 
   543 
   551 
   544 
   552