phonebookui/pbkcommonui/src/cntonlineaccounteditorview.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Mar 2010 09:27:18 +0200
changeset 24 0ba2181d7c28
child 25 76a2435edfd4
permissions -rw-r--r--
Revision: 201007 Kit: 201011

/*
* 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 "cntonlineaccounteditorview.h"
#include "cnteditordataviewitem.h"
#include <hbinputstandardfilters.h>

CntOnlineAccountEditorView::CntOnlineAccountEditorView(CntViewManager *viewManager, QGraphicsItem *parent):
    CntBaseDetailEditorView(viewManager, parent)
{
    setHeader(hbTrId("Edit account details"));
}

CntOnlineAccountEditorView::~CntOnlineAccountEditorView()
{

}

void CntOnlineAccountEditorView::aboutToCloseView()
{
    for (int i = 0; i < mDetailList.count(); i++)
    {
        mContact->saveDetail(mDetailList.at(i));
        
        if (mDetailList.at(i)->value(QContactOnlineAccount::FieldAccountUri).isEmpty())
        {
            mContact->removeDetail(mDetailList.at(i));
        }
    }
    CntBaseDetailEditorView::aboutToCloseView();
}

QStandardItemModel *CntOnlineAccountEditorView::itemModel()
{
    QStandardItemModel *fieldModel = new QStandardItemModel();
    
    QString contextHome = QContactDetail::ContextHome;
    QString contextWork = QContactDetail::ContextWork;

    QString internetSubType = QContactOnlineAccount::SubTypeSipVoip;
    QString sipSubType = QContactOnlineAccount::SubTypeSip;
    QString shareVideoSubType = QContactOnlineAccount::SubTypeVideoShare;
    
    QStandardItem *internet = new QStandardItem;
    internet->setText(hbTrId("Internet call"));
    internet->setData(internetSubType, Qt::UserRole);
    internet->setData(":/icons/qgn_prop_nrtyp_voip.svg", Qt::UserRole+2);
    internet->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, Qt::UserRole+3);
    fieldModel->appendRow(internet);
    QStandardItem *internethome = new QStandardItem;
    internethome->setText(hbTrId("Internet call (home)"));
    internethome->setData(internetSubType, Qt::UserRole);
    internethome->setData(contextHome, Qt::UserRole+1);
    internethome->setData(":/icons/qgn_prop_nrtyp_voip.svg", Qt::UserRole+2);
    internethome->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, Qt::UserRole+3);
    fieldModel->appendRow(internethome);
    QStandardItem *internetwork = new QStandardItem;
    internetwork->setText(hbTrId("Internet call (work)"));
    internetwork->setData(internetSubType, Qt::UserRole);
    internetwork->setData(contextWork, Qt::UserRole+1);
    internetwork->setData(":/icons/qgn_prop_nrtyp_voip.svg", Qt::UserRole+2);
    internetwork->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, Qt::UserRole+3);
    fieldModel->appendRow(internetwork);
    
    QStandardItem *sip = new QStandardItem;
    sip->setText(hbTrId("SIP"));
    sip->setData(sipSubType, Qt::UserRole);
    sip->setData(":/icons/qgn_prop_nrtyp_sip.svg", Qt::UserRole+2);
    sip->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, Qt::UserRole+3);
    fieldModel->appendRow(sip);
    QStandardItem *shareVideo = new QStandardItem;
    shareVideo->setText(hbTrId("Share Video"));
    shareVideo->setData(shareVideoSubType, Qt::UserRole);
    shareVideo->setData(":/icons/qgn_prop_nrtyp_swis.svg", Qt::UserRole+2);
    shareVideo->setData(CNT_ONLINEACCOUNT_EDITOR_MAXLENGTH, Qt::UserRole+3);
    fieldModel->appendRow(shareVideo);
    
    return fieldModel;
}

void CntOnlineAccountEditorView::initializeForm()
{
    QContactOnlineAccount *buttonAccount = new QContactOnlineAccount();
    mDetailList.append(buttonAccount);
    CntEditorDataModelItem *buttonItem = new CntEditorDataModelItem(*buttonAccount, hbTrId("txt_phob_button_add_account"),
            static_cast<HbDataFormModelItem::DataItemType>(HbDataFormModelItem::CustomItemBase+2));
    formModel()->appendDataFormItem(buttonItem, formModel()->invisibleRootItem());
    
    QList<QContactOnlineAccount> details = mContact->details<QContactOnlineAccount>();
    
    if (details.count() > 0)
    {
        for(int i = 0;i < details.count();i++)
        {
            QContactOnlineAccount *account = new QContactOnlineAccount(details.at(i));
            mDetailList.append(account);
            CntEditorDataModelItem *item = new CntEditorDataModelItem(*account, QContactOnlineAccount::FieldAccountUri, itemModel(), 
                    HbDataFormModelItem::CustomItemBase);
            item->setTextFilter(HbInputLowerCaseFilter::instance());
            formModel()->insertDataFormItem(formModel()->rowCount() - 1, item, formModel()->invisibleRootItem());
            
            // check if this was the clicked item in edit view
            if (mParamString != "add" && mParamString.toInt() == i)
            {
                // set focus to the added field's lineedit
                static_cast<CntEditorDataViewItem*>(dataForm()->itemByIndex(formModel()->indexFromItem(item)))->focusLineEdit();
            }
        }
    }
    else
    {
        addDetail();
    }
}

void CntOnlineAccountEditorView::addDetail()
{
    QContactOnlineAccount *account = new QContactOnlineAccount();
    account->setSubTypes(QContactOnlineAccount::SubTypeSipVoip);
    mDetailList.append(account);
    CntEditorDataModelItem *item = new CntEditorDataModelItem(*account, QContactOnlineAccount::FieldAccountUri, itemModel(), 
            HbDataFormModelItem::CustomItemBase);
    item->setTextFilter(HbInputLowerCaseFilter::instance());
    formModel()->insertDataFormItem(formModel()->rowCount() - 1, item, formModel()->invisibleRootItem());
    
    // set focus to the added field's lineedit
    static_cast<CntEditorDataViewItem*>(dataForm()->itemByIndex(formModel()->indexFromItem(item)))->focusLineEdit();
}