phonebookui/pbkcommonui/src/cntdetaileditor.cpp
changeset 53 e6aff7b69165
parent 50 77bc263e1626
child 61 d30183af6ca6
--- a/phonebookui/pbkcommonui/src/cntdetaileditor.cpp	Wed Jul 21 11:37:51 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntdetaileditor.cpp	Fri Jul 23 12:43:48 2010 +0300
@@ -37,6 +37,7 @@
 #include <hbparameterlengthlimiter.h>
 
 #include <QApplication>
+#include <QTimer>
 
 const char *CNT_DETAILEDITOR_XML = ":/xml/contacts_detail_editor.docml";
 
@@ -126,6 +127,11 @@
         selectedContact = aArgs.value(ESelectedContact).value<QContact>();
         connect( mDataForm, SIGNAL(itemShown(const QModelIndex&)), this, SLOT(handleItemShown(const QModelIndex&)) );
     }
+    
+    QContactManager* cm = mViewManager->contactManager(SYMBIAN_BACKEND);
+    connect(cm, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)), 
+        this, SLOT(contactDeletedFromOtherSource(const QList<QContactLocalId>&)));
+    
     mEditorFactory->setupEditorView(*this, selectedContact);
     
     QString myCard = mArgs.value( EMyCard ).toString();
@@ -164,6 +170,10 @@
         QContactManager* mgr = mViewManager->contactManager(SYMBIAN_BACKEND);
         mgr->saveContact( mDataFormModel->contact() );
     }
+    
+    QContactManager *cm = mViewManager->contactManager(SYMBIAN_BACKEND);
+    disconnect(cm, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)),
+            this, SLOT(contactDeletedFromOtherSource(const QList<QContactLocalId>&)));
 }
     
 bool CntDetailEditor::isDefault() const
@@ -192,33 +202,42 @@
 
 void CntDetailEditor::handleItemShown(const QModelIndex& aIndex )
 {
-    if ( mId == groupEditorView )
+    HbDataFormModelItem* modelItem = mDataFormModel->itemFromIndex( aIndex );
+    
+    if ( modelItem->type() == HbDataFormModelItem::TextItem ) 
     {
-        CntGroupEditorModel* groupModel = static_cast<CntGroupEditorModel*>( mDataFormModel );    
-        if ( groupModel->isConferenceNumber(aIndex) )
+        HbDataFormViewItem* viewItem = static_cast<HbDataFormViewItem*>(mDataForm->itemByIndex( aIndex ));
+        HbLineEdit* edit = static_cast<HbLineEdit*>( viewItem->dataItemContentWidget() );
+        QString objName;
+        
+        if ( mId == groupEditorView )
         {
-            HbDataFormViewItem* viewItem = static_cast<HbDataFormViewItem*>(mDataForm->itemByIndex( aIndex ));
-            HbLineEdit* edit = static_cast<HbLineEdit*>( viewItem->dataItemContentWidget() );
-            edit->setInputMethodHints( Qt::ImhDialableCharactersOnly );
+            CntGroupEditorModel* groupModel = static_cast<CntGroupEditorModel*>( mDataFormModel );    
+            if ( groupModel->isConferenceNumber(aIndex) )
+            {
+                edit->setInputMethodHints( Qt::ImhDialableCharactersOnly );
+                objName = "Conference number line edit %1";
+            }
+            else
+            {
+                edit->setInputMethodHints( Qt::ImhNoPredictiveText );
+                objName = "Group name line edit %1";
+            }
         }
         else
         {
-            HbDataFormViewItem* viewItem = static_cast<HbDataFormViewItem*>(mDataForm->itemByIndex( aIndex ));
-            HbLineEdit* edit = static_cast<HbLineEdit*>( viewItem->dataItemContentWidget() );
             edit->setInputMethodHints( Qt::ImhNoPredictiveText );
+            
+            if (modelItem->contentWidgetData( "preferDigits" ).toBool())
+            {
+                edit->setInputMethodHints( Qt::ImhPreferNumbers );
+            }
+            
+            objName = mDataFormModel->detail().definitionName() + " line edit %1";
         }
-    }
-    else
-    {
-        HbDataFormViewItem* viewItem = static_cast<HbDataFormViewItem*>(mDataForm->itemByIndex( aIndex ));
-        HbLineEdit* edit = static_cast<HbLineEdit*>( viewItem->dataItemContentWidget() );
-        edit->setInputMethodHints( Qt::ImhNoPredictiveText );
         
-        HbDataFormModelItem* modelItem = mDataFormModel->itemFromIndex( aIndex );
-        if (modelItem->contentWidgetData( "preferDigits" ).toBool())
-        {
-            edit->setInputMethodHints( Qt::ImhPreferNumbers );
-        }
+        // Naming UI components for automation testability
+        edit->setObjectName(objName.arg(aIndex.row()));
     }
 }
 
@@ -269,7 +288,7 @@
 {
     mDataFormModel->saveContactDetails();
     
-    QString name = mViewManager->contactManager(SYMBIAN_BACKEND)->synthesizedDisplayLabel(*mDataFormModel->contact());
+    QString name = mViewManager->contactManager(SYMBIAN_BACKEND)->synthesizedContactDisplayLabel(*mDataFormModel->contact());
     
     if (name.isEmpty())
     {
@@ -327,4 +346,28 @@
     return mId;
 }
 
+/*!
+Go back to the root view
+*/
+void CntDetailEditor::showRootView()
+{   
+    mViewManager->back( mArgs, true );
+}
+
+
+void CntDetailEditor::contactDeletedFromOtherSource(const QList<QContactLocalId>& contactIds)
+{
+    CNT_ENTRY
+    
+    QContact normalContact = mArgs.value(ESelectedContact).value<QContact>();
+    QContact groupContact = mArgs.value(ESelectedGroupContact).value<QContact>();
+    if ( contactIds.contains(normalContact.localId()) || contactIds.contains(groupContact.localId()) )
+    {
+        // Do not switch to the previous view immediately. List views are
+        // not updated properly if this is not done in the event loop
+        QTimer::singleShot(0, this, SLOT(showRootView()));
+    }
+    CNT_EXIT
+}
+
 // End of File