diff -r c18f9fa7f42e -r 640d30f4fb64 phonebookui/cntcommonui/views/cntactionmenubuilder.cpp --- 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 + #include "cntstringmapper.h" +#include "cntactionpopup.h" + #include -#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 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().count() == 1 ) { mContact->setPreferredDetail("call", mContact->details().first()); emit performContactAction(*mContact, mContact->details().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().count() == 1 ) { mContact->setPreferredDetail("email", mContact->details().first()); emit performContactAction(*mContact, mContact->details().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() : 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().count() > 1) + { + aMenu.addAction(hbTrId("txt_phob_menu_voice_call"), this, SLOT(emitCallContact())); + } + else + { + QContactPhoneNumber number = detail.isEmpty() ? aContact.detail() : 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 actionDescriptors = QContactAction::actionDescriptors(actionName, "symbian"); if (actionDescriptors.isEmpty()) - { + { return false; - } - + } + QContactAction* contactAction = QContactAction::action(actionDescriptors.first()); QList details = contactAction->supportedDetails(contact); delete contactAction; - + for (int i = 0; i < details.count(); i++) - { + { if (contact.details().contains(details[i])) - { + { return true; - } } - + } + return false; }