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()){ |