phonebookui/pbkcommonui/src/cnteditviewitembuilder.cpp
changeset 27 de1630741fbe
child 31 2a11b5b00470
equal deleted inserted replaced
25:76a2435edfd4 27:de1630741fbe
       
     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 
       
    23 CntEditViewItemBuilder::CntEditViewItemBuilder() :
       
    24 mMap( new CntStringMapper() )
       
    25 {    
       
    26 }
       
    27 
       
    28 CntEditViewItemBuilder::~CntEditViewItemBuilder()
       
    29 {
       
    30     delete mMap;
       
    31 }
       
    32 
       
    33 QList<CntEditViewItem*> CntEditViewItemBuilder::phoneNumberItems(QContact& aContact)
       
    34 {
       
    35     QList<CntEditViewItem*> list;
       
    36     QList<QContactPhoneNumber> numbers = aContact.details<QContactPhoneNumber>();
       
    37     // template for editor launcher
       
    38     if ( numbers.isEmpty() ) 
       
    39     {
       
    40         QContactPhoneNumber number;
       
    41         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( 
       
    42                 number,
       
    43                 QContactPhoneNumber::FieldNumber,
       
    44                 phoneNumberEditorView );
       
    45         detailItem->addText( hbTrId("txt_phob_list_add_phone_number") );
       
    46         detailItem->addIcon( HbIcon(mMap->getMappedIcon(QContactPhoneNumber::DefinitionName)) );
       
    47         list.append( detailItem );
       
    48     }
       
    49     // existing phonenumber(s)
       
    50     else  
       
    51     {
       
    52         foreach ( QContactPhoneNumber number, numbers )
       
    53         {
       
    54             if ( !number.subTypes().isEmpty() )
       
    55             {
       
    56             QString context = number.contexts().isEmpty() ? "" : number.contexts().first();
       
    57             QString subtype = number.subTypes().first();
       
    58             
       
    59             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
    60                     number,
       
    61                     QContactPhoneNumber::FieldNumber,
       
    62                     phoneNumberEditorView);
       
    63             
       
    64             detailItem->addIcon( mMap->getMappedIcon(subtype) );
       
    65             detailItem->addText( mMap->getLocString(subtype, context) );
       
    66             detailItem->addText( number.number() );
       
    67             list.append( detailItem );
       
    68             }
       
    69         }
       
    70     }
       
    71     
       
    72     QList<QContactOnlineAccount> urls = aContact.details<QContactOnlineAccount>();
       
    73     // template for editor launcher
       
    74     if ( !urls.isEmpty() ) 
       
    75     {
       
    76         foreach ( QContactOnlineAccount number, urls )
       
    77         {
       
    78             if ( !number.subTypes().isEmpty() )
       
    79             {
       
    80                 QString context = number.contexts().isEmpty() ? "" : number.contexts().first();
       
    81                 QString subtype = number.subTypes().first();
       
    82                         
       
    83                 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
    84                         number,
       
    85                         QContactOnlineAccount::FieldAccountUri,
       
    86                         phoneNumberEditorView);
       
    87                 detailItem->addIcon( mMap->getMappedIcon(subtype) );
       
    88                 
       
    89                 if ( subtype == QContactOnlineAccount::SubTypeSip )
       
    90                 {
       
    91                     detailItem->addText( hbTrId("txt_phob_formlabel_val_sip") );
       
    92                 }
       
    93                 else
       
    94                 {
       
    95                     if ( context == QContactOnlineAccount::ContextHome )
       
    96                         detailItem->addText( hbTrId("txt_phob_dblist_internet_telephone_home") );
       
    97                     else if ( context == QContactOnlineAccount::ContextWork )
       
    98                         detailItem->addText( hbTrId("txt_phob_dblist_internet_telephone_work") );
       
    99                     else
       
   100                         detailItem->addText( hbTrId("txt_phob_dblist_internet_telephone") );
       
   101                 }
       
   102                 detailItem->addText( number.accountUri() );
       
   103                 list.append( detailItem );
       
   104             }
       
   105         }
       
   106     }
       
   107         
       
   108     return list;
       
   109 }
       
   110 
       
   111 QList<CntEditViewItem*> CntEditViewItemBuilder::emailAddressItems(QContact& aContact)
       
   112 {
       
   113     QList<CntEditViewItem*> list;
       
   114     QList<QContactEmailAddress> emails = aContact.details<QContactEmailAddress>();
       
   115     // template for editor launcher
       
   116     if ( emails.isEmpty() ) 
       
   117     {
       
   118         QContactEmailAddress email;
       
   119         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   120                 email,
       
   121                 QContactEmailAddress::FieldEmailAddress,
       
   122                 emailEditorView);
       
   123         detailItem->addText( hbTrId("txt_phob_list_add_email_address") );
       
   124         detailItem->addIcon( HbIcon(mMap->getMappedIcon(QContactEmailAddress::DefinitionName)) );
       
   125         list.append( detailItem );
       
   126     }
       
   127     // existing email(s)
       
   128     else
       
   129     {
       
   130         foreach ( QContactEmailAddress address, emails )
       
   131         {
       
   132             QString context = address.contexts().isEmpty() ? "" : address.contexts().first();
       
   133                 
       
   134             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   135                     address,
       
   136                     QContactEmailAddress::FieldEmailAddress,
       
   137                     emailEditorView);
       
   138             detailItem->addIcon( mMap->getMappedIcon(QContactEmailAddress::DefinitionName) );
       
   139             
       
   140             if ( context == QContactEmailAddress::ContextHome )
       
   141                 detailItem->addText(hbTrId("txt_phob_formlabel_email_home"));
       
   142             else if ( context == QContactEmailAddress::ContextWork )
       
   143                 detailItem->addText(hbTrId("txt_phob_formlabel_email_work"));
       
   144             else
       
   145                 detailItem->addText( hbTrId("txt_phob_list_email") );
       
   146             
       
   147             detailItem->addText( address.emailAddress() );
       
   148             list.append( detailItem );
       
   149         }
       
   150     }
       
   151     return list;
       
   152 }
       
   153 
       
   154 QList<CntEditViewItem*> CntEditViewItemBuilder::addressItems(QContact& aContact)
       
   155 {
       
   156     QList<CntEditViewItem*> list;
       
   157     QList<QContactAddress> addresses = aContact.details<QContactAddress>();
       
   158     
       
   159     if ( addresses.isEmpty() )
       
   160     {
       
   161         QStringList fieldList;
       
   162         fieldList << QContactAddress::FieldStreet << QContactAddress::FieldPostcode << QContactAddress::FieldPostOfficeBox;
       
   163         fieldList << QContactAddress::FieldLocality << QContactAddress::FieldRegion << QContactAddress::FieldCountry;
       
   164               
       
   165         QContactAddress addr;
       
   166         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   167                 addr,
       
   168                 fieldList,
       
   169                 addressEditorView);
       
   170         detailItem->addText( hbTrId("txt_phob_list_add_address") );
       
   171         detailItem->addIcon( HbIcon(mMap->getMappedIcon(QContactAddress::DefinitionName)) );
       
   172         list.append( detailItem );
       
   173     }
       
   174     return list;
       
   175 }
       
   176 
       
   177 QList<CntEditViewItem*> CntEditViewItemBuilder::urlItems(QContact& aContact)
       
   178 {
       
   179     QList<CntEditViewItem*> list;
       
   180     QList<QContactUrl> urls = aContact.details<QContactUrl>();
       
   181     // template for editor launcher
       
   182     if ( urls.isEmpty() ) 
       
   183     {
       
   184         QContactUrl url;
       
   185         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   186                 url,
       
   187                 QContactUrl::FieldUrl,
       
   188                 urlEditorView );
       
   189         detailItem->addText( hbTrId("txt_phob_list_add_url_address") );
       
   190         detailItem->addIcon( HbIcon(mMap->getMappedIcon(QContactUrl::DefinitionName)) );
       
   191         list.append( detailItem );
       
   192     }
       
   193     // existing url(s)
       
   194     else  
       
   195     {
       
   196         foreach ( QContactUrl url, urls )
       
   197         {
       
   198             QString context = url.contexts().isEmpty() ? "" : url.contexts().first();
       
   199             
       
   200             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( 
       
   201                     url, 
       
   202                     QContactUrl::FieldUrl,
       
   203                     urlEditorView );
       
   204             detailItem->addIcon( mMap->getMappedIcon(QContactUrl::DefinitionName) );
       
   205             
       
   206             if ( context == QContactUrl::ContextHome )
       
   207                 detailItem->addText( hbTrId("txt_phob_dblist_url_home") );
       
   208             else if ( context == QContactUrl::ContextWork )
       
   209                 detailItem->addText( hbTrId("txt_phob_dblist_url_work") );
       
   210             else
       
   211                 detailItem->addText( hbTrId("txt_phob_list_url") );
       
   212             
       
   213             detailItem->addText( url.url() );
       
   214             list.append( detailItem );
       
   215         }
       
   216     }
       
   217     return list;
       
   218 }
       
   219 
       
   220 QList<CntEditViewItem*> CntEditViewItemBuilder::addressDetails(QContact& aContact)
       
   221 {
       
   222     QList<CntEditViewItem*> list;
       
   223     // Address 
       
   224     foreach( QContactAddress addr, aContact.details<QContactAddress>() )
       
   225     {
       
   226         QStringList fieldList;
       
   227         fieldList << QContactAddress::FieldStreet << QContactAddress::FieldPostcode << QContactAddress::FieldPostOfficeBox;
       
   228         fieldList << QContactAddress::FieldLocality << QContactAddress::FieldRegion << QContactAddress::FieldCountry;
       
   229         
       
   230         QStringList valueList;
       
   231         foreach ( QString str, fieldList )
       
   232         {
       
   233             valueList << addr.value( str );
       
   234         }
       
   235             
       
   236         QString address = valueList.join(" ").trimmed();
       
   237         if ( !address.isEmpty() )
       
   238         {
       
   239             QString context = addr.contexts().isEmpty() ? "" : mMap->getMappedDetail(addr.contexts().first() );
       
   240             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   241                     addr,
       
   242                     fieldList,
       
   243                     addressEditorView);
       
   244             
       
   245             if ( context == QContactAddress::ContextHome )
       
   246                 detailItem->addText(hbTrId("txt_phob_dblist_url_home"));
       
   247             else if ( context == QContactAddress::ContextWork )
       
   248                 detailItem->addText(hbTrId("txt_phob_dblist_url_work"));
       
   249             else
       
   250                 detailItem->addText(hbTrId("txt_phob_list_address"));
       
   251             
       
   252             detailItem->addText( address );
       
   253             list.append( detailItem );
       
   254         }
       
   255     }
       
   256     return list;
       
   257 }
       
   258 
       
   259 QList<CntEditViewItem*> CntEditViewItemBuilder::companyDetails(QContact& aContact)
       
   260 {
       
   261     QList<CntEditViewItem*> list;
       
   262     // Company
       
   263     QContactOrganization org = aContact.detail<QContactOrganization>();
       
   264     QStringList detailList;
       
   265     detailList << org.title();
       
   266     detailList << org.name();
       
   267     detailList << org.department().join(" ").trimmed();
       
   268 
       
   269     QString company = detailList.join(" ").trimmed(); 
       
   270     if ( !company.isEmpty() )
       
   271     {
       
   272         QStringList fields;
       
   273         fields << QContactOrganization::FieldTitle;
       
   274         fields << QContactOrganization::FieldName;
       
   275         fields << QContactOrganization::FieldDepartment;
       
   276         
       
   277         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   278                 org,
       
   279                 fields,
       
   280                 companyEditorView);
       
   281         detailItem->addText( hbTrId("txt_phob_list_company_details") );
       
   282         detailItem->addText( company );
       
   283         list.append( detailItem );
       
   284     }
       
   285        
       
   286     // Assistant
       
   287     QString assistant = org.assistantName();
       
   288     if ( !assistant.isEmpty() )
       
   289     {
       
   290         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   291                 org,
       
   292                 QContactOrganization::FieldAssistantName,
       
   293                 companyEditorView);
       
   294         detailItem->addText( hbTrId("txt_phob_formlabel_assistant") );
       
   295         detailItem->addText( assistant );
       
   296         list.append( detailItem );
       
   297     }
       
   298     return list;
       
   299 }
       
   300 
       
   301 QList<CntEditViewItem*> CntEditViewItemBuilder::dateDetails(QContact& aContact)
       
   302 {
       
   303     QList<CntEditViewItem*> list;
       
   304     // Birthday
       
   305     QContactBirthday bd = aContact.detail<QContactBirthday>();
       
   306     if ( bd.date().isValid() )
       
   307     {
       
   308         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( 
       
   309                 bd,
       
   310                 QContactBirthday::FieldBirthday,
       
   311                 dateEditorView);
       
   312         detailItem->addText( hbTrId("txt_phob_formlabel_birthday") );
       
   313         detailItem->addText(QLocale::system().toString( bd.date() ));
       
   314         list.append( detailItem );
       
   315     }
       
   316         
       
   317     // Anniversary
       
   318     QContactAnniversary anniversary = aContact.detail<QContactAnniversary>();
       
   319     if ( anniversary.originalDate().isValid() )
       
   320         {
       
   321             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   322                     anniversary, 
       
   323                     QContactAnniversary::FieldOriginalDate,
       
   324                     dateEditorView);
       
   325             detailItem->addText( hbTrId("txt_phob_formlabel_anniversary") );
       
   326             detailItem->addText( QLocale::system().toString( anniversary.originalDate() ));
       
   327             list.append( detailItem );
       
   328         }
       
   329     return list;
       
   330 }
       
   331 
       
   332 QList<CntEditViewItem*> CntEditViewItemBuilder::noteDetails(QContact& aContact)
       
   333 {
       
   334     QList<CntEditViewItem*> list;
       
   335     // Note
       
   336     foreach ( QContactNote note, aContact.details<QContactNote>()) 
       
   337     {
       
   338         QString text = note.note();
       
   339         if ( !text.isEmpty() )
       
   340         {
       
   341             CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   342                     note,
       
   343                     QContactNote::FieldNote,
       
   344                     noteEditorView);
       
   345             detailItem->addText( hbTrId("txt_phob_list_note") );
       
   346             detailItem->addText( text );
       
   347             list.append( detailItem );
       
   348         }
       
   349     }
       
   350     return list;
       
   351 }
       
   352 
       
   353 QList<CntEditViewItem*> CntEditViewItemBuilder::familyDetails(QContact& aContact)
       
   354 {
       
   355     QList<CntEditViewItem*> list;
       
   356     // Spouse
       
   357     QContactFamily family = aContact.detail<QContactFamily>();
       
   358     QString spouse = family.spouse();
       
   359     if ( !spouse.isEmpty() )
       
   360     {
       
   361         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   362                 family,
       
   363                 QContactFamily::FieldSpouse,
       
   364                 familyDetailEditorView);
       
   365         detailItem->addText( hbTrId("txt_phob_formlabel_spouse") );
       
   366         detailItem->addText( spouse );
       
   367         list.append( detailItem );
       
   368     }
       
   369         
       
   370     // Children
       
   371     QString children = family.children().join(", ");
       
   372     if ( !children.isEmpty() )
       
   373     {
       
   374         CntEditViewDetailItem* detailItem = new CntEditViewDetailItem(
       
   375                 family,
       
   376                 QContactFamily::FieldChildren,
       
   377                 familyDetailEditorView);
       
   378         detailItem->addText( hbTrId("txt_phob_formlabel_children") );
       
   379         detailItem->addText( children );
       
   380         list.append( detailItem );
       
   381     }
       
   382     return list;
       
   383 }
       
   384 
       
   385 bool CntEditViewItemBuilder::isTemplateItem( const QString& aDefinition )
       
   386 {
       
   387     QStringList templateItems;
       
   388     templateItems << QContactPhoneNumber::DefinitionName;
       
   389     templateItems << QContactEmailAddress::DefinitionName;
       
   390     templateItems << QContactAddress::DefinitionName;
       
   391     templateItems << QContactUrl::DefinitionName;
       
   392     
       
   393     return templateItems.contains( aDefinition );
       
   394 }
       
   395 
       
   396 void CntEditViewItemBuilder::removeDetail( QContact& aContact, QContactDetail& aDetail, QStringList aFields )
       
   397 {
       
   398     if ( aDetail.definitionName() == QContactOrganization::DefinitionName )
       
   399     {   
       
   400         QContactOrganization org = aContact.detail<QContactOrganization>();
       
   401         if ( aFields.contains(QContactOrganization::FieldAssistantName) )
       
   402         {
       
   403             org.setAssistantName(QString()); // empty
       
   404         }
       
   405         else
       
   406         {
       
   407             org.setTitle( QString() );
       
   408             org.setName( QString() );
       
   409             org.setDepartment( QStringList() );
       
   410         }
       
   411         
       
   412         if ( org.assistantName().isEmpty() && 
       
   413              org.title().isEmpty() && 
       
   414              org.name().isEmpty() && 
       
   415              org.department().isEmpty() )
       
   416             aContact.removeDetail(&org);
       
   417         else
       
   418             aContact.saveDetail(&org);
       
   419     }
       
   420 
       
   421     else if ( aDetail.definitionName() == QContactFamily::DefinitionName )
       
   422     {
       
   423         QContactFamily family = aContact.detail<QContactFamily>();
       
   424         if ( aFields.contains(QContactFamily::FieldSpouse) )
       
   425         {
       
   426             family.setSpouse( QString() );
       
   427         }
       
   428         else
       
   429         {
       
   430             family.setChildren( QStringList() );
       
   431         }
       
   432         
       
   433         if ( family.spouse().isEmpty() && family.children().isEmpty() )
       
   434             aContact.removeDetail( &family );
       
   435         else
       
   436             aContact.saveDetail( &family );
       
   437     }
       
   438     else
       
   439     {
       
   440         aContact.removeDetail( &aDetail );
       
   441     } 
       
   442 }
       
   443 // End of File