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 { |
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 |