phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp
branchRCL_3
changeset 62 5b6f26637ad3
equal deleted inserted replaced
58:d4f567ce2e7c 62:5b6f26637ad3
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *
       
    16 */
       
    17 #include "cnteditviewitembuilder.h"
       
    18 #include "cnteditviewlistmodel.h"
       
    19 #include "cnteditviewdetailitem.h"
       
    20 #include "cntviewparams.h"
       
    21 #include "cntstringmapper.h"
       
    22 #include "cntdetailorderinghelper.h"
       
    23 #include <hbnumbergrouping.h>
       
    24 #include <QDir>
       
    25 
       
    26 CntEditViewItemBuilder::CntEditViewItemBuilder() :
       
    27 mMap( new CntStringMapper() )
       
    28 {    
       
    29 }
       
    30 
       
    31 CntEditViewItemBuilder::~CntEditViewItemBuilder()
       
    32 {
       
    33     delete mMap;
       
    34 }
       
    35 
       
    36 QList<CntEditViewItem*> CntEditViewItemBuilder::phoneNumberItems(QContact& aContact)
       
    37 {
       
    38     QList<CntEditViewItem*> list;
       
    39     QList<QContactPhoneNumber> numbers = CntDetailOrderingHelper::getOrderedSupportedPhoneNumbers(aContact);
       
    40     // template for editor launcher
       
    41     if ( numbers.isEmpty() ) 
       
    42     {
       
    43         QContactPhoneNumber number;
       
    44         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( 
       
    45                 number,
       
    46                 QContactPhoneNumber::FieldNumber,
       
    47                 phoneNumberEditorView );
       
    48         detailItem->addText( hbTrId("txt_phob_list_add_phone_number") );
       
    49         detailItem->addIcon( HbIcon(mMap->getContactEditorIconString(QContactPhoneNumber::DefinitionName, "")) );
       
    50         list.append( detailItem );
       
    51     }
       
    52     // existing phonenumber(s)
       
    53     else  
       
    54     {
       
    55         foreach ( QContactPhoneNumber number, numbers )
       
    56         {
       
    57             QString context = number.contexts().isEmpty() ? "" : number.contexts().first();
       
    58             QString subtype = number.subTypes().first();
       
    59 
       
    60             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
    61                     number,
       
    62                     QContactPhoneNumber::FieldNumber,
       
    63                     phoneNumberEditorView);
       
    64 
       
    65             detailItem->addIcon( mMap->getContactEditorIconString(subtype, context) );
       
    66             detailItem->addText( mMap->getContactEditorLocString(subtype, context) );
       
    67             /*
       
    68              * Internationalization support, activate the following code 
       
    69              * when support available from Orbit
       
    70              */
       
    71             //detailItem->addText( HbNumberGrouping::formatPhoneNumber(number.number())); 
       
    72             detailItem->addText( number.number());
       
    73             list.append( detailItem );
       
    74         }
       
    75     }
       
    76     
       
    77     QList<QContactOnlineAccount> urls = CntDetailOrderingHelper::getOrderedSupportedOnlineAccounts(aContact);
       
    78     // template for editor launcher
       
    79     if ( !urls.isEmpty() ) 
       
    80     {
       
    81         foreach ( QContactOnlineAccount number, urls )
       
    82         {
       
    83             if ( !number.subTypes().isEmpty() )
       
    84             {
       
    85                 QString context = number.contexts().isEmpty() ? "" : number.contexts().first();
       
    86                 QString subtype = number.subTypes().first();
       
    87                         
       
    88                 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
    89                         number,
       
    90                         QContactOnlineAccount::FieldAccountUri,
       
    91                         phoneNumberEditorView);
       
    92                 detailItem->addIcon( mMap->getContactEditorIconString(subtype, context) );
       
    93                 
       
    94                 if ( subtype == QContactOnlineAccount::SubTypeSip )
       
    95                 {
       
    96                     detailItem->addText( hbTrId("txt_phob_formlabel_val_sip") );
       
    97                     detailItem->addText( number.accountUri() );
       
    98                     list.append( detailItem );
       
    99                 }
       
   100                 else if ( subtype == QContactOnlineAccount::SubTypeSipVoip )
       
   101                 {
       
   102                     if ( context == QContactOnlineAccount::ContextHome )
       
   103                         detailItem->addText( hbTrId("txt_phob_formlabel_internet_telephone_home") );
       
   104                     else if ( context == QContactOnlineAccount::ContextWork )
       
   105                         detailItem->addText( hbTrId("txt_phob_formlabel_internet_telephone_work") );
       
   106                     else
       
   107                         detailItem->addText( hbTrId("txt_phob_formlabel_internet_telephone") );
       
   108                     
       
   109                     detailItem->addText( number.accountUri() );
       
   110                     list.append( detailItem );
       
   111                 }
       
   112                 else
       
   113                 {
       
   114                     /* Other subtypes of QContactOnlineAccount are not supported by UI */
       
   115                     delete detailItem;
       
   116                 }
       
   117             }
       
   118         }
       
   119     }
       
   120         
       
   121     return list;
       
   122 }
       
   123 
       
   124 QList<CntEditViewItem*> CntEditViewItemBuilder::emailAddressItems(QContact& aContact)
       
   125 {
       
   126     QList<CntEditViewItem*> list;
       
   127     QList<QContactEmailAddress> emails = CntDetailOrderingHelper::getOrderedEmailAccounts(aContact);
       
   128     // template for editor launcher
       
   129     if ( emails.isEmpty() ) 
       
   130     {
       
   131         QContactEmailAddress email;
       
   132         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   133                 email,
       
   134                 QContactEmailAddress::FieldEmailAddress,
       
   135                 emailEditorView);
       
   136         detailItem->addText( hbTrId("txt_phob_list_add_email_address") );
       
   137         detailItem->addIcon( HbIcon(mMap->getContactEditorIconString(QContactEmailAddress::DefinitionName, "")) );
       
   138         list.append( detailItem );
       
   139     }
       
   140     // existing email(s)
       
   141     else
       
   142     {
       
   143         foreach ( QContactEmailAddress address, emails )
       
   144         {
       
   145             QString context = address.contexts().isEmpty() ? "" : address.contexts().first();
       
   146                 
       
   147             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   148                     address,
       
   149                     QContactEmailAddress::FieldEmailAddress,
       
   150                     emailEditorView);
       
   151             detailItem->addIcon( mMap->getContactEditorIconString(QContactEmailAddress::DefinitionName, context) );
       
   152             
       
   153             if ( context == QContactEmailAddress::ContextHome )
       
   154                 detailItem->addText(hbTrId("txt_phob_formlabel_email_home"));
       
   155             else if ( context == QContactEmailAddress::ContextWork )
       
   156                 detailItem->addText(hbTrId("txt_phob_formlabel_email_work"));
       
   157             else
       
   158                 detailItem->addText( hbTrId("txt_phob_formlabel_email") );
       
   159             
       
   160             detailItem->addText( address.emailAddress() );
       
   161             list.append( detailItem );
       
   162         }
       
   163     }
       
   164     return list;
       
   165 }
       
   166 
       
   167 QList<CntEditViewItem*> CntEditViewItemBuilder::addressItems(QContact& aContact)
       
   168 {
       
   169     QList<CntEditViewItem*> list;
       
   170     QList<QContactAddress> addresses = aContact.details<QContactAddress>();
       
   171     
       
   172     if ( addresses.isEmpty() )
       
   173     {
       
   174         QStringList fieldList;
       
   175         fieldList << QContactAddress::FieldStreet << QContactAddress::FieldPostcode;
       
   176         fieldList << QContactAddress::FieldLocality << QContactAddress::FieldRegion << QContactAddress::FieldCountry;
       
   177               
       
   178         QContactAddress addr;
       
   179         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   180                 addr,
       
   181                 fieldList,
       
   182                 addressEditorView);
       
   183         detailItem->addText( hbTrId("txt_phob_list_add_address") );
       
   184         detailItem->addIcon( HbIcon(mMap->getContactEditorIconString(QContactAddress::DefinitionName, "")) );
       
   185         list.append( detailItem );
       
   186     }
       
   187     return list;
       
   188 }
       
   189 
       
   190 QList<CntEditViewItem*> CntEditViewItemBuilder::urlItems(QContact& aContact)
       
   191 {
       
   192     QList<CntEditViewItem*> list;
       
   193     QList<QContactUrl> urls = CntDetailOrderingHelper::getOrderedUrls(aContact);
       
   194     // template for editor launcher
       
   195     if ( urls.isEmpty() ) 
       
   196     {
       
   197         QContactUrl url;
       
   198         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   199                 url,
       
   200                 QContactUrl::FieldUrl,
       
   201                 urlEditorView );
       
   202         detailItem->addText( hbTrId("txt_phob_list_add_url_address") );
       
   203         detailItem->addIcon( HbIcon(mMap->getContactEditorIconString(QContactUrl::DefinitionName, "")) );
       
   204         list.append( detailItem );
       
   205     }
       
   206     // existing url(s)
       
   207     else  
       
   208     {
       
   209         foreach ( QContactUrl url, urls )
       
   210         {
       
   211             QString context = url.contexts().isEmpty() ? "" : url.contexts().first();
       
   212             
       
   213             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( 
       
   214                     url, 
       
   215                     QContactUrl::FieldUrl,
       
   216                     urlEditorView );
       
   217             detailItem->addIcon( mMap->getContactEditorIconString(QContactUrl::DefinitionName, context) );
       
   218             
       
   219             if ( context == QContactUrl::ContextHome )
       
   220                 detailItem->addText( hbTrId("txt_phob_dblist_url_home") );
       
   221             else if ( context == QContactUrl::ContextWork )
       
   222                 detailItem->addText( hbTrId("txt_phob_dblist_url_work") );
       
   223             else
       
   224                 detailItem->addText( hbTrId("txt_phob_dblist_url") );
       
   225             
       
   226             detailItem->addText( url.url() );
       
   227             list.append( detailItem );
       
   228         }
       
   229     }
       
   230     return list;
       
   231 }
       
   232 
       
   233 QList<CntEditViewItem*> CntEditViewItemBuilder::addressDetails(QContact& aContact)
       
   234 {
       
   235     QList<CntEditViewItem*> list;
       
   236     // Address 
       
   237     foreach( QContactAddress addr, CntDetailOrderingHelper::getOrderedAddresses(aContact) )
       
   238     {
       
   239         QStringList fieldList;
       
   240         fieldList << QContactAddress::FieldStreet << QContactAddress::FieldPostcode;
       
   241         fieldList << QContactAddress::FieldLocality << QContactAddress::FieldRegion << QContactAddress::FieldCountry;
       
   242         
       
   243         QStringList valueList;
       
   244         foreach ( QString str, fieldList )
       
   245         {
       
   246             QString value = addr.value( str );
       
   247             if ( !value.isEmpty() )
       
   248             {
       
   249                 valueList << addr.value( str );
       
   250             }
       
   251         }
       
   252             
       
   253         QString address = valueList.join(", ").trimmed();
       
   254         if ( !address.isEmpty() )
       
   255         {
       
   256             QString context = addr.contexts().isEmpty() ? "" : addr.contexts().first();
       
   257             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   258                     addr,
       
   259                     fieldList,
       
   260                     addressEditorView);
       
   261             
       
   262             if ( context == QContactAddress::ContextHome )
       
   263                 detailItem->addText(hbTrId("txt_phob_formlabel_address_home"));
       
   264             else if ( context == QContactAddress::ContextWork )
       
   265                 detailItem->addText(hbTrId("txt_phob_formlabel_address_work"));
       
   266             else
       
   267                 detailItem->addText(hbTrId("txt_phob_formlabel_address"));
       
   268             
       
   269             detailItem->addText( address );
       
   270             list.append( detailItem );
       
   271         }
       
   272     }
       
   273     return list;
       
   274 }
       
   275 
       
   276 QList<CntEditViewItem*> CntEditViewItemBuilder::companyDetails(QContact& aContact)
       
   277 {
       
   278     QList<CntEditViewItem*> list;
       
   279     // Company
       
   280     QContactOrganization org = aContact.detail<QContactOrganization>();
       
   281     QStringList detailList;
       
   282     if ( !org.title().isEmpty())
       
   283         detailList << org.title();
       
   284     if ( !org.name().isEmpty())
       
   285         detailList << org.name();
       
   286     if ( !org.department().isEmpty())
       
   287         detailList << org.department().join(", ").trimmed();
       
   288 
       
   289     QString company = detailList.join(", ").trimmed(); 
       
   290     if ( !company.isEmpty() )
       
   291     {
       
   292         QStringList fields;
       
   293         fields << QContactOrganization::FieldTitle;
       
   294         fields << QContactOrganization::FieldName;
       
   295         fields << QContactOrganization::FieldDepartment;
       
   296         
       
   297         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   298                 org,
       
   299                 fields,
       
   300                 companyEditorView);
       
   301         detailItem->addText( hbTrId("txt_phob_formlabel_company_details") );
       
   302         detailItem->addText( company );
       
   303         list.append( detailItem );
       
   304     }
       
   305        
       
   306     // Assistant
       
   307     QString assistant = org.assistantName();
       
   308     if ( !assistant.isEmpty() )
       
   309     {
       
   310         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   311                 org,
       
   312                 QContactOrganization::FieldAssistantName,
       
   313                 companyEditorView);
       
   314         detailItem->addText( hbTrId("txt_phob_formlabel_assistant") );
       
   315         detailItem->addText( assistant );
       
   316         list.append( detailItem );
       
   317     }
       
   318     return list;
       
   319 }
       
   320 
       
   321 QList<CntEditViewItem*> CntEditViewItemBuilder::dateDetails(QContact& aContact)
       
   322 {
       
   323     QList<CntEditViewItem*> list;
       
   324     // Birthday
       
   325     QContactBirthday bd = aContact.detail<QContactBirthday>();
       
   326     if ( bd.date().isValid() )
       
   327     {
       
   328         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( 
       
   329                 bd,
       
   330                 QContactBirthday::FieldBirthday,
       
   331                 dateEditorView);
       
   332         detailItem->addText( hbTrId("txt_phob_formlabel_birthday") );
       
   333         detailItem->addText(QLocale::system().toString( bd.date() ));
       
   334         list.append( detailItem );
       
   335     }
       
   336         
       
   337     // Anniversary
       
   338     QContactAnniversary anniversary = aContact.detail<QContactAnniversary>();
       
   339     if ( anniversary.originalDate().isValid() )
       
   340         {
       
   341             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   342                     anniversary, 
       
   343                     QContactAnniversary::FieldOriginalDate,
       
   344                     dateEditorView);
       
   345             detailItem->addText( hbTrId("txt_phob_formlabel_anniversary") );
       
   346             detailItem->addText( QLocale::system().toString( anniversary.originalDate() ));
       
   347             list.append( detailItem );
       
   348         }
       
   349     return list;
       
   350 }
       
   351 
       
   352 QList<CntEditViewItem*> CntEditViewItemBuilder::noteDetails(QContact& aContact)
       
   353 {
       
   354     QList<CntEditViewItem*> list;
       
   355     // Note
       
   356     foreach ( QContactNote note, aContact.details<QContactNote>()) 
       
   357     {
       
   358         QString text = note.note();
       
   359         if ( !text.isEmpty() )
       
   360         {
       
   361             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   362                     note,
       
   363                     QContactNote::FieldNote,
       
   364                     noteEditorView);
       
   365             detailItem->addText( hbTrId("txt_phob_formlabel_note") );
       
   366             detailItem->addText( text );
       
   367             list.append( detailItem );
       
   368         }
       
   369     }
       
   370     return list;
       
   371 }
       
   372 
       
   373 QList<CntEditViewItem*> CntEditViewItemBuilder::familyDetails(QContact& aContact)
       
   374 {
       
   375     QList<CntEditViewItem*> list;
       
   376     // Spouse
       
   377     QContactFamily family = aContact.detail<QContactFamily>();
       
   378     QString spouse = family.spouse();
       
   379     if ( !spouse.isEmpty() )
       
   380     {
       
   381         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   382                 family,
       
   383                 QContactFamily::FieldSpouse,
       
   384                 familyDetailEditorView);
       
   385         detailItem->addText( hbTrId("txt_phob_formlabel_spouse") );
       
   386         detailItem->addText( spouse );
       
   387         list.append( detailItem );
       
   388     }
       
   389         
       
   390     // Children
       
   391     QString children = family.children().join(", ");
       
   392     if ( !children.isEmpty() )
       
   393     {
       
   394         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   395                 family,
       
   396                 QContactFamily::FieldChildren,
       
   397                 familyDetailEditorView);
       
   398         detailItem->addText( hbTrId("txt_phob_formlabel_children") );
       
   399         detailItem->addText( children );
       
   400         list.append( detailItem );
       
   401     }
       
   402     return list;
       
   403 }
       
   404 
       
   405 QList<CntEditViewItem*> CntEditViewItemBuilder::ringtoneDetails(QContact& aContact)
       
   406 {
       
   407     QList<CntEditViewItem*> list;
       
   408     // Ring Tone
       
   409     QContactRingtone ringtone = aContact.detail<QContactRingtone>();
       
   410     QUrl ringtoneUrl = ringtone.audioRingtoneUrl();
       
   411     if ( !ringtoneUrl.isEmpty() )
       
   412     {
       
   413         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   414                 ringtone,
       
   415                 QContactRingtone::FieldAudioRingtoneUrl,
       
   416                 ringToneFetcherView);
       
   417         detailItem->addText( hbTrId("txt_phob_formlabel_ringing_tone") );
       
   418         QFileInfo ringtoneFileInfo(ringtoneUrl.toString());
       
   419         QString ringtoneFileName = ringtoneFileInfo.fileName();
       
   420         detailItem->addText( ringtoneFileName);        
       
   421         list.append( detailItem );
       
   422     }
       
   423         
       
   424     return list;
       
   425 }
       
   426 
       
   427 bool CntEditViewItemBuilder::isTemplateItem( const QString& aDefinition )
       
   428 {
       
   429     QStringList templateItems;
       
   430     templateItems << QContactPhoneNumber::DefinitionName;
       
   431     templateItems << QContactEmailAddress::DefinitionName;
       
   432     templateItems << QContactAddress::DefinitionName;
       
   433     templateItems << QContactUrl::DefinitionName;
       
   434     
       
   435     return templateItems.contains( aDefinition );
       
   436 }
       
   437 
       
   438 void CntEditViewItemBuilder::removeDetail( QContact& aContact, QContactDetail& aDetail, QStringList aFields )
       
   439 {
       
   440     if ( aDetail.definitionName() == QContactOrganization::DefinitionName )
       
   441     {   
       
   442         QContactOrganization org = aContact.detail<QContactOrganization>();
       
   443         if ( aFields.contains(QContactOrganization::FieldAssistantName) )
       
   444         {
       
   445             org.setAssistantName(QString()); // empty
       
   446         }
       
   447         else
       
   448         {
       
   449             org.setTitle( QString() );
       
   450             org.setName( QString() );
       
   451             org.setDepartment( QStringList() );
       
   452         }
       
   453         aContact.saveDetail(&org);
       
   454         
       
   455         if ( org.assistantName().isEmpty() && 
       
   456              org.title().isEmpty() && 
       
   457              org.name().isEmpty() && 
       
   458              org.department().isEmpty() )
       
   459         {
       
   460             aContact.removeDetail(&org);
       
   461         }
       
   462     }
       
   463 
       
   464     else if ( aDetail.definitionName() == QContactFamily::DefinitionName )
       
   465     {
       
   466         QContactFamily family = aContact.detail<QContactFamily>();
       
   467         if ( aFields.contains(QContactFamily::FieldSpouse) )
       
   468         {
       
   469             family.setSpouse( QString() );
       
   470         }
       
   471         else
       
   472         {
       
   473             family.setChildren( QStringList() );
       
   474         }
       
   475         
       
   476         aContact.saveDetail( &family );
       
   477         
       
   478         if ( family.spouse().isEmpty() && family.children().isEmpty() )
       
   479         {
       
   480             aContact.removeDetail( &family );
       
   481         }
       
   482     }
       
   483     else
       
   484     {
       
   485         aContact.removeDetail( &aDetail );
       
   486     } 
       
   487 }
       
   488 // End of File