21 #include "cntdetailpopup.h" |
21 #include "cntdetailpopup.h" |
22 #include "cnteditviewheadingitem.h" |
22 #include "cnteditviewheadingitem.h" |
23 #include "cntimagelabel.h" |
23 #include "cntimagelabel.h" |
24 #include "cntsavemanager.h" |
24 #include "cntsavemanager.h" |
25 #include "cntglobal.h" |
25 #include "cntglobal.h" |
|
26 #include "cntdebug.h" |
26 |
27 |
27 #include <qtcontacts.h> |
28 #include <qtcontacts.h> |
28 #include <hbdocumentloader.h> |
29 #include <hbdocumentloader.h> |
29 #include <thumbnailmanager_qt.h> |
30 #include <thumbnailmanager_qt.h> |
30 #include <hbabstractviewitem.h> |
31 #include <hbabstractviewitem.h> |
42 #include <xqaiwdecl.h> |
43 #include <xqaiwdecl.h> |
43 #include <cntservicescontact.h> |
44 #include <cntservicescontact.h> |
44 |
45 |
45 #include <QFileInfo> |
46 #include <QFileInfo> |
46 #include <QApplication> |
47 #include <QApplication> |
|
48 #include <QTimer> |
47 |
49 |
48 const char *CNT_EDIT_XML = ":/xml/contacts_ev.docml"; |
50 const char *CNT_EDIT_XML = ":/xml/contacts_ev.docml"; |
49 |
51 |
50 CntEditViewPrivate::CntEditViewPrivate() : |
52 CntEditViewPrivate::CntEditViewPrivate() : |
51 mModel( NULL ), |
53 mModel( NULL ), |
52 mImageLabel( NULL ), |
54 mImageLabel( NULL ), |
53 mThumbnailManager( NULL ), |
55 mThumbnailManager( NULL ), |
54 mContact( NULL ), |
56 mContact( NULL ), |
55 mReq(0), |
57 mReq(NULL), |
56 mMenu(NULL), |
58 mMenu(NULL), |
57 mSaveManager(NULL) |
59 mSaveManager(NULL) |
58 { |
60 { |
59 mDocument = new CntDocumentLoader; |
61 mDocument = new CntDocumentLoader; |
60 |
62 |
218 |
222 |
219 connect( mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)), |
223 connect( mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)), |
220 this, SLOT(thumbnailReady(QPixmap, void*, int, int)) ); |
224 this, SLOT(thumbnailReady(QPixmap, void*, int, int)) ); |
221 |
225 |
222 loadAvatar(); |
226 loadAvatar(); |
|
227 |
|
228 CNT_EXIT |
223 } |
229 } |
224 |
230 |
225 void CntEditViewPrivate::deactivate() |
231 void CntEditViewPrivate::deactivate() |
226 { |
232 { |
227 } |
233 } |
344 |
350 |
345 void CntEditViewPrivate::handleAddDetailItem(HbAction *aAction) |
351 void CntEditViewPrivate::handleAddDetailItem(HbAction *aAction) |
346 { |
352 { |
347 CntDetailPopup *popup = static_cast<CntDetailPopup*>(sender()); |
353 CntDetailPopup *popup = static_cast<CntDetailPopup*>(sender()); |
348 |
354 |
349 if (popup && aAction != popup->actions().first()) |
355 if (popup && aAction != popup->actions().first() && popup->selectedItems().count()) |
350 { |
356 { |
351 int id = popup->selectedDetail(); |
357 int row = popup->selectedItems().first().toInt(); |
352 |
358 QModelIndex index = popup->model()->index(row, 0); |
|
359 int id = popup->model()->data(index, Qt::UserRole).toInt(); |
|
360 |
353 if (id != noView ) |
361 if (id != noView ) |
354 { |
362 { |
355 mArgs.insert(EViewId, id ); |
363 mArgs.insert(EViewId, id ); |
356 |
364 |
357 switch ( id ) |
365 switch ( id ) |
471 |
479 |
472 if(action == HbMessageBox::Yes || action == HbMessageBox::Delete) |
480 if(action == HbMessageBox::Yes || action == HbMessageBox::Delete) |
473 { |
481 { |
474 QContactManager* cm = mMgr->contactManager( SYMBIAN_BACKEND ); |
482 QContactManager* cm = mMgr->contactManager( SYMBIAN_BACKEND ); |
475 |
483 |
|
484 disconnect(cm, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)), |
|
485 this, SLOT(contactDeletedFromOtherSource(const QList<QContactLocalId>&))); |
476 emit q->contactRemoved(cm->removeContact( mContact->localId() )); |
486 emit q->contactRemoved(cm->removeContact( mContact->localId() )); |
477 |
487 |
478 mMgr->back( mArgs ); |
488 mMgr->back( mArgs, true ); |
479 } |
489 } |
480 } |
490 } |
481 |
491 |
482 void CntEditViewPrivate::discardChanges() |
492 void CntEditViewPrivate::discardChanges() |
483 { |
493 { |
485 |
495 |
486 emit q->changesDiscarded(); |
496 emit q->changesDiscarded(); |
487 |
497 |
488 // get a fresh one from backend. |
498 // get a fresh one from backend. |
489 QContactManager* mgr = mMgr->contactManager(SYMBIAN_BACKEND); |
499 QContactManager* mgr = mMgr->contactManager(SYMBIAN_BACKEND); |
490 mContact = new QContact(mgr->contact( mContact->localId() )); |
500 setSelectedContact( mgr->contact( mContact->localId()) ); |
491 |
501 |
492 QVariant var; |
502 QVariant var; |
493 var.setValue(*mContact); |
503 var.setValue(*mContact); |
494 |
504 |
495 CntViewParameters viewParameters; |
505 CntViewParameters viewParameters; |
496 viewParameters.insert(ESelectedContact, var); |
506 viewParameters.insert(ESelectedContact, var); |
497 |
507 |
498 mMgr->back( viewParameters ); |
508 if ( mArgs.value( EExtraAction ).toString() == CNT_ROOT_ACTION ) |
499 } |
509 { |
|
510 mMgr->back( viewParameters, true ); |
|
511 } |
|
512 else |
|
513 { |
|
514 mMgr->back( viewParameters ); |
|
515 } |
|
516 |
|
517 } |
500 |
518 |
501 void CntEditViewPrivate::saveChanges() |
519 void CntEditViewPrivate::saveChanges() |
502 { |
520 { |
503 Q_Q(CntEditView); |
521 Q_Q(CntEditView); |
504 |
522 |
505 QString name = mMgr->contactManager(SYMBIAN_BACKEND)->synthesizedDisplayLabel(*mContact); |
523 QString name = mMgr->contactManager(SYMBIAN_BACKEND)->synthesizedContactDisplayLabel(*mContact); |
506 |
524 |
507 if (name.isEmpty()) |
525 if (name.isEmpty()) |
508 { |
526 { |
509 name = hbTrId("txt_phob_list_unnamed"); |
527 name = hbTrId("txt_phob_list_unnamed"); |
510 } |
528 } |
511 |
529 |
512 CntSaveManager::CntSaveResult result = mSaveManager->saveContact(mContact, mMgr->contactManager(SYMBIAN_BACKEND)); |
530 CntSaveManager::CntSaveResult result = mSaveManager->saveContact(mContact, mMgr->contactManager(SYMBIAN_BACKEND)); |
513 |
531 |
514 QVariant var; |
532 QVariant var; |
|
533 bool backToRoot(false); |
515 |
534 |
516 switch (result) |
535 switch (result) |
517 { |
536 { |
518 case CntSaveManager::ESaved: |
537 case CntSaveManager::ESaved: |
519 emit q->contactUpdated(KCntServicesReturnValueContactSaved); |
538 emit q->contactUpdated(KCntServicesReturnValueContactSaved); |
532 case CntSaveManager::EFailed: |
551 case CntSaveManager::EFailed: |
533 emit q->contactUpdated(KCntServicesReturnValueContactNotModified); |
552 emit q->contactUpdated(KCntServicesReturnValueContactNotModified); |
534 HbDeviceNotificationDialog::notification(QString(),hbTrId("SAVING FAILED!")); |
553 HbDeviceNotificationDialog::notification(QString(),hbTrId("SAVING FAILED!")); |
535 break; |
554 break; |
536 case CntSaveManager::EDeleted: |
555 case CntSaveManager::EDeleted: |
537 emit q->contactUpdated(KCntServicesReturnValueContactDeleted); |
556 emit q->contactRemoved(true); |
|
557 backToRoot = true; |
538 break; |
558 break; |
539 case CntSaveManager::ENothingDone: |
559 case CntSaveManager::ENothingDone: |
540 default: |
560 default: |
541 emit q->contactUpdated(KCntServicesReturnValueContactNotModified); |
561 emit q->contactUpdated(KCntServicesReturnValueContactNotModified); |
542 break; |
562 break; |
543 } |
563 } |
544 |
564 |
545 mMgr->back( mArgs ); |
565 if ( mArgs.value( EExtraAction ).toString() == CNT_ROOT_ACTION ) |
|
566 { |
|
567 backToRoot = true; |
|
568 } |
|
569 |
|
570 mMgr->back( mArgs, backToRoot ); |
546 } |
571 } |
547 |
572 |
548 void CntEditViewPrivate::openNameEditor() |
573 void CntEditViewPrivate::openNameEditor() |
549 { |
574 { |
550 QVariant var; |
575 QVariant var; |
679 } |
704 } |
680 |
705 |
681 void CntEditViewPrivate::addDetail( CntEditViewItem* aDetail ) |
706 void CntEditViewPrivate::addDetail( CntEditViewItem* aDetail ) |
682 { |
707 { |
683 QVariant id = aDetail->data( ERoleEditorViewId ); |
708 QVariant id = aDetail->data( ERoleEditorViewId ); |
684 CntViewParameters viewParameters; |
709 |
685 viewParameters.insert(EViewId, id.toInt()); |
710 mArgs.insert(EViewId, id.toInt()); |
|
711 mArgs.insert(ESelectedAction, CNT_ADD_ACTION ); |
686 QVariant var; |
712 QVariant var; |
687 var.setValue(*mContact); |
713 var.setValue(*mContact); |
688 viewParameters.insert(ESelectedContact, var); |
714 |
689 viewParameters.insert(ESelectedAction, CNT_ADD_ACTION ); |
715 mArgs.insert(ESelectedContact, var); |
690 |
716 |
691 mMgr->changeView( viewParameters ); |
717 mMgr->changeView( mArgs ); |
692 } |
718 } |
693 |
719 |
694 void CntEditViewPrivate::editDetail( CntEditViewItem* aDetail ) |
720 void CntEditViewPrivate::editDetail( CntEditViewItem* aDetail ) |
695 { |
721 { |
696 QVariant id = aDetail->data( ERoleEditorViewId ); |
722 QVariant id = aDetail->data( ERoleEditorViewId ); |
718 { |
744 { |
719 delete mContact; |
745 delete mContact; |
720 mContact = NULL; |
746 mContact = NULL; |
721 } |
747 } |
722 mContact = new QContact( aContact ); |
748 mContact = new QContact( aContact ); |
723 /* |
749 |
724 mListView->setModel( NULL ); |
750 QContactManager* cm = mMgr->contactManager( SYMBIAN_BACKEND ); |
725 |
751 connect(cm, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)), |
726 if ( mModel ) |
752 this, SLOT(contactDeletedFromOtherSource(const QList<QContactLocalId>&)), Qt::UniqueConnection); |
727 { |
753 } |
728 delete mModel; |
754 |
729 mModel = NULL; |
755 void CntEditViewPrivate::contactDeletedFromOtherSource(const QList<QContactLocalId>& contactIds) |
730 } |
756 { |
731 mModel = new CntEditViewListModel( mContact ); |
757 CNT_ENTRY |
732 |
758 |
733 if ( mListView ) |
759 if ( contactIds.contains(mContact->localId()) ) |
734 mListView->setModel( mModel ); |
760 { |
735 */ |
761 // Do not switch to the previous view immediately. List views are |
736 } |
762 // not updated properly if this is not done in the event loop |
|
763 QTimer::singleShot(0, this, SLOT(showRootView())); |
|
764 } |
|
765 |
|
766 CNT_EXIT |
|
767 } |
|
768 |
|
769 void CntEditViewPrivate::showRootView() |
|
770 { |
|
771 CNT_ENTRY |
|
772 |
|
773 Q_Q(CntEditView); |
|
774 |
|
775 emit q->contactRemoved(true); |
|
776 mMgr->back( mArgs, true ); |
|
777 |
|
778 CNT_EXIT |
|
779 } |
|
780 |
737 // End of File |
781 // End of File |
738 |
782 |