src/hbwidgets/dataform/hbdataform_p.cpp
branchGCC_SURGE
changeset 15 f378acbc9cfb
parent 7 923ff622b8b9
child 21 4633027730f5
--- a/src/hbwidgets/dataform/hbdataform_p.cpp	Thu Jul 15 14:03:49 2010 +0100
+++ b/src/hbwidgets/dataform/hbdataform_p.cpp	Thu Jul 22 16:36:53 2010 +0100
@@ -25,7 +25,9 @@
 
 #include "hbdataform_p.h"
 #include <hbdataformviewitem.h>
+#include "hbdataformviewitem_p.h"
 #include "hbdataitemcontainer_p.h"
+#include "hbdatagroup_p_p.h"
 #include <hbcombobox.h>
 #include <hbapplication.h>
 #include <hbdataformmodel.h>
@@ -81,32 +83,83 @@
 void  HbDataFormPrivate::_q_page_changed(int index)
 {
     Q_Q(const HbDataForm);
-    QStringListModel *model = static_cast<QStringListModel*>(
+
+    QModelIndex childIndex = pageModelIndex(index);
+    //QModelIndex childIndex = q->model()->index(index,0);
+    HbDataFormModelItem::DataItemType itemType =
+        static_cast<HbDataFormModelItem::DataItemType>(
+        (childIndex.data(HbDataFormModelItem::ItemTypeRole)).toInt());
+
+    if(mHeadingWidget->mPageCombo) {
+        if(mHeadingWidget->mPageCombo->currentIndex() != index) {
+            QObject::disconnect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)),
+                q,SLOT(_q_page_changed(int)));
+            mHeadingWidget->mPageCombo->setCurrentIndex(index);
+            QObject::connect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)),
+                q,SLOT(_q_page_changed(int)));
+        }
+    }
+
+   /* QStringListModel *model = static_cast<QStringListModel*>(
         mHeadingWidget->mPageCombo->model());
-    QModelIndex changedIndex = model->index(index, 0);
-    if(changedIndex.isValid()) {
-        if(changedIndex.row() != mHeadingWidget->mActivePage) {
-            QModelIndex prevPageIndex = q->model()->index(mHeadingWidget->mActivePage,0);
-            QModelIndex newPageIndex = q->model()->index(changedIndex.row(),0);
+    QModelIndex changedIndex = model->index(index, 0);*/
+    if(itemType == HbDataFormModelItem::FormPageItem) {
+        if(index != mHeadingWidget->mActivePage) {
+            QModelIndex prevPageIndex = pageModelIndex( mHeadingWidget->mActivePage );
+            QModelIndex newPageIndex = pageModelIndex( index );
             if(prevPageIndex.isValid()) {
                 HbDataGroup *prevPage = static_cast<HbDataGroup *>(
                                                q->itemByIndex(prevPageIndex));
                 if(prevPage) {
-                    prevPage->setExpanded(false);
+                    HbDataGroupPrivate::d_ptr(prevPage)->setExpanded(false);
+                } else {
+                    mContainer->setItemTransientStateValue(prevPageIndex, "expanded", false);
+
                 }
             }
             if(newPageIndex.isValid()) {
                 HbDataGroup *newPage = static_cast<HbDataGroup *>(
                                                q->itemByIndex(newPageIndex));
                 if(newPage) {
-                    newPage->setExpanded(true);
+                    HbDataGroupPrivate::d_ptr(newPage)->setExpanded(true);
+                } else {
+                    mContainer->setItemTransientStateValue(newPageIndex, "expanded", true);
                 }
             }
-            mHeadingWidget->mActivePage = changedIndex.row();
+            mHeadingWidget->mActivePage = index;
         }
     }
 }
 
+/*
+    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 .
@@ -128,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
@@ -164,37 +217,39 @@
     Q_Q(HbDataForm);    
 
     if(mHeadingWidget && mHeadingWidget->mPageCombo) {
+        // if we are emoving the current page
         if(mHeadingWidget->mPageCombo->currentText() == page){
-            if(mHeadingWidget->mActivePage != 0) {
+        // 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 {
-                mHeadingWidget->mPageCombo->setCurrentIndex(mHeadingWidget->mActivePage+1);
+            } 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)
+void HbDataFormPrivate::makeConnection(QModelIndex index, HbWidget* widget)
 {
     Q_Q( HbDataForm);
     if(!index.isValid()){
@@ -205,21 +260,17 @@
         if(modelItem){
             QList<ItemSignal> signalList = mConnectionList.values(modelItem);
             if(signalList.count() > 0){
-                HbDataFormViewItem *viewItem = static_cast<HbDataFormViewItem*>(q->itemByIndex(index));
-                if(viewItem){
-                    HbWidget *contentWidget = viewItem->dataItemContentWidget();
-                    if(contentWidget){
-                        foreach(ItemSignal signal, signalList) {
-                            QObject *objct = signal.reciever;
-                            QString signalName = signal.signal;
-                            QString slot = signal.slot;
-                            // Make connection
-                            if(objct) { 
-                                QObject::connect(contentWidget, signalName.toAscii().data(), 
-                                    objct,slot.toAscii().data());
-                            }
-                            
+                if(widget){
+                    foreach(const ItemSignal& signal, signalList) {
+                        QObject *objct = signal.receiver;
+                        QString signalName = signal.signal;
+                        QString slot = signal.slot;
+                        // Make connection
+                        if(objct) { 
+                            QObject::connect(widget, signalName.toAscii().data(), 
+                                objct,slot.toAscii().data());
                         }
+                        
                     }
                 }
             }
@@ -227,9 +278,10 @@
     }
 }
 
+
 void HbDataFormPrivate::removeConnection(HbDataFormModelItem * modelItem, 
                                   QString signal, 
-                                  QObject *reciever, 
+                                  QObject *receiver, 
                                   QString slot)
 {
     Q_Q( HbDataForm);
@@ -242,17 +294,17 @@
                 static_cast<HbDataFormModel*>(q->model())->indexFromItem(modelItem);
                 HbDataFormViewItem *viewItem = static_cast<HbDataFormViewItem*>(q->itemByIndex(index));
                 if(viewItem){
-                    HbWidget *contentWidget = viewItem->dataItemContentWidget();
+                    HbWidget *contentWidget = HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget;
                     if(contentWidget){
                         //foreach(ItemSignal signalItem, signalList) {
                         for(int i = 0; i < signalList.count() ;i++){
                             ItemSignal signalItem = signalList.at(i);
-                            if(reciever == signalItem.reciever &&
+                            if(receiver == signalItem.receiver &&
                             signal == signalItem.signal &&
                             slot == signalItem.slot){
                             // disconnect
                                 QObject::disconnect(contentWidget, signal.toAscii().data(), 
-                                    reciever,slot.toAscii().data());
+                                    receiver,slot.toAscii().data());
                                 signalList.removeAt(i);
                                 for(int j = 0; j < signalList.count(); j++){
                                     mConnectionList.insertMulti(modelItem, signalList.at(j));
@@ -269,7 +321,7 @@
 
 void HbDataFormPrivate::connectNow(HbDataFormModelItem * modelItem, 
                                    QString signal, 
-                                   QObject *reciever, 
+                                   QObject *receiver, 
                                    QString slot)
 {
     Q_Q( HbDataForm);    
@@ -277,14 +329,13 @@
     if(q->model()) {
         QModelIndex index = static_cast<HbDataFormModel*>(q->model())->indexFromItem(modelItem);
         if(modelItem){
-                HbDataFormViewItem *viewItem =static_cast<HbDataFormViewItem*>( q->itemByIndex(index) );
-                if(viewItem){
-                    HbWidget *contentWidget = viewItem->dataItemContentWidget();
-                        // Make connection
-                    if(contentWidget){
-                        QObject::connect(contentWidget, signal.toAscii().data(), 
-                            reciever,slot.toAscii().data());
-                    }
+            HbDataFormViewItem *viewItem =static_cast<HbDataFormViewItem*>( q->itemByIndex(index) );
+            if(viewItem){
+                if(HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget) {
+                    // Make connection
+                        QObject::connect(HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget, signal.toAscii().data(), 
+                            receiver,slot.toAscii().data());
+                }
             }
         }
     }
@@ -303,13 +354,13 @@
                 QModelIndex index = static_cast<HbDataFormModel*>(q->model())->indexFromItem(item);
                 HbDataFormViewItem *viewItem = static_cast<HbDataFormViewItem*> (q->itemByIndex(index));
                 if(viewItem){
-                    HbWidget *contentWidget = viewItem->dataItemContentWidget();
+                    HbWidget *contentWidget = HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget;
                     // disconnect signal and remove signal from list
                     for(int i = 0;i<signalList.count();) {
                         ItemSignal signalItem = signalList.takeAt(i);
                             // Make connection
                         QObject::disconnect(contentWidget, signalItem.signal.toAscii().data(), 
-                                signalItem.reciever,signalItem.slot.toAscii().data());
+                                signalItem.receiver,signalItem.slot.toAscii().data());
                             
                         
                     }
@@ -330,13 +381,13 @@
                 QModelIndex index = static_cast<HbDataFormModel*>(q->model())->indexFromItem(modelItem);
                 HbDataFormViewItem *viewItem =static_cast<HbDataFormViewItem*>( q->itemByIndex(index));
                 if(viewItem){
-                    HbWidget *contentWidget = viewItem->dataItemContentWidget();
+                    HbWidget *contentWidget = HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget;
                     // disconnect signal and remove signal from list
                     for(int i = 0;i<signalList.count(); ) {
                         ItemSignal signalItem = signalList.takeAt(i);
                             // Make connection
                         QObject::disconnect(contentWidget, signalItem.signal.toAscii().data(), 
-                                signalItem.reciever,signalItem.slot.toAscii().data());
+                                signalItem.receiver,signalItem.slot.toAscii().data());
                     }
                 }
             }
@@ -344,3 +395,9 @@
     }
 }
 
+void HbDataFormPrivate::emitActivated(const QModelIndex &modelIndex)
+{
+    Q_Q( HbDataForm);
+    emit q->activated(modelIndex);
+}
+