diff -r 4697dfb2d7ad -r 238255e8b033 messagingapp/msgui/unifiededitor/src/msgunieditoraddress.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgui/unifiededitor/src/msgunieditoraddress.cpp Fri Apr 16 14:56:15 2010 +0300 @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: + * + */ + +// INCLUDES +#include "debugtraces.h" +#include +#include +#include +#include +#include + +// USER INCLUDES +#include "msgunieditoraddress.h" +#include "msgunifiededitorlineedit.h" +#include "msguiutilsmanager.h" +#include "matchphnumberutil.h" + +const QString PBK_ICON(":/qtg_mono_contacts.svg"); +const QString SEND_ICON(":/qtg_mono_send.svg"); + +// Constants + +MsgUnifiedEditorAddress::MsgUnifiedEditorAddress( const QString& label, + const QString& pluginPath, + QGraphicsItem *parent ) : +HbWidget(parent), +mPluginPath(pluginPath), +mUtilsManager(0) +{ + #ifdef _DEBUG_TRACES_ + qDebug() << "MsgUnifiedEditorAddress calling HbStyle::registerPlugin"; + #endif + + setPluginBaseId(style()->registerPlugin(mPluginPath)); + mUtilsManager = new MsgUiUtilsManager(this); + + mLaunchBtn = new HbPushButton(this); + HbStyle::setItemName(mLaunchBtn,"launchBtn"); + connect(mLaunchBtn,SIGNAL(clicked()),mUtilsManager,SLOT(fetchContacts())); + + mLaunchBtn->setIcon(HbIcon(PBK_ICON)); + + mAddressEdit = new MsgUnifiedEditorLineEdit(label,this); + HbStyle::setItemName(mAddressEdit,"addressField"); + + mAddressEdit->setMaxRows(40); + connect(mAddressEdit, SIGNAL(addressTextChanged(const QString&)), + this, SLOT(onTextChanged(const QString&))); + + // add "Send" action in VKB + HbEditorInterface editorInterface(mAddressEdit); + HbAction *sendAction = new HbAction(HbIcon(SEND_ICON), QString(),this); + connect(sendAction, SIGNAL(triggered()),this, SIGNAL(sendMessage())); + editorInterface.addAction(sendAction); + + connect(mUtilsManager, SIGNAL(contactsFetched(const QVariant&)), + this, SLOT(contactsFetched(const QVariant&))); + } + +MsgUnifiedEditorAddress::~MsgUnifiedEditorAddress() +{ + style()->unregisterPlugin(mPluginPath); +} + +void MsgUnifiedEditorAddress::contactsFetched(const QVariant& value) +{ + CntServicesContactList contactList; + contactList = qVariantValue(value); + + for(int i = 0; i < contactList.count(); i++ ) + { + mAddressMap.insert(contactList[i].mPhoneNumber, contactList[i].mDisplayName); + if(!contactList[i].mDisplayName.isEmpty()) + { + mAddressEdit->setText(contactList[i].mDisplayName); + } + else + { + mAddressEdit->setText(contactList[i].mPhoneNumber); + } + } +} + +ConvergedMessageAddressList MsgUnifiedEditorAddress::addresses() +{ + #ifdef _DEBUG_TRACES_ + qCritical() << "MsgUnifiedEditorAddress::address start"; +#endif + // sync-up map to account for user-actions on edit-field + syncDeletionsToMap(); + syncAdditionsToMap(); + + QStringList uniqueAddr; + uniqueAddr = uniqueAddressList(); + + ConvergedMessageAddressList addresses; + foreach(QString addr, uniqueAddr) + { + ConvergedMessageAddress* address = new ConvergedMessageAddress; + address->setAddress(addr); + if(!mAddressMap.value(addr).isEmpty()) + { + address->setAlias(mAddressMap.value(addr)); + } + addresses.append(address); + } + #ifdef _DEBUG_TRACES_ + qCritical() << "MsgUnifiedEditorAddress::address end"; +#endif + return addresses; +} + +int MsgUnifiedEditorAddress::addressCount() +{ + return mAddressEdit->addresses().count(); +} + +void MsgUnifiedEditorAddress::setAddresses(ConvergedMessageAddressList addrlist) +{ + int count = addrlist.count(); + for(int i = 0; i < count; i++ ) + { + mAddressMap.insert(addrlist[i]->address(), addrlist[i]->alias()); + if(!addrlist[i]->alias().isEmpty()) + { + mAddressEdit->setText(addrlist[i]->alias()); + } + else + { + mAddressEdit->setText(addrlist[i]->address()); + } + } +} + +void MsgUnifiedEditorAddress::onTextChanged(const QString& text) +{ + if(!text.isEmpty()) + { + disconnect(mAddressEdit, SIGNAL(addressTextChanged(const QString&)), + this, SLOT(onTextChanged(const QString&))); + emit mmContentAdded(true); + connect(mAddressEdit, SIGNAL(addressTextChanged(const QString&)), + this, SLOT(onTextRemoved(const QString&))); + } +} + +void MsgUnifiedEditorAddress::onTextRemoved(const QString& text) +{ + if(text.isEmpty()) + { + disconnect(mAddressEdit, SIGNAL(addressTextChanged(const QString&)), + this, SLOT(onTextRemoved(const QString&))); + emit mmContentAdded(false); + connect(mAddressEdit, SIGNAL(addressTextChanged(const QString&)), + this, SLOT(onTextChanged(const QString&))); + } +} + +void MsgUnifiedEditorAddress::syncDeletionsToMap() +{ + // get address list from edit-field + QStringList addrList = mAddressEdit->addresses(); + + QMap::iterator i = mAddressMap.begin(); + while (i != mAddressMap.end()) + { + // check if either key or value is present in the list + if( !(addrList.contains(i.value(), Qt::CaseSensitive) || + addrList.contains(i.key(), Qt::CaseSensitive)) ) + {// if none are present, then delete entry from map + i = mAddressMap.erase(i); + } + else + { + ++i; + } + } +} + +void MsgUnifiedEditorAddress::syncAdditionsToMap() +{ + QStringList mapAddrList = mAddressMap.values(); + + // remove already mapped addresses from edit-field + QStringList userInputAddrList(mAddressEdit->addresses()); + foreach(QString addr, mapAddrList) + { + userInputAddrList.removeAll(addr); + } + + // add the unmapped addresses to address-map + foreach(QString addr, userInputAddrList) + { + mAddressMap.insertMulti(addr, addr); + } +} + +QStringList MsgUnifiedEditorAddress::uniqueAddressList() +{ + int matchDigitCount = MatchPhNumberUtil::matchDigits(); + QStringList mapAddrList = mAddressMap.keys(); + for(int j = 0;j