controlpanel/src/cpframework/src/cpdataformbuttonentryviewitem.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 14 May 2010 16:07:47 +0300
changeset 23 7e4c5a2ff1a2
parent 21 851e19007849
child 52 58cebe0861a8
permissions -rw-r--r--
Revision: 201017 Kit: 201019

/*
* 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 "cpdataformbuttonentryviewitem.h"
#include <hbdataformmodelitem.h>
#include <hbpushbutton.h>
#include <hbdataformmodel.h>
#include <hbabstractitemview.h>
#include <QMetaProperty>
#include <cpsettingformentryitemdata.h>
/*!
    \class CpDataFormButtonEntryViewItem
    \brief The CpDataFormButtonEntryViewItem is a item proto type of HbDataForm which is supplied by control panel.
	When you want use setting items which are come from control panel, you should append this class to the proto type list of your data form's instance.
	Code example:
	\code
	HbDataForm *form = new HbDataForm();
	QList<HbAbstractViewItem *> protoType = form->itemProtoTypetypes();
	protoType.append(CpDataFormButtonEntryViewItem::createCpItemProtoType());
	form->setItemPrototypes();
	\endcode
*/
class CpDataFormButtonEntryViewItemPrivate 
{
public:
	CpDataFormButtonEntryViewItemPrivate() : mWidget(0)
	{
	}
	~CpDataFormButtonEntryViewItemPrivate()
	{
	}
	HbWidget *mWidget;
};

/*!
    Constructor
 */
CpDataFormButtonEntryViewItem::CpDataFormButtonEntryViewItem(QGraphicsItem *parent)
: HbDataFormViewItem(parent),d_ptr(new CpDataFormButtonEntryViewItemPrivate())
{
}

/*!
	Destructor of CpDataFormButtonEntryViewItem
 */
CpDataFormButtonEntryViewItem::~CpDataFormButtonEntryViewItem()
{
	delete d_ptr;
}

/*!
	Creates CpDataFormButtonEntryViewItem. This function is called form HbAbstractItemContainer when model is getting parsed for creating items.
 */
HbAbstractViewItem *CpDataFormButtonEntryViewItem::createItem()
{
	return new CpDataFormButtonEntryViewItem(*this);
}

/*!
	Copy constructor of CpDataFormButtonEntryViewItem
 */
CpDataFormButtonEntryViewItem::CpDataFormButtonEntryViewItem(const CpDataFormButtonEntryViewItem &other)
: HbDataFormViewItem(other), d_ptr(new CpDataFormButtonEntryViewItemPrivate(*other.d_ptr))
{
	
}

/*!
	Assignment operator
 */
CpDataFormButtonEntryViewItem &CpDataFormButtonEntryViewItem::operator=(const CpDataFormButtonEntryViewItem &other)
{
	if (&other == this) {
		return *this;
	}

	*d_ptr = *(other.d_ptr);
	
	return *this;
}

/*!
	Inherit from HbAbstractViewItem, return true if the model item can be supported by CpDataFormButtonEntryViewItem.
 */
bool CpDataFormButtonEntryViewItem::canSetModelIndex(const QModelIndex &index) const
{
	int itemTypeId = index.data(HbDataFormModelItem::ItemTypeRole).toInt();
	
	return (itemTypeId == CpSettingFormEntryItemData::ButtonEntryItem);
}

/*!
	Inherit from HbDataFormViewItem, return the setting item's widget of control panel
 */
HbWidget *CpDataFormButtonEntryViewItem::createCustomWidget()
{
    HbDataFormModelItem::DataItemType itemType = static_cast<HbDataFormModelItem::DataItemType>(
        modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());

	if (itemType == CpSettingFormEntryItemData::ButtonEntryItem) {
		HbPushButton *button = new HbPushButton(QString("Push button"));
		d_ptr->mWidget = button;
		button->setTextAlignment( Qt::AlignLeft );
		return button;
	}
    
    return 0;
}

/*!
    Deprecated. Be instead of HbDataFormViewItem::restore()
	Inherit from HbDataForm. This function is called by hbdataform's framework, 
	for supporting to load entry item's text, icon and additional text dynamically.
	It is not recommended to call this function manually.
 */
void CpDataFormButtonEntryViewItem::load()
{
	//HbDataFormViewItem::load();

	if (d_ptr->mWidget) {
		HbDataFormModelItem::DataItemType itemType = static_cast<HbDataFormModelItem::DataItemType>(
			modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());

		if(itemType == CpSettingFormEntryItemData::ButtonEntryItem) {

			QModelIndex itemIndex = modelIndex();
			HbDataFormModel *model = static_cast<HbDataFormModel*>(itemView()->model());;
			HbDataFormModelItem *modelItem = static_cast<HbDataFormModelItem*>(
				model->itemFromIndex(itemIndex));

			const QMetaObject *metaObj = d_ptr->mWidget->metaObject();
			int count = metaObj->propertyCount();
			for (int i = 0; i < count; i++) {
				QMetaProperty metaProperty = metaObj->property(i);
				if (metaProperty.isValid() && metaProperty.isWritable()) {
					metaProperty.write(d_ptr->mWidget,modelItem->contentWidgetData(metaProperty.name()));
				}

			}
		}
	}
}
/*!
    Inherit from HbDataForm. This function is called by hbdataform's framework, 
    for supporting to load entry item's text, icon and additional text dynamically.
    It is not recommended to call this function manually.
 */
void CpDataFormButtonEntryViewItem::restore()
{
    HbDataFormViewItem::restore();

    if (d_ptr->mWidget) {
        HbDataFormModelItem::DataItemType itemType = static_cast<HbDataFormModelItem::DataItemType>(
            modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());

        if(itemType == CpSettingFormEntryItemData::ButtonEntryItem) {

            QModelIndex itemIndex = modelIndex();
            HbDataFormModel *model = static_cast<HbDataFormModel*>(itemView()->model());;
            HbDataFormModelItem *modelItem = static_cast<HbDataFormModelItem*>(
                model->itemFromIndex(itemIndex));

            const QMetaObject *metaObj = d_ptr->mWidget->metaObject();
            int count = metaObj->propertyCount();
            for (int i = 0; i < count; i++) {
                QMetaProperty metaProperty = metaObj->property(i);
                if (metaProperty.isValid() && metaProperty.isWritable()) {
                    metaProperty.write(d_ptr->mWidget,modelItem->contentWidgetData(metaProperty.name()));
                }

            }
        }
    }
}

//End of File