diff -r c3690ec91ef8 -r 923ff622b8b9 src/hbwidgets/dataform/hbdataform_p.cpp --- a/src/hbwidgets/dataform/hbdataform_p.cpp Wed Jun 23 18:33:25 2010 +0300 +++ b/src/hbwidgets/dataform/hbdataform_p.cpp Tue Jul 06 14:36:53 2010 +0300 @@ -83,7 +83,9 @@ void HbDataFormPrivate::_q_page_changed(int index) { Q_Q(const HbDataForm); - QModelIndex childIndex = q->model()->index(index,0); + + QModelIndex childIndex = pageModelIndex(index); + //QModelIndex childIndex = q->model()->index(index,0); HbDataFormModelItem::DataItemType itemType = static_cast( (childIndex.data(HbDataFormModelItem::ItemTypeRole)).toInt()); @@ -103,13 +105,16 @@ QModelIndex changedIndex = model->index(index, 0);*/ if(itemType == HbDataFormModelItem::FormPageItem) { if(index != mHeadingWidget->mActivePage) { - QModelIndex prevPageIndex = q->model()->index(mHeadingWidget->mActivePage,0); - QModelIndex newPageIndex = q->model()->index(index,0); + QModelIndex prevPageIndex = pageModelIndex( mHeadingWidget->mActivePage ); + QModelIndex newPageIndex = pageModelIndex( index ); if(prevPageIndex.isValid()) { HbDataGroup *prevPage = static_cast( q->itemByIndex(prevPageIndex)); if(prevPage) { HbDataGroupPrivate::d_ptr(prevPage)->setExpanded(false); + } else { + mContainer->setItemTransientStateValue(prevPageIndex, "expanded", false); + } } if(newPageIndex.isValid()) { @@ -117,6 +122,8 @@ q->itemByIndex(newPageIndex)); if(newPage) { HbDataGroupPrivate::d_ptr(newPage)->setExpanded(true); + } else { + mContainer->setItemTransientStateValue(newPageIndex, "expanded", true); } } mHeadingWidget->mActivePage = index; @@ -124,6 +131,35 @@ } } +/* + Function to return valid modelIndex for corresponding formpage combo index. +*/ +QModelIndex HbDataFormPrivate::pageModelIndex(int index) const +{ + const Q_Q(HbDataForm); + int pageIndex = -1; + QModelIndex modelIndex; + + // Make sure that the child is groupPage type and current item is group. + if( index >= 0) { + + HbDataFormModelItem *groupModelItem = static_cast(q->model())->invisibleRootItem(); + int childCount = groupModelItem->childCount(); + + for( int i = 0; i < childCount; i++) { + HbDataFormModelItem *child = groupModelItem->childAt(i); + if( child->type() == HbDataFormModelItem::FormPageItem ) { + pageIndex ++; + // get the index of groupPage + if(pageIndex == index) { + modelIndex = static_cast(q->model())->indexFromItem(child); + break; + } + } + } + } + return modelIndex; +} /*! Creates a DataForm Page \a page in DataForm . @@ -145,7 +181,7 @@ if(!mHeadingWidget->mPageCombo) { mHeadingWidget->createPrimitives(); mHeadingWidget->mPageCombo = new HbComboBox(mHeadingWidget); - HbStyle::setItemName(mHeadingWidget->mPageCombo,"dataForm_Combo"); + HbStyle::setItemName(mHeadingWidget->mPageCombo,"dataForm_Combo"); QEvent polishEvent(QEvent::Polish); QCoreApplication::sendEvent(mHeadingWidget->mPageCombo, &polishEvent); // setFormHeading to the layout @@ -181,30 +217,37 @@ Q_Q(HbDataForm); if(mHeadingWidget && mHeadingWidget->mPageCombo) { + // if we are emoving the current page if(mHeadingWidget->mPageCombo->currentText() == page){ - mHeadingWidget->mPageCombo->setCurrentIndex(mHeadingWidget->mActivePage+1); + // if we are removing the last page then set the current page as 0th + if( mHeadingWidget->mPageCombo->findText(page) + 1 == mHeadingWidget->mPageCombo->count()) { + mHeadingWidget->mPageCombo->setCurrentIndex(0); + } else {// set next page as the curent page + mHeadingWidget->mPageCombo->setCurrentIndex(mHeadingWidget->mPageCombo->findText(page) + 1); + } } } - QObject::disconnect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)), + QObject::disconnect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)), q,SLOT(_q_page_changed(int))); - mHeadingWidget->mPageCombo->removeItem(mHeadingWidget->mPageCombo->findText(page)); - mHeadingWidget->mActivePage = mHeadingWidget->mPageCombo->currentIndex(); + mHeadingWidget->mPageCombo->removeItem(mHeadingWidget->mPageCombo->findText(page)); + mHeadingWidget->mActivePage = mHeadingWidget->mPageCombo->currentIndex(); - QObject::connect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)), + QObject::connect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)), q,SLOT(_q_page_changed(int))); + mHeadingWidget->callPolish(); } -void HbDataFormPrivate::_q_item_displayed(const QModelIndex &index) +/*void HbDataFormPrivate::_q_item_displayed(const QModelIndex &index) { Q_Q( HbDataForm); emit q->itemShown(index); emit q->activated(index); qWarning("activated signal will not be emitted when items are created ," "instead itemShown SIGNAL should be used"); -} +}*/ void HbDataFormPrivate::makeConnection(QModelIndex index, HbWidget* widget) {