--- /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 <HbTextItem>
+#include <HbPushButton>
+#include <HbAction>
+#include <hbinputeditorinterface.h>
+#include <cntservicescontact.h>
+
+// 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<CntServicesContactList>(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<QString, QString>::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<mapAddrList.count()-1;j++)
+ {
+ for(int i =j+1;i<mapAddrList.count();i++)
+ {
+ if(0 == mapAddrList[j].right(matchDigitCount).compare(mapAddrList[i].right(matchDigitCount)))
+ {
+ mapAddrList.removeAt(i);
+ i--;
+ }
+ }
+ }
+ return mapAddrList;
+}
+Q_IMPLEMENT_USER_METATYPE(CntServicesContact)
+Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(CntServicesContactList)
+
+//EOF