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; |
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); |