phonebookui/pbkcommonui/src/cntphonenumberviewitem.cpp
changeset 25 76a2435edfd4
child 27 de1630741fbe
equal deleted inserted replaced
24:0ba2181d7c28 25:76a2435edfd4
       
     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 "cntdetailconst.h"
       
    18 #include "cntphonenumberviewitem.h"
       
    19 #include "cntdetailmodelitem.h"
       
    20 #include "cntdetaileditormodel.h"
       
    21 
       
    22 #include <qdebug.h>
       
    23 #include <qgraphicslinearlayout.h>
       
    24 #include <qcontactphonenumber.h>
       
    25 #include <qcontactonlineaccount.h>
       
    26 #include <qcontactdetail.h>
       
    27 #include <qstandarditemmodel.h>
       
    28 
       
    29 #include <hbwidget.h>
       
    30 #include <hbmainwindow.h>
       
    31 #include <hbabstractviewitem.h>
       
    32 #include <hbabstractitemview.h>
       
    33 #include <hbdataformmodelitem.h>
       
    34 #include <hbdataformmodel.h>
       
    35 #include <hbcombobox.h>
       
    36 #include <hblineedit.h>
       
    37 #include <hbinputstandardfilters.h>
       
    38 
       
    39 CntPhoneNumberViewItem::CntPhoneNumberViewItem( QGraphicsItem* aParent ) : 
       
    40 CntDetailViewItem( aParent ),
       
    41 mBox(0),
       
    42 mEdit(0),
       
    43 mFilter( 0 )
       
    44     {
       
    45     }
       
    46 
       
    47 CntPhoneNumberViewItem::~CntPhoneNumberViewItem()
       
    48     {
       
    49     delete mFilter;
       
    50     }
       
    51 
       
    52 HbAbstractViewItem* CntPhoneNumberViewItem::createItem()
       
    53     {
       
    54     return new CntPhoneNumberViewItem( *this );
       
    55     }
       
    56 
       
    57 void CntPhoneNumberViewItem::indexChanged( int aIndex )
       
    58     {
       
    59     QString subType = mBox->itemData( aIndex, DetailSubType ).toString();
       
    60     QString context = mBox->itemData( aIndex, DetailContext ).toString();
       
    61     
       
    62     // check that if current QContactDetail contains the changed subtype
       
    63     HbDataFormModel* model = static_cast<HbDataFormModel*>(itemView()->model());
       
    64     CntDetailModelItem* item = static_cast<CntDetailModelItem*>( model->itemFromIndex(modelIndex()) );
       
    65     
       
    66     QStringList contextList;
       
    67     if ( !context.isEmpty() )
       
    68         contextList << context;
       
    69     
       
    70     // check if we switched to QContactOnlineAccount subtype
       
    71     if ( subType == QContactOnlineAccount::SubTypeSip || 
       
    72          subType == QContactOnlineAccount::SubTypeSipVoip ||
       
    73          subType == QContactOnlineAccount::SubTypeVideoShare )
       
    74         {
       
    75         qDebug() << "QContactOnlineAccount(" << subType << ")";
       
    76         constructOnlineAccount( item, subType, contextList );
       
    77         }
       
    78     else
       
    79         {
       
    80         qDebug() << "QContactPhoneNumber(" << subType << ")";
       
    81         constructPhoneNumber( item, subType, contextList );
       
    82         }
       
    83     }
       
    84 
       
    85 void CntPhoneNumberViewItem::textChanged( QString aText )
       
    86     {
       
    87     qDebug() << "textChanged( " << aText << " )";
       
    88     HbDataFormModel* model = static_cast<HbDataFormModel*>(itemView()->model());
       
    89     CntDetailModelItem* item = static_cast<CntDetailModelItem*>( model->itemFromIndex(modelIndex()) );
       
    90     QContactDetail detail = item->detail();
       
    91     if ( detail.definitionName() == QContactPhoneNumber::DefinitionName )
       
    92         {
       
    93         QContactPhoneNumber number = detail;
       
    94         number.setNumber( aText );
       
    95         item->setDetail( number );
       
    96         }
       
    97     
       
    98     if ( detail.definitionName() == QContactOnlineAccount::DefinitionName )
       
    99         {
       
   100         QContactOnlineAccount account = detail;
       
   101         account.setAccountUri( aText );
       
   102         item->setDetail( account );
       
   103         }
       
   104     }
       
   105 
       
   106 HbWidget* CntPhoneNumberViewItem::createCustomWidget()
       
   107     {
       
   108     QGraphicsLinearLayout* layout = new QGraphicsLinearLayout( itemView()->mainWindow()->orientation() );
       
   109     HbWidget* widget = new HbWidget();
       
   110     mBox = new HbComboBox();
       
   111     mEdit = new HbLineEdit();
       
   112     mFilter = new HbEditorInterface( mEdit );
       
   113         
       
   114     widget->setLayout( layout );
       
   115     layout->addItem( mBox );
       
   116     layout->addItem( mEdit );
       
   117     
       
   118     connect( mBox, SIGNAL(currentIndexChanged(int)), this, SLOT(indexChanged(int)) );
       
   119     connect( mEdit, SIGNAL(textChanged(QString)),this, SLOT(textChanged(QString)) );
       
   120     
       
   121     HbDataFormModel* model = static_cast<HbDataFormModel*>(itemView()->model());
       
   122     CntDetailModelItem* item = static_cast<CntDetailModelItem*>( model->itemFromIndex(modelIndex()) );
       
   123     
       
   124     // select correct index
       
   125     QContactDetail detail = item->detail();
       
   126     QStringList context;
       
   127     QString subType;
       
   128     QString value;
       
   129     if ( detail.definitionName() == QContactPhoneNumber::DefinitionName )
       
   130         {
       
   131         mEdit->setMaxLength( CNT_PHONENUMBER_EDITOR_MAXLENGTH );
       
   132         QContactPhoneNumber phone = detail;
       
   133         subType = phone.subTypes().isEmpty() ? "" : phone.subTypes().first();
       
   134         if ( !phone.contexts().isEmpty() )
       
   135             context << phone.contexts().first();
       
   136         value = phone.number();
       
   137         }
       
   138     
       
   139     if ( detail.definitionName() == QContactOnlineAccount::DefinitionName )
       
   140         {
       
   141         mEdit->setMaxLength( CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH );
       
   142         QContactOnlineAccount account = detail;
       
   143         subType = account.subTypes().isEmpty() ? "" : account.subTypes().first();
       
   144         if (!account.contexts().isEmpty())
       
   145             context << account.contexts().first();
       
   146         value = account.accountUri();
       
   147         }
       
   148     
       
   149     mEdit->setText( value );
       
   150     constructSubtypeModel( subType, context );
       
   151     
       
   152     return widget;        
       
   153     }
       
   154 
       
   155 void CntPhoneNumberViewItem::constructPhoneNumber( CntDetailModelItem* aItem, QString aSubType, QStringList aContext )
       
   156     {
       
   157     mFilter->setFilter( HbPhoneNumberFilter::instance() );
       
   158     mFilter->setUpAsPhoneNumberEditor();
       
   159     mEdit->setMaxLength( CNT_PHONENUMBER_EDITOR_MAXLENGTH );
       
   160             
       
   161     QContactDetail detail = aItem->detail();
       
   162     
       
   163     // check if the detail type needs to changed
       
   164     if ( detail.definitionName() == QContactOnlineAccount::DefinitionName )
       
   165         {
       
   166         // also we need to remove the old online account and replace it
       
   167         // with phonenumber
       
   168         CntDetailEditorModel* model = static_cast<CntDetailEditorModel*>( aItem->model() );
       
   169         QContact* contact = model->contact();
       
   170         contact->removeDetail( &detail );
       
   171                 
       
   172         QContactPhoneNumber number;
       
   173         number.setSubTypes( aSubType );
       
   174         number.setContexts( aContext );
       
   175         aItem->setDetail( number );
       
   176         }
       
   177     else
       
   178         {
       
   179         QContactPhoneNumber number = detail;
       
   180         number.setSubTypes( aSubType );
       
   181         number.setContexts( aContext );
       
   182         aItem->setDetail( number );
       
   183         }
       
   184     qDebug() << mEdit->text();
       
   185     }
       
   186 
       
   187 void CntPhoneNumberViewItem::constructOnlineAccount( CntDetailModelItem* aItem, QString aSubType, QStringList aContext )
       
   188     {
       
   189     mFilter->setFilter( HbEmailAddressFilter::instance() );
       
   190     mFilter->setUpAsCompletingEmailField();
       
   191     mEdit->setMaxLength( CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH );
       
   192     
       
   193     QContactDetail detail = aItem->detail();
       
   194     // check if the detail type needs to changed
       
   195     if ( detail.definitionName() == QContactPhoneNumber::DefinitionName )
       
   196         {
       
   197         // also we need to remove the old phonenumber and replace it
       
   198         // with online account
       
   199         CntDetailEditorModel* model = static_cast<CntDetailEditorModel*>( aItem->model() );
       
   200         QContact* contact = model->contact();
       
   201         contact->removeDetail( &detail );
       
   202         
       
   203         QContactOnlineAccount account;
       
   204         account.setSubTypes( aSubType );
       
   205         account.setContexts( aContext );
       
   206         account.setAccountUri( mEdit->text() );
       
   207         aItem->setDetail( account );
       
   208         }
       
   209     else
       
   210         {
       
   211         QContactOnlineAccount account = detail;
       
   212         account.setSubTypes( aSubType );
       
   213         account.setContexts( aContext );
       
   214         account.setAccountUri( mEdit->text() );
       
   215         aItem->setDetail( account );
       
   216         }
       
   217     qDebug() << mEdit->text();
       
   218     }
       
   219 
       
   220 void CntPhoneNumberViewItem::constructSubtypeModel( QString aSubType, QStringList aContext )
       
   221     {
       
   222     QStandardItemModel* model = new QStandardItemModel();
       
   223         
       
   224     QString contextHome = QContactDetail::ContextHome;
       
   225     QString contextWork = QContactDetail::ContextWork;
       
   226         
       
   227     QString subTypeMobile = QContactPhoneNumber::SubTypeMobile;
       
   228     QString subTypeLandline = QContactPhoneNumber::SubTypeLandline;
       
   229     QString subTypeFax = QContactPhoneNumber::SubTypeFacsimile;
       
   230     QString subTypePager = QContactPhoneNumber::SubTypePager;
       
   231     QString subTypeCarPhone = QContactPhoneNumber::SubTypeCar;
       
   232     QString subTypeDtmf = QContactPhoneNumber::SubTypeDtmfMenu;
       
   233     QString subTypeAssistant = QContactPhoneNumber::SubTypeAssistant;
       
   234         
       
   235     QString subTypeInternet = QContactOnlineAccount::SubTypeSipVoip;
       
   236     QString subTypeSIP = QContactOnlineAccount::SubTypeSip;
       
   237     QString subTypeVideoShare = QContactOnlineAccount::SubTypeVideoShare;
       
   238     
       
   239     QStandardItem *mobile = new QStandardItem;
       
   240     mobile->setText(hbTrId("txt_phob_dblist_mobile"));
       
   241     mobile->setData(subTypeMobile, DetailSubType);
       
   242     mobile->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   243     model->appendRow(mobile);
       
   244        
       
   245     QStandardItem *mobilehome = new QStandardItem;
       
   246     mobilehome->setText(hbTrId("txt_phob_dblist_mobile_home"));
       
   247     mobilehome->setData(subTypeMobile, DetailSubType);
       
   248     mobilehome->setData(contextHome, DetailContext);
       
   249     mobilehome->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   250     model->appendRow(mobilehome);
       
   251        
       
   252     QStandardItem *mobilework = new QStandardItem;
       
   253     mobilework->setText(hbTrId("txt_phob_dblist_mobile_work"));
       
   254     mobilework->setData(subTypeMobile, DetailSubType);
       
   255     mobilework->setData(contextWork, DetailContext);
       
   256     mobilework->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   257     model->appendRow(mobilework);
       
   258 
       
   259     QStandardItem *land = new QStandardItem;
       
   260     land->setText(hbTrId("txt_phob_setlabel_val_phone"));
       
   261     land->setData(subTypeLandline, DetailSubType);
       
   262     land->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   263     model->appendRow(land);
       
   264        
       
   265     QStandardItem *landhome = new QStandardItem;
       
   266     landhome->setText(hbTrId("txt_phob_setlabel_val_phone_home"));
       
   267     landhome->setData(subTypeLandline, DetailSubType);
       
   268     landhome->setData(contextHome, DetailContext);
       
   269     landhome->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   270     model->appendRow(landhome);
       
   271        
       
   272     QStandardItem *landwork = new QStandardItem;
       
   273     landwork->setText(hbTrId("txt_phob_setlabel_val_phone_work"));
       
   274     landwork->setData(subTypeLandline, DetailSubType);
       
   275     landwork->setData(contextWork, DetailContext);
       
   276     landwork->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   277     model->appendRow(landwork);
       
   278     
       
   279     QStandardItem *fax = new QStandardItem;
       
   280     fax->setText(hbTrId("txt_phob_dblist_fax"));
       
   281     fax->setData(subTypeFax, DetailSubType);
       
   282     fax->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   283     model->appendRow(fax);
       
   284     
       
   285     QStandardItem *faxhome = new QStandardItem;
       
   286     faxhome->setText(hbTrId("txt_phob_dblist_fax_home"));
       
   287     faxhome->setData(subTypeFax, DetailSubType);
       
   288     faxhome->setData(contextHome, DetailContext);
       
   289     faxhome->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   290     model->appendRow(faxhome);
       
   291     
       
   292     QStandardItem *faxwork = new QStandardItem;
       
   293     faxwork->setText(hbTrId("txt_phob_dblist_fax_work"));
       
   294     faxwork->setData(subTypeFax, DetailSubType);
       
   295     faxwork->setData(contextWork, DetailContext);
       
   296     faxwork->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   297     model->appendRow(faxwork);
       
   298         
       
   299     QStandardItem *pager = new QStandardItem;
       
   300     pager->setText(hbTrId("txt_phob_setlabel_val_pager"));
       
   301     pager->setData(subTypePager, DetailSubType);
       
   302     pager->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   303     model->appendRow(pager);
       
   304     
       
   305     QStandardItem *assistant = new QStandardItem;
       
   306     assistant->setText(hbTrId("txt_phob_setlabel_val_assistant"));
       
   307     assistant->setData(subTypeAssistant, DetailSubType);
       
   308     assistant->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   309     model->appendRow(assistant);
       
   310         
       
   311     QStandardItem *carPhone = new QStandardItem;
       
   312     carPhone->setText(hbTrId("txt_phob_setlabel_val_car"));
       
   313     carPhone->setData(subTypeCarPhone, DetailSubType);
       
   314     carPhone->setData(CNT_PHONENUMBER_EDITOR_MAXLENGTH, DetailMaxLength);
       
   315     model->appendRow(carPhone);
       
   316     
       
   317 //    QStandardItem *dtmf = new QStandardItem;
       
   318 //    dtmf->setText(hbTrId("DTMF"));
       
   319 //    dtmf->setData(subTypeDtmf, DetailSubType);
       
   320 //    dtmf->setData(CNT_DTMF_EDITOR_MAXLENGTH, DetailMaxLength);
       
   321 //    model->appendRow(dtmf);
       
   322    
       
   323     QStandardItem *internet = new QStandardItem;
       
   324     internet->setText(qtTrId("Internet call"));
       
   325     internet->setData(subTypeInternet, DetailSubType);
       
   326     internet->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, DetailMaxLength);
       
   327     model->appendRow(internet);
       
   328       
       
   329     QStandardItem *internethome = new QStandardItem;
       
   330     internethome->setText(hbTrId("Internet call (home)"));
       
   331     internethome->setData(subTypeInternet, DetailSubType);
       
   332     internethome->setData(contextHome, DetailContext);
       
   333     internethome->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, DetailMaxLength);
       
   334     model->appendRow(internethome);
       
   335 
       
   336     QStandardItem *internetwork = new QStandardItem;
       
   337     internetwork->setText(hbTrId("Internet call (work)"));
       
   338     internetwork->setData(subTypeInternet, DetailSubType);
       
   339     internetwork->setData(contextWork, DetailContext);
       
   340     internetwork->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, DetailMaxLength);
       
   341     model->appendRow(internetwork);
       
   342           
       
   343     QStandardItem *sip = new QStandardItem;
       
   344     sip->setText(hbTrId("SIP"));
       
   345     sip->setData(subTypeSIP, DetailSubType);
       
   346     sip->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, DetailMaxLength);
       
   347     model->appendRow(sip);
       
   348       
       
   349 //    QStandardItem *shareVideo = new QStandardItem;
       
   350 //    shareVideo->setText(qtTrId("Share Video"));
       
   351 //    shareVideo->setData(subTypeVideoShare, DetailSubType);
       
   352 //    shareVideo->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, DetailMaxLength);
       
   353 //    model->appendRow(shareVideo);
       
   354    
       
   355     mBox->setModel( model );
       
   356     
       
   357     // search the selected index to be set
       
   358     QString context = aContext.isEmpty() ? "" : aContext.first();
       
   359     for ( int i(0); i < model->rowCount(); i++ )
       
   360         {
       
   361         if ( model->item(i)->data( DetailSubType ).toString() == aSubType &&
       
   362              model->item(i)->data( DetailContext ).toString() == context )
       
   363             {
       
   364             mBox->setCurrentIndex( i );
       
   365             break;
       
   366             }
       
   367         }
       
   368     }
       
   369 // End of File