phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp
branchRCL_3
changeset 62 5b6f26637ad3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp	Tue Aug 31 15:05:21 2010 +0300
@@ -0,0 +1,488 @@
+/*
+* 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:  
+*
+*/
+#include "cnteditviewitembuilder.h"
+#include "cnteditviewlistmodel.h"
+#include "cnteditviewdetailitem.h"
+#include "cntviewparams.h"
+#include "cntstringmapper.h"
+#include "cntdetailorderinghelper.h"
+#include <hbnumbergrouping.h>
+#include <QDir>
+
+CntEditViewItemBuilder::CntEditViewItemBuilder() :
+mMap( new CntStringMapper() )
+{    
+}
+
+CntEditViewItemBuilder::~CntEditViewItemBuilder()
+{
+    delete mMap;
+}
+
+QList<CntEditViewItem*> CntEditViewItemBuilder::phoneNumberItems(QContact& aContact)
+{
+    QList<CntEditViewItem*> list;
+    QList<QContactPhoneNumber> numbers = CntDetailOrderingHelper::getOrderedSupportedPhoneNumbers(aContact);
+    // template for editor launcher
+    if ( numbers.isEmpty() ) 
+    {
+        QContactPhoneNumber number;
+        CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( 
+                number,
+                QContactPhoneNumber::FieldNumber,
+                phoneNumberEditorView );
+        detailItem->addText( hbTrId("txt_phob_list_add_phone_number") );
+        detailItem->addIcon( HbIcon(mMap->getContactEditorIconString(QContactPhoneNumber::DefinitionName, "")) );
+        list.append( detailItem );
+    }
+    // existing phonenumber(s)
+    else  
+    {
+        foreach ( QContactPhoneNumber number, numbers )
+        {
+            QString context = number.contexts().isEmpty() ? "" : number.contexts().first();
+            QString subtype = number.subTypes().first();
+
+            CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                    number,
+                    QContactPhoneNumber::FieldNumber,
+                    phoneNumberEditorView);
+
+            detailItem->addIcon( mMap->getContactEditorIconString(subtype, context) );
+            detailItem->addText( mMap->getContactEditorLocString(subtype, context) );
+            /*
+             * Internationalization support, activate the following code 
+             * when support available from Orbit
+             */
+            //detailItem->addText( HbNumberGrouping::formatPhoneNumber(number.number())); 
+            detailItem->addText( number.number());
+            list.append( detailItem );
+        }
+    }
+    
+    QList<QContactOnlineAccount> urls = CntDetailOrderingHelper::getOrderedSupportedOnlineAccounts(aContact);
+    // template for editor launcher
+    if ( !urls.isEmpty() ) 
+    {
+        foreach ( QContactOnlineAccount number, urls )
+        {
+            if ( !number.subTypes().isEmpty() )
+            {
+                QString context = number.contexts().isEmpty() ? "" : number.contexts().first();
+                QString subtype = number.subTypes().first();
+                        
+                CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                        number,
+                        QContactOnlineAccount::FieldAccountUri,
+                        phoneNumberEditorView);
+                detailItem->addIcon( mMap->getContactEditorIconString(subtype, context) );
+                
+                if ( subtype == QContactOnlineAccount::SubTypeSip )
+                {
+                    detailItem->addText( hbTrId("txt_phob_formlabel_val_sip") );
+                    detailItem->addText( number.accountUri() );
+                    list.append( detailItem );
+                }
+                else if ( subtype == QContactOnlineAccount::SubTypeSipVoip )
+                {
+                    if ( context == QContactOnlineAccount::ContextHome )
+                        detailItem->addText( hbTrId("txt_phob_formlabel_internet_telephone_home") );
+                    else if ( context == QContactOnlineAccount::ContextWork )
+                        detailItem->addText( hbTrId("txt_phob_formlabel_internet_telephone_work") );
+                    else
+                        detailItem->addText( hbTrId("txt_phob_formlabel_internet_telephone") );
+                    
+                    detailItem->addText( number.accountUri() );
+                    list.append( detailItem );
+                }
+                else
+                {
+                    /* Other subtypes of QContactOnlineAccount are not supported by UI */
+                    delete detailItem;
+                }
+            }
+        }
+    }
+        
+    return list;
+}
+
+QList<CntEditViewItem*> CntEditViewItemBuilder::emailAddressItems(QContact& aContact)
+{
+    QList<CntEditViewItem*> list;
+    QList<QContactEmailAddress> emails = CntDetailOrderingHelper::getOrderedEmailAccounts(aContact);
+    // template for editor launcher
+    if ( emails.isEmpty() ) 
+    {
+        QContactEmailAddress email;
+        CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                email,
+                QContactEmailAddress::FieldEmailAddress,
+                emailEditorView);
+        detailItem->addText( hbTrId("txt_phob_list_add_email_address") );
+        detailItem->addIcon( HbIcon(mMap->getContactEditorIconString(QContactEmailAddress::DefinitionName, "")) );
+        list.append( detailItem );
+    }
+    // existing email(s)
+    else
+    {
+        foreach ( QContactEmailAddress address, emails )
+        {
+            QString context = address.contexts().isEmpty() ? "" : address.contexts().first();
+                
+            CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                    address,
+                    QContactEmailAddress::FieldEmailAddress,
+                    emailEditorView);
+            detailItem->addIcon( mMap->getContactEditorIconString(QContactEmailAddress::DefinitionName, context) );
+            
+            if ( context == QContactEmailAddress::ContextHome )
+                detailItem->addText(hbTrId("txt_phob_formlabel_email_home"));
+            else if ( context == QContactEmailAddress::ContextWork )
+                detailItem->addText(hbTrId("txt_phob_formlabel_email_work"));
+            else
+                detailItem->addText( hbTrId("txt_phob_formlabel_email") );
+            
+            detailItem->addText( address.emailAddress() );
+            list.append( detailItem );
+        }
+    }
+    return list;
+}
+
+QList<CntEditViewItem*> CntEditViewItemBuilder::addressItems(QContact& aContact)
+{
+    QList<CntEditViewItem*> list;
+    QList<QContactAddress> addresses = aContact.details<QContactAddress>();
+    
+    if ( addresses.isEmpty() )
+    {
+        QStringList fieldList;
+        fieldList << QContactAddress::FieldStreet << QContactAddress::FieldPostcode;
+        fieldList << QContactAddress::FieldLocality << QContactAddress::FieldRegion << QContactAddress::FieldCountry;
+              
+        QContactAddress addr;
+        CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                addr,
+                fieldList,
+                addressEditorView);
+        detailItem->addText( hbTrId("txt_phob_list_add_address") );
+        detailItem->addIcon( HbIcon(mMap->getContactEditorIconString(QContactAddress::DefinitionName, "")) );
+        list.append( detailItem );
+    }
+    return list;
+}
+
+QList<CntEditViewItem*> CntEditViewItemBuilder::urlItems(QContact& aContact)
+{
+    QList<CntEditViewItem*> list;
+    QList<QContactUrl> urls = CntDetailOrderingHelper::getOrderedUrls(aContact);
+    // template for editor launcher
+    if ( urls.isEmpty() ) 
+    {
+        QContactUrl url;
+        CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                url,
+                QContactUrl::FieldUrl,
+                urlEditorView );
+        detailItem->addText( hbTrId("txt_phob_list_add_url_address") );
+        detailItem->addIcon( HbIcon(mMap->getContactEditorIconString(QContactUrl::DefinitionName, "")) );
+        list.append( detailItem );
+    }
+    // existing url(s)
+    else  
+    {
+        foreach ( QContactUrl url, urls )
+        {
+            QString context = url.contexts().isEmpty() ? "" : url.contexts().first();
+            
+            CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( 
+                    url, 
+                    QContactUrl::FieldUrl,
+                    urlEditorView );
+            detailItem->addIcon( mMap->getContactEditorIconString(QContactUrl::DefinitionName, context) );
+            
+            if ( context == QContactUrl::ContextHome )
+                detailItem->addText( hbTrId("txt_phob_dblist_url_home") );
+            else if ( context == QContactUrl::ContextWork )
+                detailItem->addText( hbTrId("txt_phob_dblist_url_work") );
+            else
+                detailItem->addText( hbTrId("txt_phob_dblist_url") );
+            
+            detailItem->addText( url.url() );
+            list.append( detailItem );
+        }
+    }
+    return list;
+}
+
+QList<CntEditViewItem*> CntEditViewItemBuilder::addressDetails(QContact& aContact)
+{
+    QList<CntEditViewItem*> list;
+    // Address 
+    foreach( QContactAddress addr, CntDetailOrderingHelper::getOrderedAddresses(aContact) )
+    {
+        QStringList fieldList;
+        fieldList << QContactAddress::FieldStreet << QContactAddress::FieldPostcode;
+        fieldList << QContactAddress::FieldLocality << QContactAddress::FieldRegion << QContactAddress::FieldCountry;
+        
+        QStringList valueList;
+        foreach ( QString str, fieldList )
+        {
+            QString value = addr.value( str );
+            if ( !value.isEmpty() )
+            {
+                valueList << addr.value( str );
+            }
+        }
+            
+        QString address = valueList.join(", ").trimmed();
+        if ( !address.isEmpty() )
+        {
+            QString context = addr.contexts().isEmpty() ? "" : addr.contexts().first();
+            CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                    addr,
+                    fieldList,
+                    addressEditorView);
+            
+            if ( context == QContactAddress::ContextHome )
+                detailItem->addText(hbTrId("txt_phob_formlabel_address_home"));
+            else if ( context == QContactAddress::ContextWork )
+                detailItem->addText(hbTrId("txt_phob_formlabel_address_work"));
+            else
+                detailItem->addText(hbTrId("txt_phob_formlabel_address"));
+            
+            detailItem->addText( address );
+            list.append( detailItem );
+        }
+    }
+    return list;
+}
+
+QList<CntEditViewItem*> CntEditViewItemBuilder::companyDetails(QContact& aContact)
+{
+    QList<CntEditViewItem*> list;
+    // Company
+    QContactOrganization org = aContact.detail<QContactOrganization>();
+    QStringList detailList;
+    if ( !org.title().isEmpty())
+        detailList << org.title();
+    if ( !org.name().isEmpty())
+        detailList << org.name();
+    if ( !org.department().isEmpty())
+        detailList << org.department().join(", ").trimmed();
+
+    QString company = detailList.join(", ").trimmed(); 
+    if ( !company.isEmpty() )
+    {
+        QStringList fields;
+        fields << QContactOrganization::FieldTitle;
+        fields << QContactOrganization::FieldName;
+        fields << QContactOrganization::FieldDepartment;
+        
+        CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                org,
+                fields,
+                companyEditorView);
+        detailItem->addText( hbTrId("txt_phob_formlabel_company_details") );
+        detailItem->addText( company );
+        list.append( detailItem );
+    }
+       
+    // Assistant
+    QString assistant = org.assistantName();
+    if ( !assistant.isEmpty() )
+    {
+        CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                org,
+                QContactOrganization::FieldAssistantName,
+                companyEditorView);
+        detailItem->addText( hbTrId("txt_phob_formlabel_assistant") );
+        detailItem->addText( assistant );
+        list.append( detailItem );
+    }
+    return list;
+}
+
+QList<CntEditViewItem*> CntEditViewItemBuilder::dateDetails(QContact& aContact)
+{
+    QList<CntEditViewItem*> list;
+    // Birthday
+    QContactBirthday bd = aContact.detail<QContactBirthday>();
+    if ( bd.date().isValid() )
+    {
+        CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( 
+                bd,
+                QContactBirthday::FieldBirthday,
+                dateEditorView);
+        detailItem->addText( hbTrId("txt_phob_formlabel_birthday") );
+        detailItem->addText(QLocale::system().toString( bd.date() ));
+        list.append( detailItem );
+    }
+        
+    // Anniversary
+    QContactAnniversary anniversary = aContact.detail<QContactAnniversary>();
+    if ( anniversary.originalDate().isValid() )
+        {
+            CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                    anniversary, 
+                    QContactAnniversary::FieldOriginalDate,
+                    dateEditorView);
+            detailItem->addText( hbTrId("txt_phob_formlabel_anniversary") );
+            detailItem->addText( QLocale::system().toString( anniversary.originalDate() ));
+            list.append( detailItem );
+        }
+    return list;
+}
+
+QList<CntEditViewItem*> CntEditViewItemBuilder::noteDetails(QContact& aContact)
+{
+    QList<CntEditViewItem*> list;
+    // Note
+    foreach ( QContactNote note, aContact.details<QContactNote>()) 
+    {
+        QString text = note.note();
+        if ( !text.isEmpty() )
+        {
+            CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                    note,
+                    QContactNote::FieldNote,
+                    noteEditorView);
+            detailItem->addText( hbTrId("txt_phob_formlabel_note") );
+            detailItem->addText( text );
+            list.append( detailItem );
+        }
+    }
+    return list;
+}
+
+QList<CntEditViewItem*> CntEditViewItemBuilder::familyDetails(QContact& aContact)
+{
+    QList<CntEditViewItem*> list;
+    // Spouse
+    QContactFamily family = aContact.detail<QContactFamily>();
+    QString spouse = family.spouse();
+    if ( !spouse.isEmpty() )
+    {
+        CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                family,
+                QContactFamily::FieldSpouse,
+                familyDetailEditorView);
+        detailItem->addText( hbTrId("txt_phob_formlabel_spouse") );
+        detailItem->addText( spouse );
+        list.append( detailItem );
+    }
+        
+    // Children
+    QString children = family.children().join(", ");
+    if ( !children.isEmpty() )
+    {
+        CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                family,
+                QContactFamily::FieldChildren,
+                familyDetailEditorView);
+        detailItem->addText( hbTrId("txt_phob_formlabel_children") );
+        detailItem->addText( children );
+        list.append( detailItem );
+    }
+    return list;
+}
+
+QList<CntEditViewItem*> CntEditViewItemBuilder::ringtoneDetails(QContact& aContact)
+{
+    QList<CntEditViewItem*> list;
+    // Ring Tone
+    QContactRingtone ringtone = aContact.detail<QContactRingtone>();
+    QUrl ringtoneUrl = ringtone.audioRingtoneUrl();
+    if ( !ringtoneUrl.isEmpty() )
+    {
+        CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
+                ringtone,
+                QContactRingtone::FieldAudioRingtoneUrl,
+                ringToneFetcherView);
+        detailItem->addText( hbTrId("txt_phob_formlabel_ringing_tone") );
+        QFileInfo ringtoneFileInfo(ringtoneUrl.toString());
+        QString ringtoneFileName = ringtoneFileInfo.fileName();
+        detailItem->addText( ringtoneFileName);        
+        list.append( detailItem );
+    }
+        
+    return list;
+}
+
+bool CntEditViewItemBuilder::isTemplateItem( const QString& aDefinition )
+{
+    QStringList templateItems;
+    templateItems << QContactPhoneNumber::DefinitionName;
+    templateItems << QContactEmailAddress::DefinitionName;
+    templateItems << QContactAddress::DefinitionName;
+    templateItems << QContactUrl::DefinitionName;
+    
+    return templateItems.contains( aDefinition );
+}
+
+void CntEditViewItemBuilder::removeDetail( QContact& aContact, QContactDetail& aDetail, QStringList aFields )
+{
+    if ( aDetail.definitionName() == QContactOrganization::DefinitionName )
+    {   
+        QContactOrganization org = aContact.detail<QContactOrganization>();
+        if ( aFields.contains(QContactOrganization::FieldAssistantName) )
+        {
+            org.setAssistantName(QString()); // empty
+        }
+        else
+        {
+            org.setTitle( QString() );
+            org.setName( QString() );
+            org.setDepartment( QStringList() );
+        }
+        aContact.saveDetail(&org);
+        
+        if ( org.assistantName().isEmpty() && 
+             org.title().isEmpty() && 
+             org.name().isEmpty() && 
+             org.department().isEmpty() )
+        {
+            aContact.removeDetail(&org);
+        }
+    }
+
+    else if ( aDetail.definitionName() == QContactFamily::DefinitionName )
+    {
+        QContactFamily family = aContact.detail<QContactFamily>();
+        if ( aFields.contains(QContactFamily::FieldSpouse) )
+        {
+            family.setSpouse( QString() );
+        }
+        else
+        {
+            family.setChildren( QStringList() );
+        }
+        
+        aContact.saveDetail( &family );
+        
+        if ( family.spouse().isEmpty() && family.children().isEmpty() )
+        {
+            aContact.removeDetail( &family );
+        }
+    }
+    else
+    {
+        aContact.removeDetail( &aDetail );
+    } 
+}
+// End of File