--- a/phonebookui/pbkcommonui/src/cntcontactcarddatacontainer.cpp Fri Apr 16 14:53:18 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntcontactcarddatacontainer.cpp Mon May 03 12:24:20 2010 +0300
@@ -16,10 +16,13 @@
*/
#include "cntcontactcarddatacontainer.h"
+#include "cntcontactcarddataitem.h"
#include <cntmaptileservice.h> //For fetching maptile
+#include <QPainter>
#include <qtcontacts.h>
#include <hbicon.h>
+#include <cntviewparams.h>
#include "cntstringmapper.h"
@@ -29,17 +32,13 @@
CntContactCardDataContainer::CntContactCardDataContainer(QContact* contact, QObject *parent) : mContact(contact), mSeparatorIndex(-1)
{
Q_UNUSED(parent);
- mDataPointer = new CntContactCardContainerData;
- //Non standard types needs to be registered before they can be used by QVariant
- qRegisterMetaType<QContactDetail>();
-
if (contact->type() == QContactType::TypeGroup)
{
initializeGroupData();
}
else
{
- initializeData();
+ initializeActionsData();
initializeDetailsData();
}
}
@@ -49,13 +48,16 @@
*/
CntContactCardDataContainer::~CntContactCardDataContainer()
{
-
+ while (!mDataItemList.isEmpty())
+ {
+ delete mDataItemList.takeFirst();
+ }
}
/*!
Initialize contact details which include actions.
*/
-void CntContactCardDataContainer::initializeData()
+void CntContactCardDataContainer::initializeActionsData()
{
QList<QContactActionDescriptor> actionDescriptors = mContact->availableActions();
QStringList availableActions;
@@ -66,54 +68,57 @@
QList<QContactDetail> details = mContact->details();
for (int i = 0; i < details.count(); i++)
- {
- QString context;
- if (details[i].contexts().count())
- {
- context = mStringMapper.getMappedDetail(details[i].contexts().at(0));
- }
-
+ {
if (availableActions.contains("call", Qt::CaseInsensitive) && supportsDetail("call", details[i]) && details[i].definitionName() == QContactPhoneNumber::DefinitionName)
{
QContactPhoneNumber number(details.at(i));
- QVariantList dataList;
- //type
- dataList.append("call");
- //name
- QStringList list;
- list << mStringMapper.getMappedDetail(number.subTypes().at(0)) << context;
- QString name = list.join(" ");
- dataList.append(qtTrId("Call %1").arg(name.trimmed()));
- //data
- dataList.append(number.number());
- //icon
- dataList.append(mStringMapper.getMappedLauncherIcon(number.subTypes().at(0)));
- //detail
- QContactDetail detail(number);
- QVariant var;
- var.setValue(detail);
- dataList.append(var);
- mDataPointer->mDataList.insert(rowCount(), dataList);
+ QString title;
+ QString icon;
+ if (!number.contexts().isEmpty())
+ {
+ title = mStringMapper.getContactCardListLocString(number.subTypes().first(), number.contexts().first());
+ icon = mStringMapper.getContactCardIconString(number.subTypes().first(), number.contexts().first());
+ }
+ else
+ {
+ title = mStringMapper.getContactCardListLocString(number.subTypes().first(), QString());
+ icon = mStringMapper.getContactCardIconString(number.subTypes().first(), QString());
+ }
+
+ CntContactCardDataItem* dataItem = new CntContactCardDataItem(title, true);
+ dataItem->setAction("call");
+ dataItem->setValueText(number.number());
+ dataItem->setIcon(HbIcon(icon));
+ dataItem->setContactDetail(number);
+ mDataItemList.insert(itemCount(), dataItem);
}
if (availableActions.contains("message", Qt::CaseInsensitive) && supportsDetail("message", details[i]) && details[i].definitionName() == QContactPhoneNumber::DefinitionName)
{
QContactPhoneNumber number(details.at(i));
- QVariantList dataList;
- //type
- dataList.append("message");
- //name
- dataList.append(hbTrId("txt_phob_menu_send_message"));
- //data
- dataList.append(number.number());
- //icon
- dataList.append("qtg_large_message");
- //detail
- QContactDetail detail(number);
- QVariant var;
- var.setValue(detail);
- dataList.append(var);
- mDataPointer->mDataList.insert(rowCount(), dataList);
+ CntContactCardDataItem* dataItem = new CntContactCardDataItem(hbTrId("txt_phob_dblist_send_message"), true);
+ dataItem->setAction("message");
+ dataItem->setValueText(number.number());
+ QString icon;
+ if (number.contexts().isEmpty())
+ {
+ icon = "qtg_large_message";
+ }
+ else if (number.contexts().first() == QContactDetail::ContextHome)
+ {
+ icon = "qtg_large_message_home";
+ }
+ else if (number.contexts().first() == QContactDetail::ContextWork)
+ {
+ icon = "qtg_large_message_work";
+ }
+ else
+ {
+ icon = "qtg_large_message";
+ }
+ dataItem->setIcon(HbIcon(icon));
+ dataItem->setContactDetail(number);
+ mDataItemList.insert(itemCount(), dataItem);
}
}
@@ -122,33 +127,29 @@
{
QList<QContactDetail> details = actionDetails("email", *mContact);
for (int i = 0; i < details.count(); i++)
- {
- QString context;
- if (details[i].contexts().count())
- {
- context = mStringMapper.getMappedDetail(details[i].contexts().at(0));
- }
-
+ {
if (details[i].definitionName() == QContactEmailAddress::DefinitionName)
{
QContactEmailAddress email(details.at(i));
- QVariantList dataList;
- //action
- dataList.append("email");
- //name
- QStringList list;
- list << mStringMapper.getMappedDetail(email.definitionName()) << context;
- dataList.append(qtTrId("Mail %1").arg(list.join(" ").trimmed()));
- //data
- dataList.append(email.emailAddress());
- //icon
- dataList.append("qtg_large_email");
- //detail
- QContactDetail detail(email);
- QVariant var;
- var.setValue(detail);
- dataList.append(var);
- mDataPointer->mDataList.insert(rowCount(), dataList);
+ QString title;
+ QString icon;
+ if (!email.contexts().isEmpty())
+ {
+ title = mStringMapper.getContactCardListLocString(email.definitionName(), email.contexts().first());
+ icon = mStringMapper.getContactCardIconString(email.definitionName(), email.contexts().first());
+ }
+ else
+ {
+ title = mStringMapper.getContactCardListLocString(email.definitionName(), QString());
+ icon = mStringMapper.getContactCardIconString(email.definitionName(), QString());
+ }
+
+ CntContactCardDataItem* dataItem = new CntContactCardDataItem(title, true);
+ dataItem->setAction("email");
+ dataItem->setValueText(email.emailAddress(), Qt::ElideLeft);
+ dataItem->setIcon(HbIcon(icon));
+ dataItem->setContactDetail(email);
+ mDataItemList.insert(itemCount(), dataItem);
}
}
}
@@ -160,60 +161,34 @@
void CntContactCardDataContainer::initializeGroupData()
{
// get the conference number
+ QContactPhoneNumber confCallNumber = mContact->detail<QContactPhoneNumber>();
- QContactPhoneNumber confCallNumber = mContact->detail<QContactPhoneNumber>();
-
- QVariantList callDataList;
- //type
- callDataList.append("call");
- //name
- callDataList.append(hbTrId("txt_phob_dblist_conference_call"));
- //data
- callDataList.append(confCallNumber.number());
- //icon
- callDataList.append("qtg_large_call_group");
- //detail
- QContactDetail detail(confCallNumber);
- QVariant var;
- var.setValue(detail);
- callDataList.append(var);
- if(confCallNumber.number() != NULL)
- {
- mDataPointer->mDataList.insert(rowCount(), callDataList);
- }
+ //call
+ if (confCallNumber.number() != NULL)
+ {
+ CntContactCardDataItem* dataItem = new CntContactCardDataItem(hbTrId("txt_phob_dblist_conference_call"), true);
+ dataItem->setAction("call");
+ dataItem->setValueText(confCallNumber.number());
+ dataItem->setIcon(HbIcon("qtg_large_call_group"));
+ dataItem->setContactDetail(confCallNumber);
+ mDataItemList.insert(itemCount(), dataItem);
+ }
- QVariantList messageDataList;
- //type
- messageDataList.append("message");
- //name
- messageDataList.append(hbTrId("txt_phob_list_send_group_message"));
- //data
- messageDataList.append(confCallNumber.number());
- //icon
- messageDataList.append("qtg_large_message");
- //detail
- QContactDetail messageDetail(confCallNumber);
- QVariant messageVar;
- messageVar.setValue(messageDetail);
- messageDataList.append(messageVar);
- mDataPointer->mDataList.insert(rowCount(), messageDataList);
+ //message
+ CntContactCardDataItem* dataMessageItem = new CntContactCardDataItem(hbTrId("txt_phob_dblist_send_val_members"), true);
+ dataMessageItem->setAction("message");
+ dataMessageItem->setValueText(confCallNumber.number());
+ dataMessageItem->setIcon(HbIcon("qtg_large_message"));
+ dataMessageItem->setContactDetail(confCallNumber);
+ mDataItemList.insert(itemCount(), dataMessageItem);
- QVariantList emailDataList;
- //type
- emailDataList.append("email");
- //name
- emailDataList.append(hbTrId("txt_phob_list_send_group_mail"));
- //data
- emailDataList.append(confCallNumber.number());
- //icon
- emailDataList.append("qtg_large_email");
- //detail
- QContactDetail emailDetail(confCallNumber);
- QVariant emailVar;
- emailVar.setValue(emailDetail);
- emailDataList.append(emailVar);
- mDataPointer->mDataList.insert(rowCount(), emailDataList);
-
+ //email
+ CntContactCardDataItem* dataEmailItem = new CntContactCardDataItem(hbTrId("txt_phob_dblist_email"), true);
+ dataEmailItem->setAction("email");
+ dataEmailItem->setValueText(confCallNumber.number());
+ dataEmailItem->setIcon(HbIcon("qtg_large_email"));
+ dataEmailItem->setContactDetail(confCallNumber);
+ mDataItemList.insert(itemCount(), dataEmailItem);
}
/*!
@@ -232,28 +207,27 @@
sourceAddressType = CntMapTileService::AddressPreference;
QVariantList addressList;
//no action
- addressList.append(QString());
+ QString title;
if (addressDetails[i].contexts().isEmpty())
{
- addressList.append(hbTrId("txt_phob_formlabel_address"));
+ title = hbTrId("txt_phob_formlabel_address");
}
else
{
if ( addressDetails[i].contexts().at(0) == contextHome )
{
sourceAddressType = CntMapTileService::AddressHome;
- addressList.append(hbTrId("txt_phob_formlabel_address_home"));
+ title = hbTrId("txt_phob_formlabel_address_home");
}
else if (addressDetails[i].contexts().at(0) == contextWork)
{
sourceAddressType = CntMapTileService::AddressWork;
- addressList.append(hbTrId("txt_phob_formlabel_address_work"));
+ title = hbTrId("txt_phob_formlabel_address_work");
}
}
- QStringList address;
+ CntContactCardDataItem* dataItem = new CntContactCardDataItem(title, false);
- if (!addressDetails[i].postOfficeBox().isEmpty())
- address.append(addressDetails[i].postOfficeBox());
+ QStringList address;
if (!addressDetails[i].street().isEmpty())
address.append(addressDetails[i].street());
if (!addressDetails[i].postcode().isEmpty())
@@ -264,21 +238,16 @@
address.append(addressDetails[i].region());
if (!addressDetails[i].country().isEmpty())
address.append(addressDetails[i].country());
+
+ dataItem->setValueText(address.join(" "));
+ dataItem->setContactDetail(addressDetails[i]);
+ addSeparator(itemCount());
+ mDataItemList.insert(itemCount(), dataItem);
- addressList.append(address.join(" "));
- //no icon
- addressList.append(QString());
- //detail
- QContactDetail detail(addressDetails[i]);
- QVariant var;
- var.setValue(detail);
- addressList.append(var);
- addSeparator(rowCount());
- mDataPointer->mDataList.insert(rowCount(), addressList);
//Check whether location feature enabled
if (mLocationFeatureEnabled)
{
- TUint32 contactId = mContact->id().localId();
+ QContactLocalId contactId = mContact->id().localId();
//Get the maptile image path
QString imageFile = CntMapTileService::getMapTileImage(contactId, sourceAddressType);
@@ -291,9 +260,26 @@
maptileImage.append(QString(" "));
maptileImage.append(QString(" "));
- maptileImage.append( imageFile );
- addSeparator(rowCount());
- mDataPointer->mDataList.insert(rowCount(), maptileImage);
+ //Display the maptile image
+ HbIcon icon(imageFile);
+ QIcon mapTileIcon;
+
+ QPainter painter;
+ QPixmap baloon(":/icons/pin.png");
+ QPixmap map(icon.pixmap());
+
+ //Display pin image in the center of maptile image
+ painter.begin(&map);
+ painter.drawPixmap((map.width()/2),
+ ((map.height()/2)-(baloon.height())), baloon);
+ painter.end();
+ mapTileIcon.addPixmap(map);
+
+ addSeparator(itemCount());
+
+ CntContactCardDataItem* dataItem = new CntContactCardDataItem(QString(), false);
+ dataItem->setIcon(HbIcon(mapTileIcon));
+ mDataItemList.insert(itemCount(), dataItem);
}
}
}
@@ -302,62 +288,35 @@
QList<QContactBirthday> birthdayDetails = mContact->details<QContactBirthday>();
for (int i = 0; i < birthdayDetails.count(); i++)
{
- QVariantList dateList;
- //no action
- dateList.append(QString());
- dateList.append(hbTrId("txt_phob_formlabel_birthday"));
- dateList.append(birthdayDetails[i].date().toString("dd MMMM yyyy"));
- //no icon
- dateList.append(QString());
- //detail
- QContactDetail detail(birthdayDetails[i]);
- QVariant var;
- var.setValue(detail);
- dateList.append(var);
- addSeparator(rowCount());
- mDataPointer->mDataList.insert(rowCount(), dateList);
+ CntContactCardDataItem* dataItem = new CntContactCardDataItem(hbTrId("txt_phob_formlabel_birthday"), false);
+ dataItem->setValueText(birthdayDetails[i].date().toString("dd MMMM yyyy"));
+ dataItem->setContactDetail(birthdayDetails[i]);
+ addSeparator(itemCount());
+ mDataItemList.insert(itemCount(), dataItem);
}
//anniversary
QList<QContactAnniversary> anniversaryDetails = mContact->details<QContactAnniversary>();
for (int i = 0; i < anniversaryDetails.count(); i++)
{
- QVariantList dateList;
- //no action
- dateList.append(QString());
- dateList.append(hbTrId("txt_phob_formlabel_anniversary"));
- dateList.append(anniversaryDetails[i].originalDate().toString("dd MMMM yyyy"));
- //no icon
- dateList.append(QString());
- //detail
- QContactDetail detail(anniversaryDetails[i]);
- QVariant var;
- var.setValue(detail);
- dateList.append(var);
- addSeparator(rowCount());
- mDataPointer->mDataList.insert(rowCount(), dateList);
+ CntContactCardDataItem* dataItem = new CntContactCardDataItem(hbTrId("txt_phob_formlabel_anniversary"), false);
+ dataItem->setValueText(anniversaryDetails[i].originalDate().toString("dd MMMM yyyy"));
+ dataItem->setContactDetail(anniversaryDetails[i]);
+ addSeparator(itemCount());
+ mDataItemList.insert(itemCount(), dataItem);
}
//ringing tone
- QList<QContactAvatar> ringtoneDetails = mContact->details<QContactAvatar>();
+ QList<QContactRingtone> ringtoneDetails = mContact->details<QContactRingtone>();
for (int i = 0; i < ringtoneDetails.count(); i++)
{
- if (ringtoneDetails.at(i).subType() == QContactAvatar::SubTypeAudioRingtone)
+ if (!ringtoneDetails.at(i).audioRingtoneUrl().isEmpty())
{
- QVariantList dataList;
- //no action
- dataList.append(QString());
- dataList.append(hbTrId("txt_phob_formlabel_ringing_tone"));
- dataList.append(ringtoneDetails[i].avatar());
- //no icon
- dataList.append(QString());
- //detail
- QContactDetail detail(ringtoneDetails[i]);
- QVariant var;
- var.setValue(detail);
- dataList.append(var);
- addSeparator(rowCount());
- mDataPointer->mDataList.insert(rowCount(), dataList);
+ CntContactCardDataItem* dataItem = new CntContactCardDataItem(hbTrId("txt_phob_formlabel_ringing_tone"), false);
+ dataItem->setValueText(ringtoneDetails[i].audioRingtoneUrl().toString());
+ dataItem->setContactDetail(ringtoneDetails[i]);
+ addSeparator(itemCount());
+ mDataItemList.insert(itemCount(), dataItem);
break;
}
}
@@ -366,57 +325,28 @@
QList<QContactNote> noteDetails = mContact->details<QContactNote>();
for (int i = 0; i < noteDetails.count(); i++)
{
- QVariantList noteList;
- //no action
- noteList.append(QString());
- noteList.append(hbTrId("txt_phob_formlabel_note2"));
- noteList.append(noteDetails[i].note());
- //no icon
- noteList.append(QString());
- //detail
- QContactDetail detail(noteDetails[i]);
- QVariant var;
- var.setValue(detail);
- noteList.append(var);
- addSeparator(rowCount());
- mDataPointer->mDataList.insert(rowCount(), noteList);
+ CntContactCardDataItem* dataItem = new CntContactCardDataItem(hbTrId("txt_phob_formlabel_note"), false);
+ dataItem->setValueText(noteDetails[i].note());
+ dataItem->setContactDetail(noteDetails[i]);
+ addSeparator(itemCount());
+ mDataItemList.insert(itemCount(), dataItem);
}
//family details
QList<QContactFamily> familyDetails = mContact->details<QContactFamily>();
for (int i = 0; i < familyDetails.count(); i++)
{
- // Spouse
- QVariantList spouseList;
- //no action
- spouseList.append(QString());
- spouseList.append(hbTrId("txt_phob_formlabel_spouse"));
- spouseList.append(familyDetails[i].spouse());
- //no icon
- spouseList.append(QString());
- //detail
- QContactDetail spouseDetail(familyDetails[i]);
- QVariant varSpouse;
- varSpouse.setValue(spouseDetail);
- spouseList.append(varSpouse);
- addSeparator(rowCount());
- mDataPointer->mDataList.insert(rowCount(), spouseList);
-
- // Children
- QVariantList childrenList;
- //no action
- childrenList.append(QString());
- childrenList.append(hbTrId("txt_phob_formlabel_children"));
- childrenList.append(familyDetails[i].children().join(", "));
- //no icon
- childrenList.append(QString());
- //detail
- QContactDetail childrenDetail(familyDetails[i]);
- QVariant varChild;
- varChild.setValue(childrenDetail);
- childrenList.append(varChild);
- addSeparator(rowCount());
- mDataPointer->mDataList.insert(rowCount(), childrenList);
+ CntContactCardDataItem* dataSpouseItem = new CntContactCardDataItem(hbTrId("txt_phob_formlabel_spouse"), false);
+ dataSpouseItem->setValueText(familyDetails[i].spouse());
+ dataSpouseItem->setContactDetail(familyDetails[i]);
+ addSeparator(itemCount());
+ mDataItemList.insert(itemCount(), dataSpouseItem);
+
+ CntContactCardDataItem* dataChildrenItem = new CntContactCardDataItem(hbTrId("txt_phob_formlabel_children"), false);
+ dataChildrenItem->setValueText(familyDetails[i].children().join(", "));
+ dataChildrenItem->setContactDetail(familyDetails[i]);
+ addSeparator(itemCount());
+ mDataItemList.insert(itemCount(), dataChildrenItem);
}
}
@@ -426,9 +356,9 @@
bool CntContactCardDataContainer::supportsDetail(const QString &actionName, const QContactDetail &contactDetail)
{
QList<QContactActionDescriptor> actionDescriptors = QContactAction::actionDescriptors(actionName, "symbian");
- QContactAction* contactAction = QContactAction::action(actionDescriptors.at(0));
+ QContactAction* contactAction = QContactAction::action(actionDescriptors.first());
- bool isSupportDetail = contactAction->supportsDetail(contactDetail);
+ bool isSupportDetail = contactAction->isDetailSupported(contactDetail);
delete contactAction;
@@ -441,7 +371,7 @@
QList<QContactDetail> CntContactCardDataContainer::actionDetails(const QString &actionName, const QContact &contact)
{
QList<QContactActionDescriptor> actionDescriptors = QContactAction::actionDescriptors(actionName, "symbian");
- QContactAction* contactAction = QContactAction::action(actionDescriptors.at(0));
+ QContactAction* contactAction = QContactAction::action(actionDescriptors.first());
QList<QContactDetail> details = contactAction->supportedDetails(contact);
@@ -451,64 +381,18 @@
}
/*!
-Returns the data for the given index with a role
+Returns the data for the given index
*/
-QVariant CntContactCardDataContainer::data(int index, int role) const
+CntContactCardDataItem* CntContactCardDataContainer::dataItem(int index) const
{
if (index < 0)
- return QVariant();
-
- QVariantList values = mDataPointer->mDataList.at(index);
-
- if (index == mSeparatorIndex)
{
- if (role == Qt::DisplayRole)
- {
- return QVariant(values[action].toString());
- }
- return QVariant();
- }
-
- if (role == Qt::DisplayRole)
- {
- QStringList list;
- QString field = values[text].toString();
- if(mContact->isPreferredDetail(values[action].toString(), values[detail].value<QContactDetail>()))
- {
- field.prepend("<u>");
- field.append("</u>");
- }
- QString value = values[valueText].toString();
- list << field << value;
-
- return QVariant(list);
+ return NULL;
}
-
- else if (role == Qt::DecorationRole)
+ else
{
- if (!values[icon].toString().isEmpty())
- {
- QList<QVariant> icons;
- HbIcon itemIcon(values[icon].toString());
- icons.append(itemIcon);
- return QVariant(icons);
- }
- }
-
- else if (role == Qt::UserRole+1)
- {
- //TODO: Find out better solution!!!
- QMap<QString, QVariant> map;
-
- map.insert("action", values[action]);
- map.insert("name", values[text]);
- map.insert("data", values[valueText]);
- map.insert("icon", values[icon]);
- map.insert("detail", values[detail]);
- return map;
- }
-
- return QVariant();
+ return mDataItemList.at(index);
+ }
}
/*!
@@ -519,24 +403,16 @@
if (mSeparatorIndex == -1)
{
mSeparatorIndex = index;
- QVariantList separatorList;
- separatorList.append(hbTrId("txt_phob_subtitle_details"));
- mDataPointer->mDataList.insert(rowCount(), separatorList);
+ CntContactCardDataItem* dataItem = new CntContactCardDataItem(hbTrId("txt_phob_subtitle_details"), false);
+ mDataItemList.insert(itemCount(), dataItem);
}
}
/*!
-Returns the amount of rows in the container
+Returns the amount of items in the container
*/
-int CntContactCardDataContainer::rowCount() const
+int CntContactCardDataContainer::itemCount() const
{
- return mDataPointer->mDataList.count();
+ return mDataItemList.count();
}
-/*!
-Called when a detail is set as preferred, model needs to be refreshed
-*/
-void CntContactCardDataContainer::preferredUpdated()
-{
- //emit layoutChanged();
-}