phonebookui/pbkcommonui/src/cnteditview_p.cpp
changeset 31 2a11b5b00470
parent 27 de1630741fbe
child 37 fd64c38c277d
equal deleted inserted replaced
27:de1630741fbe 31:2a11b5b00470
    24 
    24 
    25 #include <hbdocumentloader.h>
    25 #include <hbdocumentloader.h>
    26 #include <thumbnailmanager_qt.h>
    26 #include <thumbnailmanager_qt.h>
    27 #include <hbabstractviewitem.h>
    27 #include <hbabstractviewitem.h>
    28 #include <hbmessagebox.h>
    28 #include <hbmessagebox.h>
       
    29 #include <hbgroupbox.h>
    29 #include <hbmainwindow.h>
    30 #include <hbmainwindow.h>
    30 #include <hbview.h>
    31 #include <hbview.h>
    31 #include <hblistview.h>
    32 #include <hblistview.h>
    32 #include <hbaction.h>
    33 #include <hbaction.h>
    33 #include <hbmenu.h>
    34 #include <hbmenu.h>
    34 #include <hbframebackground.h>
    35 #include <hbframebackground.h>
       
    36 #include <hbparameterlengthlimiter.h>
    35 
    37 
    36 const char *CNT_EDIT_XML = ":/xml/contacts_ev.docml";
    38 const char *CNT_EDIT_XML = ":/xml/contacts_ev.docml";
    37 
    39 
    38 CntEditViewPrivate::CntEditViewPrivate() :
    40 CntEditViewPrivate::CntEditViewPrivate() :
    39 mModel( NULL ),
    41 mModel( NULL ),
    40 mImageLabel( NULL ),
    42 mImageLabel( NULL ),
    41 mThumbnailManager( NULL )
    43 mThumbnailManager( NULL ),
       
    44 mContact( NULL )
    42 {
    45 {
    43     mDocument = new CntDocumentLoader;
    46     mDocument = new CntDocumentLoader;
    44     
    47     
    45     bool ok;
    48     bool ok;
    46     mDocument->load( CNT_EDIT_XML, &ok );
    49     mDocument->load( CNT_EDIT_XML, &ok );
    62     mDiscard = static_cast<HbAction*>( mDocument->findObject("cnt:discard") );
    65     mDiscard = static_cast<HbAction*>( mDocument->findObject("cnt:discard") );
    63     mSave = static_cast<HbAction*>( mDocument->findObject("cnt:savecontact") );
    66     mSave = static_cast<HbAction*>( mDocument->findObject("cnt:savecontact") );
    64     mDelete = static_cast<HbAction*>( mDocument->findObject("cnt:deletecontact") );
    67     mDelete = static_cast<HbAction*>( mDocument->findObject("cnt:deletecontact") );
    65     
    68     
    66     HbAction* add = static_cast<HbAction*>( mDocument->findObject("cnt:adddetail_options") );
    69     HbAction* add = static_cast<HbAction*>( mDocument->findObject("cnt:adddetail_options") );
    67     HbAction* removeContact = static_cast<HbAction*>( mDocument->findObject("cnt:deletecontact") );
    70 
    68     
       
    69     connect( add, SIGNAL(triggered()), this, SLOT(addDetailItem()) );
    71     connect( add, SIGNAL(triggered()), this, SLOT(addDetailItem()) );
    70     connect( mDelete, SIGNAL(triggered()), this, SLOT(deleteContact()) );
    72     connect( mDelete, SIGNAL(triggered()), this, SLOT(deleteContact()) );
    71     connect( mDiscard, SIGNAL(triggered()), this, SLOT(discardChanges()) );
    73     connect( mDiscard, SIGNAL(triggered()), this, SLOT(discardChanges()) );
    72     connect( mSave, SIGNAL(triggered()), this, SLOT(saveChanges()) );
    74     connect( mSave, SIGNAL(triggered()), this, SLOT(saveChanges()) );
    73         
    75         
    84     mView->deleteLater();
    86     mView->deleteLater();
    85     delete mDocument;
    87     delete mDocument;
    86     delete mListView;
    88     delete mListView;
    87     delete mModel;
    89     delete mModel;
    88     delete mContact;
    90     delete mContact;
       
    91     
    89     delete mThumbnailManager;
    92     delete mThumbnailManager;
    90 }
    93 }
    91 
    94 
    92 void CntEditViewPrivate::setOrientation(Qt::Orientation orientation)
    95 void CntEditViewPrivate::setOrientation(Qt::Orientation orientation)
    93 {
    96 {
   104 }
   107 }
   105 
   108 
   106 void CntEditViewPrivate::activate( CntAbstractViewManager* aMgr, const CntViewParameters aArgs )
   109 void CntEditViewPrivate::activate( CntAbstractViewManager* aMgr, const CntViewParameters aArgs )
   107 {
   110 {
   108     mMgr = aMgr;
   111     mMgr = aMgr;
       
   112     mArgs = aArgs;
       
   113     
   109     if ( mView->navigationAction() != mSoftkey)
   114     if ( mView->navigationAction() != mSoftkey)
   110     {
   115     {
   111         mView->setNavigationAction(mSoftkey);
   116         mView->setNavigationAction(mSoftkey);
   112     }
   117     }
   113     HbMainWindow* window = mView->mainWindow();
   118     HbMainWindow* window = mView->mainWindow();
   115     {
   120     {
   116         connect(window, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(setOrientation(Qt::Orientation)));
   121         connect(window, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(setOrientation(Qt::Orientation)));
   117         setOrientation(window->orientation());
   122         setOrientation(window->orientation());
   118     }
   123     }
   119         
   124         
       
   125     QVariant selectedAction = mArgs.value( EMyCard );
       
   126     QString myCard = selectedAction.toString();
       
   127     
   120     QVariant contact = aArgs.value( ESelectedContact );
   128     QVariant contact = aArgs.value( ESelectedContact );
   121     mContact = new QContact( contact.value<QContact>() );
   129     mContact = new QContact( contact.value<QContact>() );
   122     QContactLocalId localId = mContact->localId();
   130     QContactLocalId localId = mContact->localId();
   123     
   131     
   124     QContactManager* cm = mMgr->contactManager(SYMBIAN_BACKEND);
   132     QContactManager* cm = mMgr->contactManager(SYMBIAN_BACKEND);
   125     QContactLocalId selfContactId = cm->selfContactId();
   133     QContactLocalId selfContactId = cm->selfContactId();
   126     
   134     mIsMyCard = ( localId == selfContactId && localId != 0 ) || myCard == "myCard"; 
   127     HbMenu* menu = mView->menu();
   135 
       
   136     // if "MyCard", set slightly different heading and options menu
       
   137     if ( mIsMyCard )
       
   138     {
       
   139         mSave->setText(hbTrId("txt_phob_opt_save_my_card"));
       
   140         mDelete->setText(hbTrId("txt_phob_opt_clear_my_card"));
       
   141         HbGroupBox* groupBox = static_cast<HbGroupBox*>( mDocument->findWidget("groupBox") );
       
   142         if ( groupBox )
       
   143         {
       
   144             groupBox->setHeading(hbTrId("txt_phob_subtitle_edit_my_details"));
       
   145         }
       
   146     }
       
   147 
       
   148     if ( localId == 0 && !mIsMyCard )
       
   149     {
       
   150         HbMenu* menu = mView->menu();
       
   151         menu->removeAction( mDelete );
       
   152     }
       
   153     
   128     // don't delete contact which is "MyCard" or not saved yet or both.
   154     // don't delete contact which is "MyCard" or not saved yet or both.
   129     if ( localId == selfContactId && selfContactId != 0 && mContact->details().count() <= 4 || localId == 0 )
   155     if ( mIsMyCard && (mContact->details().count() <= 4 || localId == 0) )
   130     {
   156     {
   131         mDelete->setEnabled( false );
   157         mDelete->setEnabled( false );
   132     }
   158     }
       
   159 
   133     // save and discard disabled if no changes found
   160     // save and discard disabled if no changes found
   134     if ( (*mContact) == cm->contact( mContact->localId()) )
   161     if ( (*mContact) == cm->contact( mContact->localId()) )
   135     {
   162     {
   136         mDiscard->setEnabled( false );
   163         mDiscard->setEnabled( false );
   137         mSave->setEnabled( false );
   164         mSave->setEnabled( false );
   167     }
   194     }
   168     else
   195     else
   169     {
   196     {
   170         // open editor view
   197         // open editor view
   171         QVariant id = item->data( ERoleEditorViewId );
   198         QVariant id = item->data( ERoleEditorViewId );
   172         CntViewParameters viewParameters;
   199         mArgs.insert(EViewId, id.toInt());
   173         viewParameters.insert(EViewId, id.toInt());
   200         
   174         QVariant var;
   201         QVariant var;
   175         var.setValue(*mContact);
   202         var.setValue(*mContact);
   176         viewParameters.insert(ESelectedContact, var);
   203         mArgs.insert(ESelectedContact, var);
   177             
   204         mArgs.insert(ESelectedAction, QString() );
   178         mMgr->changeView( viewParameters );
   205         mMgr->changeView( mArgs );
   179     }
   206     }
   180 }
   207 }
   181 
   208 
   182 void CntEditViewPrivate::longPressed( HbAbstractViewItem* aItem, const QPointF& aCoords )
   209 void CntEditViewPrivate::longPressed( HbAbstractViewItem* aItem, const QPointF& aCoords )
   183 {
   210 {
   191         mModel->refreshExtensionItems( aItem->modelIndex() );
   218         mModel->refreshExtensionItems( aItem->modelIndex() );
   192     }
   219     }
   193     // only detail items are able to show context specific menu
   220     // only detail items are able to show context specific menu
   194     else
   221     else
   195     {
   222     {
   196         QVariant cd = item->data( ERoleContactDetail );
   223         HbMenu* menu = createPopup( aItem->modelIndex(), item );
   197         
   224         menu->setAttribute( Qt::WA_DeleteOnClose, true );
   198         HbMenu* menu = new HbMenu();
   225         menu->setPreferredPos( aCoords );
   199         menu->addActions( createPopup(item) );
   226         menu->setModal( true );
   200         HbAction* selected = menu->exec( aCoords );
   227         menu->open( this, SLOT(handleMenuAction(HbAction*)) );
   201         
   228     }
   202         if ( selected )
   229 }
   203         {
   230 
   204             switch ( selected->commandRole() )  
   231 void CntEditViewPrivate::handleMenuAction( HbAction* aAction )
   205             {
   232 {
   206                 case HbAction::EditRole:
   233     int row = aAction->data().toInt();
   207                 {
   234     QModelIndex index = mModel->index(row, 0);
   208                     editDetail( item );
   235     CntEditViewItem* item = mModel->itemAt( index );
   209                 }
   236     if ( aAction )
   210                 break;
   237     {
   211                 
   238         switch ( aAction->commandRole() )  
   212                 case HbAction::NewRole:
   239         {
   213                 {
   240         case HbAction::EditRole:
   214                     addDetail( item );
   241         {
   215                 }
   242             editDetail( item );
   216                 break;
   243         }
   217                 
   244         break;
   218                 case HbAction::DeleteRole:
   245         
   219                 {
   246         case HbAction::NewRole:
   220                     removeDetail( item, aItem->modelIndex() );
   247         {
   221                 }
   248             addDetail( item );
   222                 break;
   249         }
   223                 
   250         break;
   224                 default:
   251         
   225                     break;
   252         case HbAction::DeleteRole:
   226             }
   253         {
   227         }
   254             removeDetail( item, index );
   228         
   255         }
   229         delete menu;
   256         break;
   230     }
   257         
   231 }
       
   232 
       
   233 void CntEditViewPrivate::addDetailItem()
       
   234 {
       
   235     int detailEditorId = CntDetailPopup::selectDetail();
       
   236     if (detailEditorId != noView )
       
   237     {
       
   238         CntViewParameters viewParameters;
       
   239         viewParameters.insert(EViewId, detailEditorId );
       
   240         switch ( detailEditorId )
       
   241         {
       
   242         case phoneNumberEditorView:
       
   243         case emailEditorView:
       
   244         case urlEditorView:
       
   245         case noteEditorView:
       
   246             viewParameters.insert( ESelectedAction, "add" );
       
   247             break;
       
   248         case addressEditorView:
       
   249         case dateEditorView:
       
   250         case companyEditorView:
       
   251         case familyDetailEditorView:
       
   252             viewParameters.insert( ESelectedAction, "focus" );
       
   253             break;
       
   254         default:
   258         default:
   255             break;
   259             break;
   256         }
   260         }
   257         QVariant var;
   261     }
   258         var.setValue(*mContact);
   262 }
   259         viewParameters.insert(ESelectedContact, var);
   263 
   260         mMgr->changeView(viewParameters);
   264 void CntEditViewPrivate::addDetailItem()
       
   265 {
       
   266     CntViewIdList list;
       
   267     mModel->allInUseFields( list );
       
   268     
       
   269     CntDetailPopup::selectDetail( list, this, SLOT(handleAddDetailItem(HbAction*)) );
       
   270 }
       
   271 
       
   272 void CntEditViewPrivate::handleAddDetailItem(HbAction *aAction)
       
   273 {
       
   274     CntDetailPopup *popup = static_cast<CntDetailPopup*>(sender());
       
   275     
       
   276     if (popup && aAction != popup->actions().first())
       
   277     {
       
   278         int id = popup->selectedDetail();
       
   279         
       
   280         if (id != noView )
       
   281         {
       
   282             mArgs.insert(EViewId, id );
       
   283 
       
   284             switch ( id )
       
   285             {
       
   286             case phoneNumberEditorView:
       
   287             case emailEditorView:
       
   288             case urlEditorView:
       
   289             case noteEditorView:
       
   290                 mArgs.insert( ESelectedAction, "add" );
       
   291                 break;
       
   292             case addressEditorView:
       
   293             case dateEditorView:
       
   294             case companyEditorView:
       
   295             case familyDetailEditorView:
       
   296                 mArgs.insert( ESelectedAction, "focus" );
       
   297                 break;
       
   298             default:
       
   299                 break;
       
   300             }
       
   301             QVariant var;
       
   302             var.setValue(*mContact);
       
   303             mArgs.insert(ESelectedContact, var);
       
   304             mMgr->changeView( mArgs );
       
   305         }
   261     }
   306     }
   262 }
   307 }
   263 
   308 
   264 void CntEditViewPrivate::deleteContact()
   309 void CntEditViewPrivate::deleteContact()
   265 {
   310 {
   266     QContactManager* cm = mMgr->contactManager( SYMBIAN_BACKEND );
   311     if ( mIsMyCard )
   267     QString name = cm->synthesizedDisplayLabel( *mContact );
   312     {
   268 
   313         HbMessageBox::question(hbTrId("txt_phob_info_clear_my_card"), this, 
   269     HbMessageBox *note = new HbMessageBox(hbTrId("txt_phob_info_delete_1").arg(name), HbMessageBox::MessageTypeQuestion);
   314                 SLOT(handleDeleteContact(HbAction*)), 
   270     note->setPrimaryAction(new HbAction(hbTrId("txt_phob_button_delete"), note));
   315                 hbTrId("txt_phob_button_clear"), 
   271     note->setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel"), note));
   316                 hbTrId("txt_common_button_cancel"));
   272     HbAction *selected = note->exec();
   317     }
   273     if (selected == note->primaryAction())
   318     else
   274     {
   319     {
   275         cm->removeContact( mContact->localId() );
   320         QContactManager* cm = mMgr->contactManager( SYMBIAN_BACKEND );
   276         emit contactRemoved();
   321         QString name = cm->synthesizedDisplayLabel( *mContact );
   277         
   322         HbMessageBox::question(HbParameterLengthLimiter(hbTrId("txt_phob_info_delete_1")).arg(name), this, SLOT(handleDeleteContact(HbAction*)), 
   278         CntViewParameters viewParameters;
   323                 hbTrId("txt_phob_button_delete"), hbTrId("txt_common_button_cancel"));
   279         mMgr->back( viewParameters );
   324     }
   280     }
   325 }
   281     delete note;
   326 
       
   327 void CntEditViewPrivate::handleDeleteContact(HbAction *action)
       
   328 {
       
   329     HbMessageBox *dlg = static_cast<HbMessageBox*>(sender());
       
   330     if(dlg && action == dlg->actions().first())
       
   331     {
       
   332         QContactManager* cm = mMgr->contactManager( SYMBIAN_BACKEND );
       
   333 
       
   334         if ( mIsMyCard )
       
   335         {
       
   336             mContact->clearDetails();
       
   337             emit contactUpdated(cm->saveContact(mContact));
       
   338         }
       
   339         else
       
   340         {
       
   341             emit contactRemoved(cm->removeContact( mContact->localId() ));
       
   342         }
       
   343         
       
   344         mMgr->back( mArgs );
       
   345     }
   282 }
   346 }
   283 
   347 
   284 void CntEditViewPrivate::discardChanges()
   348 void CntEditViewPrivate::discardChanges()
   285 {
   349 {
   286     emit changesDiscarded();
   350     emit changesDiscarded();
   299 }
   363 }
   300 
   364 
   301 void CntEditViewPrivate::saveChanges()
   365 void CntEditViewPrivate::saveChanges()
   302 {
   366 {
   303     QContactManager* mgr = mMgr->contactManager( SYMBIAN_BACKEND );
   367     QContactManager* mgr = mMgr->contactManager( SYMBIAN_BACKEND );
   304     mgr->saveContact( mContact );
   368     bool isSavedContact = mContact->localId() > 0;
   305     emit contactUpdated();
   369     
   306     
   370     // if the contact is really changed or a new one
   307     QVariant var;
   371     if ( (*mContact) != mgr->contact(mContact->localId()) || !isSavedContact )
   308     var.setValue(*mContact);
   372     {
   309         
   373         int detailCount = mContact->details().count();
   310     CntViewParameters viewParameters;
   374             
   311     viewParameters.insert(ESelectedContact, var);
   375         // If its a new contact
   312     viewParameters.insert( ESelectedAction, "save" );    
   376         if ( !isSavedContact )
   313     
   377         {
   314     mMgr->back( viewParameters );
   378             if ( detailCount > 2 )
       
   379             {
       
   380                 bool success = mgr->saveContact( mContact );
       
   381                 if ( success && mIsMyCard )
       
   382                 {
       
   383                     mgr->setSelfContactId( mContact->localId() );
       
   384                 }
       
   385                 QVariant var;
       
   386                 var.setValue(*mContact);
       
   387                 mArgs.insert(ESelectedContact, var);
       
   388                 mArgs.insert( ESelectedAction, success ? "save" : "failed" );
       
   389                 emit contactUpdated(success);
       
   390             }
       
   391         }
       
   392         else
       
   393         {
       
   394             // contact details has been cleared out.
       
   395             if ( detailCount <= 4 )
       
   396             {
       
   397                 // get the contact from database, it should have the name still in it,
       
   398                 // and show the delete notification to user
       
   399                 QContact c = mgr->contact( mContact->localId() );
       
   400                 
       
   401                 bool success = mgr->removeContact( mContact->localId() );
       
   402                 emit contactRemoved(success);
       
   403                 if ( success )
       
   404                 {
       
   405                     mArgs.insert( ESelectedAction, "delete" );
       
   406                     QVariant contact;
       
   407                     contact.setValue( c );
       
   408                     mArgs.insert( ESelectedContact, contact );
       
   409                 }
       
   410             }
       
   411             else
       
   412             {
       
   413                 bool success = mgr->saveContact(mContact);
       
   414                 mArgs.insert( ESelectedAction, success ? "save" : "failed");
       
   415                 
       
   416                 QVariant var;
       
   417                 var.setValue(*mContact);
       
   418                 mArgs.insert(ESelectedContact, var);
       
   419                     
       
   420                 emit contactUpdated( success );
       
   421             }
       
   422         }
       
   423     }
       
   424     else
       
   425     {
       
   426         emit changesDiscarded();
       
   427     }
       
   428     
       
   429     mMgr->back( mArgs );
   315 }
   430 }
   316 
   431 
   317 void CntEditViewPrivate::openNameEditor()
   432 void CntEditViewPrivate::openNameEditor()
   318 {
   433 {
   319     QVariant var;
   434     QVariant var;
   320     var.setValue(*mContact);
   435     var.setValue(*mContact);
   321             
   436             
   322     CntViewParameters viewParameters;
   437     mArgs.insert(EViewId, namesEditorView);
   323     viewParameters.insert(EViewId, namesEditorView);
   438     mArgs.insert(ESelectedAction, QString());
   324     viewParameters.insert(ESelectedContact, var);
   439     mArgs.insert(ESelectedContact, var);
   325     
   440     
   326     mMgr->changeView( viewParameters );
   441     mMgr->changeView( mArgs );
   327 }
   442 }
   328 
   443 
   329 void CntEditViewPrivate::openImageEditor()
   444 void CntEditViewPrivate::openImageEditor()
   330 {
   445 {
   331     QVariant var;
   446     QVariant var;
   332     var.setValue(*mContact);
   447     var.setValue(*mContact);
   333                 
   448                 
   334     CntViewParameters viewParameters;
   449     mArgs.insert(ESelectedContact, var);
   335     viewParameters.insert(ESelectedContact, var);
   450     mArgs.insert(ESelectedAction, QString());
   336     viewParameters.insert(EViewId, imageEditorView );
   451     mArgs.insert(EViewId, imageEditorView );
   337         
   452         
   338     mMgr->changeView( viewParameters );
   453     mMgr->changeView( mArgs );
   339 }
   454 }
   340 
   455 
   341 void CntEditViewPrivate::loadAvatar()
   456 void CntEditViewPrivate::loadAvatar()
   342 {
   457 {
   343     QList<QContactAvatar> details = mContact->details<QContactAvatar>();
   458     QList<QContactAvatar> details = mContact->details<QContactAvatar>();
   365         mImageLabel->clear();
   480         mImageLabel->clear();
   366         mImageLabel->setIcon(icon);
   481         mImageLabel->setIcon(icon);
   367     }
   482     }
   368 }
   483 }
   369 
   484 
   370 QList<QAction*> CntEditViewPrivate::createPopup( CntEditViewItem* aDetail )
   485 HbMenu* CntEditViewPrivate::createPopup( const QModelIndex aIndex, CntEditViewItem* aDetail )
   371 {
   486 {
   372     QList<QAction*> actions;
   487     HbMenu* menu = new HbMenu();
   373     CntStringMapper* map = new CntStringMapper();
   488     CntStringMapper* map = new CntStringMapper();
   374     QVariant cd = aDetail->data( ERoleContactDetail );
   489     QVariant cd = aDetail->data( ERoleContactDetail );
   375     QContactDetail detail = cd.value<QContactDetail>();
   490     QContactDetail detail = cd.value<QContactDetail>();
   376     
   491     
   377     HbAction* edit = static_cast<HbAction*>(mDocument->findObject("cnt:editdetail"));
   492     QVariant data( aIndex.row() );
   378             
   493     
   379     HbAction* add = static_cast<HbAction*>(mDocument->findObject("cnt:adddetail_popup"));
       
   380     QString text = add->text();
       
   381     add->setText( text.arg( "%1", map->getMappedDetail(detail.definitionName())) );
       
   382             
       
   383     HbAction* del = static_cast<HbAction*>(mDocument->findObject("cnt:deletedetail"));
       
   384     text = edit->text();
       
   385     del->setText( text.arg("%1", map->getMappedDetail(detail.definitionName())) );
       
   386         
       
   387     add->setCommandRole( HbAction::NewRole );
       
   388     edit->setCommandRole( HbAction::EditRole );
       
   389     del->setCommandRole( HbAction::DeleteRole );
       
   390             
       
   391     if ( !mModel->isEmptyItem(aDetail) ) 
   494     if ( !mModel->isEmptyItem(aDetail) ) 
   392     {
   495     {
   393         // add is supported only on these items:
   496         // add is supported only on these items:
   394         // QContactPhonenumber, QContactOnlineAccount, QContactEmail, QContactUrl and QContactNote
   497         // QContactPhonenumber, QContactOnlineAccount, QContactEmail, QContactUrl and QContactNote
   395         QString def = detail.definitionName(); 
   498         QString def = detail.definitionName(); 
   397              def == QContactOnlineAccount::DefinitionName ||
   500              def == QContactOnlineAccount::DefinitionName ||
   398              def == QContactEmailAddress::DefinitionName  ||
   501              def == QContactEmailAddress::DefinitionName  ||
   399              def == QContactUrl::DefinitionName || 
   502              def == QContactUrl::DefinitionName || 
   400              def == QContactNote::DefinitionName )
   503              def == QContactNote::DefinitionName )
   401         {
   504         {
   402             actions.append( add );
   505             HbAction* add = menu->addAction(HbParameterLengthLimiter(
   403         }
   506                     map->getContactEditorAddLocString(detail.definitionName(), "")));
   404         actions.append( edit );
   507             add->setCommandRole( HbAction::NewRole );
   405         actions.append( del );
   508             add->setData( data );
       
   509         }
       
   510         
       
   511         QString context;
       
   512         QString subtype;
       
   513         if ( def == QContactPhoneNumber::DefinitionName )
       
   514         {
       
   515             QContactPhoneNumber number(detail); 
       
   516             context = number.contexts().isEmpty() ? QString() : number.contexts().first();
       
   517             subtype = number.subTypes().isEmpty() ? number.definitionName() : number.subTypes().first();
       
   518         }
       
   519         else if ( def == QContactOnlineAccount::DefinitionName )
       
   520         {
       
   521             QContactOnlineAccount number(detail); 
       
   522             context = number.contexts().isEmpty() ? QString() : number.contexts().first();
       
   523             subtype = number.subTypes().isEmpty() ? number.definitionName() : number.subTypes().first();
       
   524         }
       
   525         else if ( def == QContactFamily::DefinitionName )
       
   526         {
       
   527             QStringList fields = aDetail->data(ERoleContactDetailFields).toStringList();
       
   528             subtype = fields.first();
       
   529         }
       
   530         else
       
   531         {
       
   532             context = QString();
       
   533             subtype = detail.definitionName();
       
   534         }
       
   535             HbAction* edit = menu->addAction(HbParameterLengthLimiter(map->getContactEditorEditLocString(subtype, context)));
       
   536             HbAction* del = menu->addAction(HbParameterLengthLimiter(map->getContactEditorDelLocString(subtype, context)));
       
   537             edit->setCommandRole( HbAction::EditRole );
       
   538             del->setCommandRole( HbAction::DeleteRole );
       
   539             edit->setData( data );
       
   540             del->setData( data );
   406     }
   541     }
   407     else
   542     else
   408     {
   543     {
   409         actions.append( edit );
   544         HbAction* edit = menu->addAction(HbParameterLengthLimiter(map->getContactEditorEditLocString(detail.definitionName(), "")));
   410     }
   545         edit->setCommandRole( HbAction::EditRole );
   411     delete map;
   546         edit->setData( data );
   412     return actions;
   547     }
       
   548     
       
   549     return menu;
   413 }
   550 }
   414 
   551 
   415 void CntEditViewPrivate::addDetail( CntEditViewItem* aDetail )
   552 void CntEditViewPrivate::addDetail( CntEditViewItem* aDetail )
   416 {
   553 {
   417     QVariant id = aDetail->data( ERoleEditorViewId );
   554     QVariant id = aDetail->data( ERoleEditorViewId );
   426 }
   563 }
   427 
   564 
   428 void CntEditViewPrivate::editDetail( CntEditViewItem* aDetail )
   565 void CntEditViewPrivate::editDetail( CntEditViewItem* aDetail )
   429 {
   566 {
   430     QVariant id = aDetail->data( ERoleEditorViewId );
   567     QVariant id = aDetail->data( ERoleEditorViewId );
   431     CntViewParameters viewParameters;
   568     
   432     viewParameters.insert(EViewId, id.toInt());
   569     mArgs.insert(EViewId, id.toInt());
       
   570     mArgs.insert(ESelectedAction, QString() );
   433     QVariant var;
   571     QVariant var;
   434     var.setValue(*mContact);
   572     var.setValue(*mContact);
   435     
   573     
   436     viewParameters.insert(ESelectedContact, var);
   574     mArgs.insert(ESelectedContact, var);
   437                                               
   575                                               
   438     mMgr->changeView( viewParameters );
   576     mMgr->changeView( mArgs );
   439 }
   577 }
   440 
   578 
   441 void CntEditViewPrivate::removeDetail( CntEditViewItem* aDetail, const QModelIndex& aIndex )
   579 void CntEditViewPrivate::removeDetail( CntEditViewItem* aDetail, const QModelIndex& aIndex )
   442 {
   580 {
   443     mModel->removeItem( aDetail, aIndex );
   581     mModel->removeItem( aDetail, aIndex );