phonebookui/pbkcommonui/src/cnteditview_p.cpp
changeset 53 e6aff7b69165
parent 50 77bc263e1626
child 61 d30183af6ca6
equal deleted inserted replaced
51:81c360d47083 53:e6aff7b69165
    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     
   138     }
   140     }
   139 }
   141 }
   140 
   142 
   141 void CntEditViewPrivate::activate( CntAbstractViewManager* aMgr, const CntViewParameters aArgs )
   143 void CntEditViewPrivate::activate( CntAbstractViewManager* aMgr, const CntViewParameters aArgs )
   142 {
   144 {
       
   145     CNT_ENTRY
       
   146     
   143     mMgr = aMgr;
   147     mMgr = aMgr;
   144     mArgs = aArgs;
   148     mArgs = aArgs;
   145     
   149     
   146     if ( mView->navigationAction() != mSoftkey)
   150     if ( mView->navigationAction() != mSoftkey)
   147     {
   151     {
   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 )
   452                 HbMessageBox::Yes | HbMessageBox::No);
   460                 HbMessageBox::Yes | HbMessageBox::No);
   453     }
   461     }
   454     else
   462     else
   455     {
   463     {
   456         QContactManager* cm = mMgr->contactManager( SYMBIAN_BACKEND );
   464         QContactManager* cm = mMgr->contactManager( SYMBIAN_BACKEND );
   457         QString name = cm->synthesizedDisplayLabel( *mContact );
   465         QString name = cm->synthesizedContactDisplayLabel( *mContact );
   458         if (name.isEmpty())
   466         if (name.isEmpty())
   459         {
   467         {
   460             name = hbTrId("txt_phob_list_unnamed");
   468             name = hbTrId("txt_phob_list_unnamed");
   461         }
   469         }
   462         
   470         
   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;
   605     {
   630     {
   606         HbIcon icon(pixmap);
   631         HbIcon icon(pixmap);
   607         mHeading->setIcon(icon);
   632         mHeading->setIcon(icon);
   608         
   633         
   609         mImageLabel->clear();
   634         mImageLabel->clear();
   610         mImageLabel->setIcon(icon);
   635         mImageLabel->setIcon(pixmap);
   611     }
   636     }
   612 }
   637 }
   613 
   638 
   614 HbMenu* CntEditViewPrivate::createPopup( const QModelIndex aIndex, CntEditViewItem* aDetail )
   639 HbMenu* CntEditViewPrivate::createPopup( const QModelIndex aIndex, CntEditViewItem* aDetail )
   615 {
   640 {
   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