--- a/phonebookui/cntcommonui/views/cntactionmenubuilder.cpp Fri Oct 08 11:42:51 2010 +0300
+++ b/phonebookui/cntcommonui/views/cntactionmenubuilder.cpp Fri Oct 15 12:24:46 2010 +0300
@@ -14,80 +14,79 @@
* Description:
*
*/
+
#include "cntactionmenubuilder.h"
-#include <qcontact.h>
+
#include "cntstringmapper.h"
+#include "cntactionpopup.h"
+
#include <hbaction.h>
-#include "cntactionpopup.h"
CntActionMenuBuilder::CntActionMenuBuilder( QContactLocalId aMyCardId ) :
-QObject(),
-iMyCardId( aMyCardId ),
-mContact( 0 ),
-mMap( 0 )
- {
+ QObject(),
+ iMyCardId( aMyCardId ),
+ mContact( NULL ),
+ mMap( NULL )
+{
mMap = new CntStringMapper();
- }
+}
CntActionMenuBuilder::~CntActionMenuBuilder()
{
delete mMap;
- mMap = 0;
-
delete mContact;
- mContact = 0;
+}
+
+HbMenu* CntActionMenuBuilder::actionMenu( QContact& aContact, QContactLocalId myCardId )
+{
+ iMyCardId = myCardId;
+ mContact = new QContact( aContact );
+ return buildActionMenu( aContact );
}
HbMenu* CntActionMenuBuilder::buildActionMenu( QContact& aContact )
{
HbMenu* menu = new HbMenu();
-
+
// Regular contact, NOT MyCard
if ( aContact.localId() != iMyCardId )
- {
+ {
QList<QContactActionDescriptor> actionDescriptors = aContact.availableActions();
QStringList actions;
foreach ( QContactActionDescriptor d, aContact.availableActions() )
- {
+ {
actions << d.actionName();
- }
-
+ }
+
if ( actions.contains("call", Qt::CaseInsensitive) && isSupportedDetails("call", aContact))
- {
+ {
createCallAction( *menu, aContact );
- }
-
+ }
+
if ( actions.contains("message", Qt::CaseInsensitive) && isSupportedDetails("message", aContact) )
- {
+ {
createMessageAction( *menu, aContact );
- }
-
+ }
+
if ( actions.contains("email", Qt::CaseInsensitive) )
- {
+ {
createEmailAction( *menu, aContact );
- }
-
+ }
+
if ( menu->actions().size() > 0 )
menu->addSeparator();
- }
-
+ }
+
// If contact is NOT MyCard OR MyCard is not empty (detail count is more than 4)
if ( aContact.localId() != iMyCardId || aContact.details().size() > 4 )
- {
- menu->addAction(hbTrId("txt_common_menu_open"), this, SLOT(emitOpenContact()) );
- menu->addAction(hbTrId("txt_common_menu_edit"), this, SLOT(emitEditContact()) );
- menu->addAction(hbTrId("txt_phob_menu_delete_contact"), this, SLOT(emitDeleteContact()));
- }
+ {
+ menu->addAction( hbTrId("txt_common_menu_open"), this, SLOT(emitOpenContact()) );
+ menu->addAction( hbTrId("txt_common_menu_edit"), this, SLOT(emitEditContact()) );
+ menu->addAction( hbTrId("txt_phob_menu_delete_contact"), this, SLOT(emitDeleteContact()));
+ }
return menu;
}
-HbMenu* CntActionMenuBuilder::actionMenu( QContact& aContact, QContactLocalId myCardId)
-{
- iMyCardId = myCardId;
- mContact = new QContact( aContact );
- return buildActionMenu( aContact );
-}
-
void CntActionMenuBuilder::emitOpenContact()
{
emit openContact( *mContact );
@@ -107,21 +106,21 @@
{
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)));
- }
+ SLOT(emitContactAction(QContact&,QContactDetail, QString)));
+ }
}
void CntActionMenuBuilder::emitSmsContact()
@@ -141,7 +140,7 @@
CntActionPopup *actionPopup = new CntActionPopup(mContact);
actionPopup->showActionPopup("message");
connect( actionPopup, SIGNAL(executeContactAction(QContact&, QContactDetail, QString)), this,
- SLOT(emitContactaction(QContact&,QContactDetail, QString)));
+ SLOT(emitContactAction(QContact&,QContactDetail, QString)));
}
}
@@ -149,24 +148,24 @@
{
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)));
- }
+ SLOT(emitContactAction(QContact&,QContactDetail, QString)));
+ }
}
-void CntActionMenuBuilder::emitContactaction(QContact& aContact,QContactDetail contactDetail, QString aAction)
+void CntActionMenuBuilder::emitContactAction(QContact& aContact,QContactDetail contactDetail, QString aAction)
{
emit performContactAction( aContact,contactDetail, aAction);
}
@@ -175,11 +174,27 @@
{
// Create call action
QContactDetail detail = aContact.preferredDetail("call");
- QContactPhoneNumber number = detail.isEmpty() ? aContact.detail<QContactPhoneNumber>() : detail;
- QString context = number.contexts().isEmpty() ? QString() : number.contexts().first();
- QString subtype = number.subTypes().isEmpty() ? number.definitionName() : number.subTypes().first();
+
+ // if preferredDetail is empty and phone munbers contain more then one, use "txt_phob_menu_voice_call"
+ if (detail.isEmpty() && aContact.details<QContactPhoneNumber>().count() > 1)
+ {
+ aMenu.addAction(hbTrId("txt_phob_menu_voice_call"), this, SLOT(emitCallContact()));
+ }
+ else
+ {
+ QContactPhoneNumber number = detail.isEmpty() ? aContact.detail<QContactPhoneNumber>() : detail;
+ QString context = number.contexts().isEmpty() ? QString() : number.contexts().first();
+ QString subtype = number.subTypes().isEmpty() ? number.definitionName() : number.subTypes().first();
+
+ aMenu.addAction( mMap->getItemSpecificMenuLocString( subtype, context ), this, SLOT(emitCallContact()) );
+ }
+}
- aMenu.addAction( mMap->getItemSpecificMenuLocString( subtype, context ), this, SLOT(emitCallContact()) );
+void CntActionMenuBuilder::createMessageAction( HbMenu& aMenu, QContact& aContact )
+{
+ Q_UNUSED( aContact );
+
+ aMenu.addAction(hbTrId("txt_phob_menu_send_message"), this, SLOT(emitSmsContact()));
}
void CntActionMenuBuilder::createEmailAction( HbMenu& aMenu, QContact& aContact )
@@ -192,34 +207,27 @@
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())
- {
+ {
return false;
- }
-
+ }
+
QContactAction* contactAction = QContactAction::action(actionDescriptors.first());
QList<QContactDetail> details = contactAction->supportedDetails(contact);
delete contactAction;
-
+
for (int i = 0; i < details.count(); i++)
- {
+ {
if (contact.details().contains(details[i]))
- {
+ {
return true;
- }
}
-
+ }
+
return false;
}