controlpanel/src/cpframework/src/cpdataformbuttonentryviewitem.cpp
author hgs
Tue, 24 Aug 2010 10:30:25 +0800
changeset 52 58cebe0861a8
parent 37 940f6b67827d
permissions -rw-r--r--
201033
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0""
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
52
hgs
parents: 37
diff changeset
    14
* Description:  View item implementation for button entry item.
36
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
#include "cpdataformbuttonentryviewitem.h"
hgs
parents:
diff changeset
    18
#include <hbdataformmodelitem.h>
hgs
parents:
diff changeset
    19
#include <hbpushbutton.h>
hgs
parents:
diff changeset
    20
#include <hbdataformmodel.h>
hgs
parents:
diff changeset
    21
#include <hbabstractitemview.h>
hgs
parents:
diff changeset
    22
#include <QMetaProperty>
hgs
parents:
diff changeset
    23
#include <cpsettingformentryitemdata.h>
hgs
parents:
diff changeset
    24
/*!
hgs
parents:
diff changeset
    25
    \class CpDataFormButtonEntryViewItem
hgs
parents:
diff changeset
    26
    \brief The CpDataFormButtonEntryViewItem is a item proto type of HbDataForm which is supplied by control panel.
hgs
parents:
diff changeset
    27
	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.
hgs
parents:
diff changeset
    28
	Code example:
hgs
parents:
diff changeset
    29
	\code
hgs
parents:
diff changeset
    30
	HbDataForm *form = new HbDataForm();
hgs
parents:
diff changeset
    31
	QList<HbAbstractViewItem *> protoType = form->itemProtoTypetypes();
hgs
parents:
diff changeset
    32
	protoType.append(CpDataFormButtonEntryViewItem::createCpItemProtoType());
hgs
parents:
diff changeset
    33
	form->setItemPrototypes();
hgs
parents:
diff changeset
    34
	\endcode
hgs
parents:
diff changeset
    35
*/
hgs
parents:
diff changeset
    36
class CpDataFormButtonEntryViewItemPrivate 
hgs
parents:
diff changeset
    37
{
hgs
parents:
diff changeset
    38
public:
hgs
parents:
diff changeset
    39
	CpDataFormButtonEntryViewItemPrivate() : mWidget(0)
hgs
parents:
diff changeset
    40
	{
hgs
parents:
diff changeset
    41
	}
hgs
parents:
diff changeset
    42
	~CpDataFormButtonEntryViewItemPrivate()
hgs
parents:
diff changeset
    43
	{
hgs
parents:
diff changeset
    44
	}
hgs
parents:
diff changeset
    45
	HbWidget *mWidget;
hgs
parents:
diff changeset
    46
};
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
/*!
hgs
parents:
diff changeset
    49
    Constructor
hgs
parents:
diff changeset
    50
 */
hgs
parents:
diff changeset
    51
CpDataFormButtonEntryViewItem::CpDataFormButtonEntryViewItem(QGraphicsItem *parent)
hgs
parents:
diff changeset
    52
: HbDataFormViewItem(parent),d_ptr(new CpDataFormButtonEntryViewItemPrivate())
hgs
parents:
diff changeset
    53
{
hgs
parents:
diff changeset
    54
}
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
/*!
hgs
parents:
diff changeset
    57
	Destructor of CpDataFormButtonEntryViewItem
hgs
parents:
diff changeset
    58
 */
hgs
parents:
diff changeset
    59
CpDataFormButtonEntryViewItem::~CpDataFormButtonEntryViewItem()
hgs
parents:
diff changeset
    60
{
hgs
parents:
diff changeset
    61
	delete d_ptr;
hgs
parents:
diff changeset
    62
}
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
/*!
hgs
parents:
diff changeset
    65
	Creates CpDataFormButtonEntryViewItem. This function is called form HbAbstractItemContainer when model is getting parsed for creating items.
hgs
parents:
diff changeset
    66
 */
hgs
parents:
diff changeset
    67
HbAbstractViewItem *CpDataFormButtonEntryViewItem::createItem()
hgs
parents:
diff changeset
    68
{
hgs
parents:
diff changeset
    69
	return new CpDataFormButtonEntryViewItem(*this);
hgs
parents:
diff changeset
    70
}
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
/*!
hgs
parents:
diff changeset
    73
	Copy constructor of CpDataFormButtonEntryViewItem
hgs
parents:
diff changeset
    74
 */
hgs
parents:
diff changeset
    75
CpDataFormButtonEntryViewItem::CpDataFormButtonEntryViewItem(const CpDataFormButtonEntryViewItem &other)
hgs
parents:
diff changeset
    76
: HbDataFormViewItem(other), d_ptr(new CpDataFormButtonEntryViewItemPrivate(*other.d_ptr))
hgs
parents:
diff changeset
    77
{
hgs
parents:
diff changeset
    78
	
hgs
parents:
diff changeset
    79
}
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
/*!
hgs
parents:
diff changeset
    82
	Assignment operator
hgs
parents:
diff changeset
    83
 */
hgs
parents:
diff changeset
    84
CpDataFormButtonEntryViewItem &CpDataFormButtonEntryViewItem::operator=(const CpDataFormButtonEntryViewItem &other)
hgs
parents:
diff changeset
    85
{
hgs
parents:
diff changeset
    86
	if (&other == this) {
hgs
parents:
diff changeset
    87
		return *this;
hgs
parents:
diff changeset
    88
	}
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
	*d_ptr = *(other.d_ptr);
hgs
parents:
diff changeset
    91
	
hgs
parents:
diff changeset
    92
	return *this;
hgs
parents:
diff changeset
    93
}
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
/*!
hgs
parents:
diff changeset
    96
	Inherit from HbAbstractViewItem, return true if the model item can be supported by CpDataFormButtonEntryViewItem.
hgs
parents:
diff changeset
    97
 */
hgs
parents:
diff changeset
    98
bool CpDataFormButtonEntryViewItem::canSetModelIndex(const QModelIndex &index) const
hgs
parents:
diff changeset
    99
{
hgs
parents:
diff changeset
   100
	int itemTypeId = index.data(HbDataFormModelItem::ItemTypeRole).toInt();
hgs
parents:
diff changeset
   101
	
hgs
parents:
diff changeset
   102
	return (itemTypeId == CpSettingFormEntryItemData::ButtonEntryItem);
hgs
parents:
diff changeset
   103
}
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
/*!
hgs
parents:
diff changeset
   106
	Inherit from HbDataFormViewItem, return the setting item's widget of control panel
hgs
parents:
diff changeset
   107
 */
hgs
parents:
diff changeset
   108
HbWidget *CpDataFormButtonEntryViewItem::createCustomWidget()
hgs
parents:
diff changeset
   109
{
hgs
parents:
diff changeset
   110
    HbDataFormModelItem::DataItemType itemType = static_cast<HbDataFormModelItem::DataItemType>(
hgs
parents:
diff changeset
   111
        modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
	if (itemType == CpSettingFormEntryItemData::ButtonEntryItem) {
hgs
parents:
diff changeset
   114
		HbPushButton *button = new HbPushButton(QString("Push button"));
hgs
parents:
diff changeset
   115
		d_ptr->mWidget = button;
hgs
parents:
diff changeset
   116
		button->setTextAlignment( Qt::AlignLeft );
hgs
parents:
diff changeset
   117
		return button;
hgs
parents:
diff changeset
   118
	}
hgs
parents:
diff changeset
   119
    
hgs
parents:
diff changeset
   120
    return 0;
hgs
parents:
diff changeset
   121
}
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
/*!
37
hgs
parents: 36
diff changeset
   124
    Inherit from HbDataForm. This function is called by hbdataform's framework, 
hgs
parents: 36
diff changeset
   125
    for supporting to load entry item's text, icon and additional text dynamically.
hgs
parents: 36
diff changeset
   126
    It is not recommended to call this function manually.
hgs
parents: 36
diff changeset
   127
 */
hgs
parents: 36
diff changeset
   128
void CpDataFormButtonEntryViewItem::restore()
hgs
parents: 36
diff changeset
   129
{
hgs
parents: 36
diff changeset
   130
    HbDataFormViewItem::restore();
hgs
parents: 36
diff changeset
   131
52
hgs
parents: 37
diff changeset
   132
    // Set widget's properties according to model item's content widget data
hgs
parents: 37
diff changeset
   133
    // so that the widget can be refreshed
37
hgs
parents: 36
diff changeset
   134
    if (d_ptr->mWidget) {
hgs
parents: 36
diff changeset
   135
        HbDataFormModelItem::DataItemType itemType = static_cast<HbDataFormModelItem::DataItemType>(
hgs
parents: 36
diff changeset
   136
            modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());
hgs
parents: 36
diff changeset
   137
hgs
parents: 36
diff changeset
   138
        if(itemType == CpSettingFormEntryItemData::ButtonEntryItem) {
hgs
parents: 36
diff changeset
   139
hgs
parents: 36
diff changeset
   140
            QModelIndex itemIndex = modelIndex();
hgs
parents: 36
diff changeset
   141
            HbDataFormModel *model = static_cast<HbDataFormModel*>(itemView()->model());;
hgs
parents: 36
diff changeset
   142
            HbDataFormModelItem *modelItem = static_cast<HbDataFormModelItem*>(
hgs
parents: 36
diff changeset
   143
                model->itemFromIndex(itemIndex));
hgs
parents: 36
diff changeset
   144
hgs
parents: 36
diff changeset
   145
            const QMetaObject *metaObj = d_ptr->mWidget->metaObject();
hgs
parents: 36
diff changeset
   146
            int count = metaObj->propertyCount();
hgs
parents: 36
diff changeset
   147
            for (int i = 0; i < count; i++) {
hgs
parents: 36
diff changeset
   148
                QMetaProperty metaProperty = metaObj->property(i);
hgs
parents: 36
diff changeset
   149
                if (metaProperty.isValid() && metaProperty.isWritable()) {
hgs
parents: 36
diff changeset
   150
                    metaProperty.write(d_ptr->mWidget,modelItem->contentWidgetData(metaProperty.name()));
hgs
parents: 36
diff changeset
   151
                }
hgs
parents: 36
diff changeset
   152
hgs
parents: 36
diff changeset
   153
            }
hgs
parents: 36
diff changeset
   154
        }
hgs
parents: 36
diff changeset
   155
    }
hgs
parents: 36
diff changeset
   156
}
36
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
//End of File