src/hbwidgets/dataform/hbdataform_p.cpp
changeset 6 c3690ec91ef8
parent 3 11d3954df52a
child 7 923ff622b8b9
equal deleted inserted replaced
5:627c4a0fd0e7 6:c3690ec91ef8
    25 
    25 
    26 #include "hbdataform_p.h"
    26 #include "hbdataform_p.h"
    27 #include <hbdataformviewitem.h>
    27 #include <hbdataformviewitem.h>
    28 #include "hbdataformviewitem_p.h"
    28 #include "hbdataformviewitem_p.h"
    29 #include "hbdataitemcontainer_p.h"
    29 #include "hbdataitemcontainer_p.h"
       
    30 #include "hbdatagroup_p_p.h"
    30 #include <hbcombobox.h>
    31 #include <hbcombobox.h>
    31 #include <hbapplication.h>
    32 #include <hbapplication.h>
    32 #include <hbdataformmodel.h>
    33 #include <hbdataformmodel.h>
    33 #include "hbdataformheadingwidget_p.h"
    34 #include "hbdataformheadingwidget_p.h"
    34 #include "hbtreemodeliterator_p.h"
    35 #include "hbtreemodeliterator_p.h"
    80 }
    81 }
    81 
    82 
    82 void  HbDataFormPrivate::_q_page_changed(int index)
    83 void  HbDataFormPrivate::_q_page_changed(int index)
    83 {
    84 {
    84     Q_Q(const HbDataForm);
    85     Q_Q(const HbDataForm);
    85     QStringListModel *model = static_cast<QStringListModel*>(
    86     QModelIndex childIndex = q->model()->index(index,0);
       
    87     HbDataFormModelItem::DataItemType itemType =
       
    88         static_cast<HbDataFormModelItem::DataItemType>(
       
    89         (childIndex.data(HbDataFormModelItem::ItemTypeRole)).toInt());
       
    90 
       
    91     if(mHeadingWidget->mPageCombo) {
       
    92         if(mHeadingWidget->mPageCombo->currentIndex() != index) {
       
    93             QObject::disconnect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)),
       
    94                 q,SLOT(_q_page_changed(int)));
       
    95             mHeadingWidget->mPageCombo->setCurrentIndex(index);
       
    96             QObject::connect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)),
       
    97                 q,SLOT(_q_page_changed(int)));
       
    98         }
       
    99     }
       
   100 
       
   101    /* QStringListModel *model = static_cast<QStringListModel*>(
    86         mHeadingWidget->mPageCombo->model());
   102         mHeadingWidget->mPageCombo->model());
    87     QModelIndex changedIndex = model->index(index, 0);
   103     QModelIndex changedIndex = model->index(index, 0);*/
    88     if(changedIndex.isValid()) {
   104     if(itemType == HbDataFormModelItem::FormPageItem) {
    89         if(changedIndex.row() != mHeadingWidget->mActivePage) {
   105         if(index != mHeadingWidget->mActivePage) {
    90             QModelIndex prevPageIndex = q->model()->index(mHeadingWidget->mActivePage,0);
   106             QModelIndex prevPageIndex = q->model()->index(mHeadingWidget->mActivePage,0);
    91             QModelIndex newPageIndex = q->model()->index(changedIndex.row(),0);
   107             QModelIndex newPageIndex = q->model()->index(index,0);
    92             if(prevPageIndex.isValid()) {
   108             if(prevPageIndex.isValid()) {
    93                 HbDataGroup *prevPage = static_cast<HbDataGroup *>(
   109                 HbDataGroup *prevPage = static_cast<HbDataGroup *>(
    94                                                q->itemByIndex(prevPageIndex));
   110                                                q->itemByIndex(prevPageIndex));
    95                 if(prevPage) {
   111                 if(prevPage) {
    96                     prevPage->setExpanded(false);
   112                     HbDataGroupPrivate::d_ptr(prevPage)->setExpanded(false);
    97                 }
   113                 }
    98             }
   114             }
    99             if(newPageIndex.isValid()) {
   115             if(newPageIndex.isValid()) {
   100                 HbDataGroup *newPage = static_cast<HbDataGroup *>(
   116                 HbDataGroup *newPage = static_cast<HbDataGroup *>(
   101                                                q->itemByIndex(newPageIndex));
   117                                                q->itemByIndex(newPageIndex));
   102                 if(newPage) {
   118                 if(newPage) {
   103                     newPage->setExpanded(true);
   119                     HbDataGroupPrivate::d_ptr(newPage)->setExpanded(true);
   104                 }
   120                 }
   105             }
   121             }
   106             mHeadingWidget->mActivePage = changedIndex.row();
   122             mHeadingWidget->mActivePage = index;
   107         }
   123         }
   108     }
   124     }
   109 }
   125 }
   110 
   126 
   111 
   127 
   164 {
   180 {
   165     Q_Q(HbDataForm);    
   181     Q_Q(HbDataForm);    
   166 
   182 
   167     if(mHeadingWidget && mHeadingWidget->mPageCombo) {
   183     if(mHeadingWidget && mHeadingWidget->mPageCombo) {
   168         if(mHeadingWidget->mPageCombo->currentText() == page){
   184         if(mHeadingWidget->mPageCombo->currentText() == page){
   169             if(mHeadingWidget->mActivePage != 0) {
   185             mHeadingWidget->mPageCombo->setCurrentIndex(mHeadingWidget->mActivePage+1);
   170                 mHeadingWidget->mPageCombo->setCurrentIndex(0);
       
   171             }
       
   172             else {
       
   173                 mHeadingWidget->mPageCombo->setCurrentIndex(mHeadingWidget->mActivePage+1);
       
   174             }
       
   175         }
   186         }
   176     }
   187     }
   177         QObject::disconnect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)),
   188         QObject::disconnect(mHeadingWidget->mPageCombo,SIGNAL(currentIndexChanged(int)),
   178             q,SLOT(_q_page_changed(int)));
   189             q,SLOT(_q_page_changed(int)));
   179 
   190 
   193     emit q->activated(index);
   204     emit q->activated(index);
   194     qWarning("activated signal will not be emitted when items are created ," 
   205     qWarning("activated signal will not be emitted when items are created ," 
   195         "instead itemShown SIGNAL should be used");
   206         "instead itemShown SIGNAL should be used");
   196 }
   207 }
   197 
   208 
   198 void HbDataFormPrivate::makeConnection(QModelIndex index)
   209 void HbDataFormPrivate::makeConnection(QModelIndex index, HbWidget* widget)
   199 {
   210 {
   200     Q_Q( HbDataForm);
   211     Q_Q( HbDataForm);
   201     if(!index.isValid()){
   212     if(!index.isValid()){
   202         return;
   213         return;
   203     }
   214     }
   204     if(q->model()) {
   215     if(q->model()) {
   205         HbDataFormModelItem *modelItem = static_cast<HbDataFormModel *>(q->model())->itemFromIndex(index);
   216         HbDataFormModelItem *modelItem = static_cast<HbDataFormModel *>(q->model())->itemFromIndex(index);
   206         if(modelItem){
   217         if(modelItem){
   207             QList<ItemSignal> signalList = mConnectionList.values(modelItem);
   218             QList<ItemSignal> signalList = mConnectionList.values(modelItem);
   208             if(signalList.count() > 0){
   219             if(signalList.count() > 0){
   209                 HbDataFormViewItem *viewItem = static_cast<HbDataFormViewItem*>(q->itemByIndex(index));
   220                 if(widget){
   210                 if(viewItem){
   221                     foreach(const ItemSignal& signal, signalList) {
   211                     HbWidget *contentWidget = HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget;
   222                         QObject *objct = signal.receiver;
   212                     if(contentWidget){
   223                         QString signalName = signal.signal;
   213                         foreach(ItemSignal signal, signalList) {
   224                         QString slot = signal.slot;
   214                             QObject *objct = signal.reciever;
   225                         // Make connection
   215                             QString signalName = signal.signal;
   226                         if(objct) { 
   216                             QString slot = signal.slot;
   227                             QObject::connect(widget, signalName.toAscii().data(), 
   217                             // Make connection
   228                                 objct,slot.toAscii().data());
   218                             if(objct) { 
       
   219                                 QObject::connect(contentWidget, signalName.toAscii().data(), 
       
   220                                     objct,slot.toAscii().data());
       
   221                             }
       
   222                             
       
   223                         }
   229                         }
       
   230                         
   224                     }
   231                     }
   225                 }
   232                 }
   226             }
   233             }
   227         }
   234         }
   228     }
   235     }
   229 }
   236 }
       
   237 
   230 
   238 
   231 void HbDataFormPrivate::removeConnection(HbDataFormModelItem * modelItem, 
   239 void HbDataFormPrivate::removeConnection(HbDataFormModelItem * modelItem, 
   232                                   QString signal, 
   240                                   QString signal, 
   233                                   QObject *reciever, 
   241                                   QObject *receiver, 
   234                                   QString slot)
   242                                   QString slot)
   235 {
   243 {
   236     Q_Q( HbDataForm);
   244     Q_Q( HbDataForm);
   237     if(q->model()) {
   245     if(q->model()) {
   238         if(modelItem){
   246         if(modelItem){
   246                     HbWidget *contentWidget = HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget;
   254                     HbWidget *contentWidget = HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget;
   247                     if(contentWidget){
   255                     if(contentWidget){
   248                         //foreach(ItemSignal signalItem, signalList) {
   256                         //foreach(ItemSignal signalItem, signalList) {
   249                         for(int i = 0; i < signalList.count() ;i++){
   257                         for(int i = 0; i < signalList.count() ;i++){
   250                             ItemSignal signalItem = signalList.at(i);
   258                             ItemSignal signalItem = signalList.at(i);
   251                             if(reciever == signalItem.reciever &&
   259                             if(receiver == signalItem.receiver &&
   252                             signal == signalItem.signal &&
   260                             signal == signalItem.signal &&
   253                             slot == signalItem.slot){
   261                             slot == signalItem.slot){
   254                             // disconnect
   262                             // disconnect
   255                                 QObject::disconnect(contentWidget, signal.toAscii().data(), 
   263                                 QObject::disconnect(contentWidget, signal.toAscii().data(), 
   256                                     reciever,slot.toAscii().data());
   264                                     receiver,slot.toAscii().data());
   257                                 signalList.removeAt(i);
   265                                 signalList.removeAt(i);
   258                                 for(int j = 0; j < signalList.count(); j++){
   266                                 for(int j = 0; j < signalList.count(); j++){
   259                                     mConnectionList.insertMulti(modelItem, signalList.at(j));
   267                                     mConnectionList.insertMulti(modelItem, signalList.at(j));
   260                                 }
   268                                 }
   261                                 break;
   269                                 break;
   268     }
   276     }
   269 }
   277 }
   270 
   278 
   271 void HbDataFormPrivate::connectNow(HbDataFormModelItem * modelItem, 
   279 void HbDataFormPrivate::connectNow(HbDataFormModelItem * modelItem, 
   272                                    QString signal, 
   280                                    QString signal, 
   273                                    QObject *reciever, 
   281                                    QObject *receiver, 
   274                                    QString slot)
   282                                    QString slot)
   275 {
   283 {
   276     Q_Q( HbDataForm);    
   284     Q_Q( HbDataForm);    
   277     
   285     
   278     if(q->model()) {
   286     if(q->model()) {
   281             HbDataFormViewItem *viewItem =static_cast<HbDataFormViewItem*>( q->itemByIndex(index) );
   289             HbDataFormViewItem *viewItem =static_cast<HbDataFormViewItem*>( q->itemByIndex(index) );
   282             if(viewItem){
   290             if(viewItem){
   283                 if(HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget) {
   291                 if(HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget) {
   284                     // Make connection
   292                     // Make connection
   285                         QObject::connect(HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget, signal.toAscii().data(), 
   293                         QObject::connect(HbDataFormViewItemPrivate::d_ptr(viewItem)->mContentWidget, signal.toAscii().data(), 
   286                             reciever,slot.toAscii().data());
   294                             receiver,slot.toAscii().data());
   287                 }
   295                 }
   288             }
   296             }
   289         }
   297         }
   290     }
   298     }
   291 }
   299 }
   307                     // disconnect signal and remove signal from list
   315                     // disconnect signal and remove signal from list
   308                     for(int i = 0;i<signalList.count();) {
   316                     for(int i = 0;i<signalList.count();) {
   309                         ItemSignal signalItem = signalList.takeAt(i);
   317                         ItemSignal signalItem = signalList.takeAt(i);
   310                             // Make connection
   318                             // Make connection
   311                         QObject::disconnect(contentWidget, signalItem.signal.toAscii().data(), 
   319                         QObject::disconnect(contentWidget, signalItem.signal.toAscii().data(), 
   312                                 signalItem.reciever,signalItem.slot.toAscii().data());
   320                                 signalItem.receiver,signalItem.slot.toAscii().data());
   313                             
   321                             
   314                         
   322                         
   315                     }
   323                     }
   316                 }
   324                 }
   317             }
   325             }
   334                     // disconnect signal and remove signal from list
   342                     // disconnect signal and remove signal from list
   335                     for(int i = 0;i<signalList.count(); ) {
   343                     for(int i = 0;i<signalList.count(); ) {
   336                         ItemSignal signalItem = signalList.takeAt(i);
   344                         ItemSignal signalItem = signalList.takeAt(i);
   337                             // Make connection
   345                             // Make connection
   338                         QObject::disconnect(contentWidget, signalItem.signal.toAscii().data(), 
   346                         QObject::disconnect(contentWidget, signalItem.signal.toAscii().data(), 
   339                                 signalItem.reciever,signalItem.slot.toAscii().data());
   347                                 signalItem.receiver,signalItem.slot.toAscii().data());
   340                     }
   348                     }
   341                 }
   349                 }
   342             }
   350             }
   343         }
   351         }
   344     }
   352     }