messagingapp/msgui/unifiededitor/src/msgunieditoraddress.cpp
changeset 23 238255e8b033
child 25 84d9eb65b26f
--- /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