phonebookui/pbkcommonui/src/cntactionmenubuilder.cpp
changeset 47 7cbcb2896f0e
parent 40 b46a585f6909
--- a/phonebookui/pbkcommonui/src/cntactionmenubuilder.cpp	Wed Jun 23 18:02:44 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntactionmenubuilder.cpp	Tue Jul 06 14:05:47 2010 +0300
@@ -18,6 +18,7 @@
 #include <qcontact.h>
 #include "cntstringmapper.h"
 #include <hbaction.h>
+#include "cntactionpopup.h"
 
 CntActionMenuBuilder::CntActionMenuBuilder( QContactLocalId aMyCardId ) : 
 QObject(),
@@ -29,16 +30,16 @@
     }
 
 CntActionMenuBuilder::~CntActionMenuBuilder()
-    {
+{
     delete mMap;
     mMap = 0;
     
     delete mContact;
     mContact = 0;
-    }
+}
     
 HbMenu* CntActionMenuBuilder::buildActionMenu( QContact& aContact )
-    {
+{
     HbMenu* menu = new HbMenu();
     
     // Regular contact, NOT MyCard
@@ -78,7 +79,7 @@
         menu->addAction(hbTrId("txt_phob_menu_delete_contact"), this, SLOT(emitDeleteContact()));
         }
     return menu;
-    }
+}
 
 HbMenu* CntActionMenuBuilder::actionMenu( QContact& aContact, QContactLocalId myCardId)
 {
@@ -103,22 +104,75 @@
 }
 
 void CntActionMenuBuilder::emitCallContact()
-{
-    emit performContactAction( *mContact, "call" );
+{  
+    QContactDetail detail = mContact->preferredDetail("call");
+    if (!detail.isEmpty())
+        {
+        emit performContactAction( *mContact, detail, "call" );
+        }
+    else if (mContact->details<QContactPhoneNumber>().count() == 1 )
+    {
+        mContact->setPreferredDetail("call", mContact->details<QContactPhoneNumber>().first());
+        emit performContactAction(*mContact, mContact->details<QContactPhoneNumber>().first(), "call");
+    }
+    else 
+        {
+        CntActionPopup *actionPopup = new CntActionPopup(mContact);
+        actionPopup->showActionPopup("call");
+        connect( actionPopup, SIGNAL(executeContactAction(QContact&, QContactDetail, QString)), this, 
+                SLOT(emitContactaction(QContact&,QContactDetail, QString)));
+        }
 }
 
 void CntActionMenuBuilder::emitSmsContact()
 {
-    emit performContactAction( *mContact, "message" );
+    QContactDetail detail = mContact->preferredDetail("message");
+    if (!detail.isEmpty())
+    {
+        emit performContactAction( *mContact, detail, "message" );
+    }
+    else if (mContact->details<QContactPhoneNumber>().count() == 1 )
+    {
+        mContact->setPreferredDetail("message", mContact->details<QContactPhoneNumber>().first());
+        emit performContactAction(*mContact, mContact->details<QContactPhoneNumber>().first(), "message");
+    }
+    else 
+    {
+        CntActionPopup *actionPopup = new CntActionPopup(mContact);
+        actionPopup->showActionPopup("message");
+        connect( actionPopup, SIGNAL(executeContactAction(QContact&, QContactDetail, QString)), this, 
+                SLOT(emitContactaction(QContact&,QContactDetail, QString)));
+    }
 }
 
 void CntActionMenuBuilder::emitMailContact()
 {
-    emit performContactAction( *mContact, "email" );
+    QContactDetail detail = mContact->preferredDetail("email");
+    if (!detail.isEmpty())
+        {
+        emit performContactAction( *mContact,detail, "email" );
+        }
+    else if (mContact->details<QContactEmailAddress>().count() == 1 )
+    {
+        mContact->setPreferredDetail("email", mContact->details<QContactEmailAddress>().first());
+        emit performContactAction(*mContact, mContact->details<QContactEmailAddress>().first(), "email");
+    }
+    else 
+        {
+        CntActionPopup *actionPopup = new CntActionPopup(mContact);
+        actionPopup->showActionPopup("email");
+        connect( actionPopup, SIGNAL(executeContactAction(QContact&, QContactDetail, QString)), this, 
+                SLOT(emitContactaction(QContact&,QContactDetail, QString)));
+        }
+}
+
+void CntActionMenuBuilder::emitContactaction(QContact& aContact,QContactDetail contactDetail, QString aAction)
+{
+    emit performContactAction( aContact,contactDetail, aAction);
 }
 
 void CntActionMenuBuilder::createCallAction( HbMenu& aMenu, QContact& aContact )
-    {
+{
     // Create call action
     QContactDetail detail = aContact.preferredDetail("call");
     QContactPhoneNumber number = detail.isEmpty() ? aContact.detail<QContactPhoneNumber>() : detail;
@@ -126,27 +180,27 @@
     QString subtype = number.subTypes().isEmpty() ? number.definitionName() : number.subTypes().first();
 
     aMenu.addAction( mMap->getItemSpecificMenuLocString( subtype, context ), this, SLOT(emitCallContact()) );
-    }
+}
 
 void CntActionMenuBuilder::createEmailAction( HbMenu& aMenu, QContact& aContact )
-    {
+{
     // Create email action
     QContactDetail detail = aContact.preferredDetail("email");
     QContactEmailAddress email = detail.isEmpty() ? aContact.detail<QContactEmailAddress>() : detail;
     QString context = email.contexts().isEmpty() ? QString() : email.contexts().first();
        
     aMenu.addAction( mMap->getItemSpecificMenuLocString( email.definitionName(), context), this, SLOT(emitMailContact()) );
-    }
+}
 
 void CntActionMenuBuilder::createMessageAction( HbMenu& aMenu, QContact& aContact )
-    {
+{
     Q_UNUSED( aContact );
     
     aMenu.addAction(hbTrId("txt_phob_menu_send_message"), this, SLOT(emitSmsContact()));
-    }
+}
 
 bool CntActionMenuBuilder::isSupportedDetails( const QString &actionName, const QContact &contact )
-    {
+{
     QList<QContactActionDescriptor> actionDescriptors = QContactAction::actionDescriptors(actionName, "symbian");
     if (actionDescriptors.isEmpty())
         {
@@ -167,6 +221,6 @@
         }
     
     return false;
-    }
+}
     
 // End of File