src/hbwidgets/dataform/hbdataform_p.cpp
changeset 7 923ff622b8b9
parent 6 c3690ec91ef8
child 21 4633027730f5
--- 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<HbDataFormModelItem::DataItemType>(
         (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<HbDataGroup *>(
                                                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<HbDataFormModel*>(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<HbDataFormModel*>(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)
 {