src/hbwidgets/dataform/hbdataform_p.cpp
changeset 7 923ff622b8b9
parent 6 c3690ec91ef8
child 21 4633027730f5
equal deleted inserted replaced
6:c3690ec91ef8 7:923ff622b8b9
    81 }
    81 }
    82 
    82 
    83 void  HbDataFormPrivate::_q_page_changed(int index)
    83 void  HbDataFormPrivate::_q_page_changed(int index)
    84 {
    84 {
    85     Q_Q(const HbDataForm);
    85     Q_Q(const HbDataForm);
    86     QModelIndex childIndex = q->model()->index(index,0);
    86 
       
    87     QModelIndex childIndex = pageModelIndex(index);
       
    88     //QModelIndex childIndex = q->model()->index(index,0);
    87     HbDataFormModelItem::DataItemType itemType =
    89     HbDataFormModelItem::DataItemType itemType =
    88         static_cast<HbDataFormModelItem::DataItemType>(
    90         static_cast<HbDataFormModelItem::DataItemType>(
    89         (childIndex.data(HbDataFormModelItem::ItemTypeRole)).toInt());
    91         (childIndex.data(HbDataFormModelItem::ItemTypeRole)).toInt());
    90 
    92 
    91     if(mHeadingWidget->mPageCombo) {
    93     if(mHeadingWidget->mPageCombo) {
   101    /* QStringListModel *model = static_cast<QStringListModel*>(
   103    /* QStringListModel *model = static_cast<QStringListModel*>(
   102         mHeadingWidget->mPageCombo->model());
   104         mHeadingWidget->mPageCombo->model());
   103     QModelIndex changedIndex = model->index(index, 0);*/
   105     QModelIndex changedIndex = model->index(index, 0);*/
   104     if(itemType == HbDataFormModelItem::FormPageItem) {
   106     if(itemType == HbDataFormModelItem::FormPageItem) {
   105         if(index != mHeadingWidget->mActivePage) {
   107         if(index != mHeadingWidget->mActivePage) {
   106             QModelIndex prevPageIndex = q->model()->index(mHeadingWidget->mActivePage,0);
   108             QModelIndex prevPageIndex = pageModelIndex( mHeadingWidget->mActivePage );
   107             QModelIndex newPageIndex = q->model()->index(index,0);
   109             QModelIndex newPageIndex = pageModelIndex( index );
   108             if(prevPageIndex.isValid()) {
   110             if(prevPageIndex.isValid()) {
   109                 HbDataGroup *prevPage = static_cast<HbDataGroup *>(
   111                 HbDataGroup *prevPage = static_cast<HbDataGroup *>(
   110                                                q->itemByIndex(prevPageIndex));
   112                                                q->itemByIndex(prevPageIndex));
   111                 if(prevPage) {
   113                 if(prevPage) {
   112                     HbDataGroupPrivate::d_ptr(prevPage)->setExpanded(false);
   114                     HbDataGroupPrivate::d_ptr(prevPage)->setExpanded(false);
       
   115                 } else {
       
   116                     mContainer->setItemTransientStateValue(prevPageIndex, "expanded", false);
       
   117 
   113                 }
   118                 }
   114             }
   119             }
   115             if(newPageIndex.isValid()) {
   120             if(newPageIndex.isValid()) {
   116                 HbDataGroup *newPage = static_cast<HbDataGroup *>(
   121                 HbDataGroup *newPage = static_cast<HbDataGroup *>(
   117                                                q->itemByIndex(newPageIndex));
   122                                                q->itemByIndex(newPageIndex));
   118                 if(newPage) {
   123                 if(newPage) {
   119                     HbDataGroupPrivate::d_ptr(newPage)->setExpanded(true);
   124                     HbDataGroupPrivate::d_ptr(newPage)->setExpanded(true);
       
   125                 } else {
       
   126                     mContainer->setItemTransientStateValue(newPageIndex, "expanded", true);
   120                 }
   127                 }
   121             }
   128             }
   122             mHeadingWidget->mActivePage = index;
   129             mHeadingWidget->mActivePage = index;
   123         }
   130         }
   124     }
   131     }
   125 }
   132 }
   126 
   133 
       
   134 /*
       
   135     Function to return valid modelIndex for corresponding formpage combo index.
       
   136 */
       
   137 QModelIndex HbDataFormPrivate::pageModelIndex(int index) const 
       
   138 {
       
   139     const Q_Q(HbDataForm);
       
   140     int pageIndex = -1;
       
   141     QModelIndex modelIndex;
       
   142     
       
   143     // Make sure that the child is groupPage type and current item is group.
       
   144     if( index >= 0) {
       
   145 
       
   146         HbDataFormModelItem *groupModelItem = static_cast<HbDataFormModel*>(q->model())->invisibleRootItem();
       
   147         int childCount = groupModelItem->childCount();
       
   148 
       
   149         for( int i = 0; i < childCount; i++) {
       
   150             HbDataFormModelItem *child = groupModelItem->childAt(i);
       
   151             if( child->type() == HbDataFormModelItem::FormPageItem ) {
       
   152                 pageIndex ++;
       
   153                 // get the index of groupPage
       
   154                 if(pageIndex == index) {
       
   155                     modelIndex = static_cast<HbDataFormModel*>(q->model())->indexFromItem(child);
       
   156                     break;                  
       
   157                 }
       
   158             }        
       
   159         }
       
   160     }
       
   161     return modelIndex;
       
   162 }
   127 
   163 
   128 /*!
   164 /*!
   129     Creates a DataForm Page \a page in DataForm .
   165     Creates a DataForm Page \a page in DataForm .
   130     DataForm Page is an invisible DataItem which can be changed/selected using combo box.
   166     DataForm Page is an invisible DataItem which can be changed/selected using combo box.
   131     \sa addFormPage
   167     \sa addFormPage
   143     }
   179     }
   144 
   180 
   145     if(!mHeadingWidget->mPageCombo) {
   181     if(!mHeadingWidget->mPageCombo) {
   146         mHeadingWidget->createPrimitives();
   182         mHeadingWidget->createPrimitives();
   147         mHeadingWidget->mPageCombo = new HbComboBox(mHeadingWidget);
   183         mHeadingWidget->mPageCombo = new HbComboBox(mHeadingWidget);
   148 		HbStyle::setItemName(mHeadingWidget->mPageCombo,"dataForm_Combo");
   184         HbStyle::setItemName(mHeadingWidget->mPageCombo,"dataForm_Combo");
   149         QEvent polishEvent(QEvent::Polish);
   185         QEvent polishEvent(QEvent::Polish);
   150         QCoreApplication::sendEvent(mHeadingWidget->mPageCombo, &polishEvent);
   186         QCoreApplication::sendEvent(mHeadingWidget->mPageCombo, &polishEvent);
   151         // setFormHeading to the layout
   187         // setFormHeading to the layout
   152         if(mHeadingWidget->mPageCombo || !mHeadingWidget->mDescription.isEmpty() || 
   188         if(mHeadingWidget->mPageCombo || !mHeadingWidget->mDescription.isEmpty() || 
   153             !mHeadingWidget->mHeading.isEmpty()) {
   189             !mHeadingWidget->mHeading.isEmpty()) {
   179 void HbDataFormPrivate::removeFormPage(const QString& page) 
   215 void HbDataFormPrivate::removeFormPage(const QString& page) 
   180 {
   216 {
   181     Q_Q(HbDataForm);    
   217     Q_Q(HbDataForm);    
   182 
   218 
   183     if(mHeadingWidget && mHeadingWidget->mPageCombo) {
   219     if(mHeadingWidget && mHeadingWidget->mPageCombo) {
       
   220         // if we are emoving the current page
   184         if(mHeadingWidget->mPageCombo->currentText() == page){
   221         if(mHeadingWidget->mPageCombo->currentText() == page){
   185             mHeadingWidget->mPageCombo->setCurrentIndex(mHeadingWidget->mActivePage+1);
   222         // if we are removing the last page then set the current page as 0th
   186         }
   223             if( mHeadingWidget->mPageCombo->findText(page) + 1 == mHeadingWidget->mPageCombo->count()) {
   187     }
   224                 mHeadingWidget->mPageCombo->setCurrentIndex(0);
   188         QObject::disconnect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)),
   225             } else {// set next page as the curent page
       
   226                 mHeadingWidget->mPageCombo->setCurrentIndex(mHeadingWidget->mPageCombo->findText(page) + 1);
       
   227             }
       
   228         }
       
   229     }
       
   230     QObject::disconnect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)),
   189             q,SLOT(_q_page_changed(int)));
   231             q,SLOT(_q_page_changed(int)));
   190 
   232 
   191         mHeadingWidget->mPageCombo->removeItem(mHeadingWidget->mPageCombo->findText(page));
   233     mHeadingWidget->mPageCombo->removeItem(mHeadingWidget->mPageCombo->findText(page));
   192         mHeadingWidget->mActivePage = mHeadingWidget->mPageCombo->currentIndex();
   234     mHeadingWidget->mActivePage = mHeadingWidget->mPageCombo->currentIndex();
   193         
   235         
   194          QObject::connect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)),
   236     QObject::connect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)),
   195             q,SLOT(_q_page_changed(int)));
   237             q,SLOT(_q_page_changed(int)));
   196 
   238 
       
   239 
   197    mHeadingWidget->callPolish();    
   240    mHeadingWidget->callPolish();    
   198 }
   241 }
   199 
   242 
   200 void HbDataFormPrivate::_q_item_displayed(const QModelIndex &index)
   243 /*void HbDataFormPrivate::_q_item_displayed(const QModelIndex &index)
   201 {
   244 {
   202     Q_Q( HbDataForm);
   245     Q_Q( HbDataForm);
   203     emit q->itemShown(index);
   246     emit q->itemShown(index);
   204     emit q->activated(index);
   247     emit q->activated(index);
   205     qWarning("activated signal will not be emitted when items are created ," 
   248     qWarning("activated signal will not be emitted when items are created ," 
   206         "instead itemShown SIGNAL should be used");
   249         "instead itemShown SIGNAL should be used");
   207 }
   250 }*/
   208 
   251 
   209 void HbDataFormPrivate::makeConnection(QModelIndex index, HbWidget* widget)
   252 void HbDataFormPrivate::makeConnection(QModelIndex index, HbWidget* widget)
   210 {
   253 {
   211     Q_Q( HbDataForm);
   254     Q_Q( HbDataForm);
   212     if(!index.isValid()){
   255     if(!index.isValid()){