--- 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