31 #include "hslistviewitem.h" |
29 #include "hslistviewitem.h" |
32 #include "hsmainwindow.h" |
30 #include "hsmainwindow.h" |
33 #include "hssearchview.h" |
31 #include "hssearchview.h" |
34 |
32 |
35 /*! |
33 /*! |
|
34 * \fn void activated(const QModelIndex &index) |
|
35 * This signal is emitted when item is tapped. |
|
36 * \param index of an item that was tapped. |
|
37 */ |
|
38 |
|
39 /*! |
|
40 * \fn void longPressed(HbAbstractViewItem *item, const QPointF &coords) |
|
41 * This singal is emitted when view is long pressed. |
|
42 * \param item View item that was long pressed. |
|
43 * \param coords View coordinates of the long press. |
|
44 */ |
|
45 |
|
46 /*! |
|
47 * \fn void searchComplete(const QModelIndex &firstMatching) |
|
48 * This signal is emitted when search action has been finished |
|
49 * and search view is about to quit. |
|
50 * \param firstMatching of first item in search filtered view. |
|
51 */ |
|
52 |
|
53 |
|
54 /*! |
36 Set up proxy model for search. |
55 Set up proxy model for search. |
37 \param builder Retrieves UI widgets. |
56 \param builder Retrieves UI widgets. |
38 \param stateContext Identifies the state where search starts from. |
57 \param stateContext Identifies the state where search starts from. |
39 \param mainWindow Enables switching between originating and search view. |
58 \param mainWindow Enables switching between originating and search view. |
40 */ |
59 */ |
44 mSearchListView(NULL), mSearchPanel(NULL), mStateContext(stateContext), |
63 mSearchListView(NULL), mSearchPanel(NULL), mStateContext(stateContext), |
45 mBuilder(builder), mMainWindow(mainWindow), mListView(NULL), |
64 mBuilder(builder), mMainWindow(mainWindow), mListView(NULL), |
46 mVkbHost(NULL), mSearchViewBuilder(), mEmptyResultText(true) |
65 mVkbHost(NULL), mSearchViewBuilder(), mEmptyResultText(true) |
47 { |
66 { |
48 mProxyModel->setFilterRole(CaItemModel::TextRole); |
67 mProxyModel->setFilterRole(CaItemModel::TextRole); |
49 mProxyModel->setFilterKeyColumn(1); |
68 mProxyModel->setFilterKeyColumn(0); |
50 mProxyModel->setSortRole(CaItemModel::TextRole); |
69 mProxyModel->setSortRole(CaItemModel::TextRole); |
|
70 mProxyModel->setDynamicSortFilter(true); |
51 } |
71 } |
52 |
72 |
53 /*! |
73 /*! |
54 Empty. |
74 Empty. |
55 */ |
75 */ |
126 mSearchView->hideItems(Hb::AllItems); |
146 mSearchView->hideItems(Hb::AllItems); |
127 mSearchListView->setModel(mProxyModel, new HsListViewItem()); |
147 mSearchListView->setModel(mProxyModel, new HsListViewItem()); |
128 |
148 |
129 mMainWindow.setCurrentView(mSearchView); |
149 mMainWindow.setCurrentView(mSearchView); |
130 |
150 |
|
151 openVkb(); |
|
152 |
131 mSearchListView->scrollTo( |
153 mSearchListView->scrollTo( |
132 mProxyModel->mapFromSource(mSearchViewInitialIndex), |
154 mProxyModel->mapFromSource(mSearchViewInitialIndex), |
133 HbAbstractItemView::PositionAtTop); |
155 HbAbstractItemView::PositionAtTop); |
134 |
156 |
135 setNoResultsVisibility(); |
157 setNoResultsVisibility(); |
155 Connects \a activated and \a longPressed signals coming from search list |
177 Connects \a activated and \a longPressed signals coming from search list |
156 view to emit corresponding signal of this object with translated model index. |
178 view to emit corresponding signal of this object with translated model index. |
157 */ |
179 */ |
158 void HsSearchView::connectSearchItemViewsSignals() |
180 void HsSearchView::connectSearchItemViewsSignals() |
159 { |
181 { |
|
182 connect(mSearchListView, SIGNAL(pressed(QModelIndex)), |
|
183 this, SLOT(hideVkb()), Qt::UniqueConnection); |
160 connect(mSearchListView, SIGNAL(activated(QModelIndex)), |
184 connect(mSearchListView, SIGNAL(activated(QModelIndex)), |
161 this, SLOT(activatedProxySlot(QModelIndex))); |
185 this, SLOT(activatedProxySlot(QModelIndex)), Qt::UniqueConnection); |
162 connect(mSearchListView, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), |
186 connect(mSearchListView, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), |
163 this, SLOT(longPressedProxySlot(HbAbstractViewItem *, QPointF))); |
187 this, SLOT(longPressedProxySlot(HbAbstractViewItem *, QPointF)), |
|
188 Qt::UniqueConnection); |
|
189 |
164 } |
190 } |
165 |
191 |
166 /*! |
192 /*! |
167 Disconnects \a activated and \a longPressed signals coming from list |
193 Disconnects \a activated and \a longPressed signals coming from list |
168 view from to emit corresponding signal |
194 view from to emit corresponding signal |
169 of this object with translated model index. |
195 of this object with translated model index. |
170 */ |
196 */ |
171 void HsSearchView::disconnectSearchItemViewsSignals() |
197 void HsSearchView::disconnectSearchItemViewsSignals() |
172 { |
198 { |
|
199 disconnect(mSearchListView, SIGNAL(pressed(QModelIndex)), |
|
200 this, SLOT(hideVkb())); |
173 disconnect(mSearchListView, SIGNAL(activated(QModelIndex)), |
201 disconnect(mSearchListView, SIGNAL(activated(QModelIndex)), |
174 this, SLOT(activatedProxySlot(QModelIndex))); |
202 this, SLOT(activatedProxySlot(QModelIndex))); |
175 disconnect(mSearchListView, |
203 disconnect(mSearchListView, |
176 SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), |
204 SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), |
177 this, SLOT(longPressedProxySlot(HbAbstractViewItem *, QPointF))); |
205 this, SLOT(longPressedProxySlot(HbAbstractViewItem *, QPointF))); |
193 Connects signals \a exitClicked and \a criteriaChanged emitted |
221 Connects signals \a exitClicked and \a criteriaChanged emitted |
194 by search panel with handling slots of the object or its members. |
222 by search panel with handling slots of the object or its members. |
195 */ |
223 */ |
196 void HsSearchView::connectSearchPanelSignals() |
224 void HsSearchView::connectSearchPanelSignals() |
197 { |
225 { |
|
226 connect(mProxyModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), |
|
227 this, SLOT(setNoResultsVisibility()), Qt::UniqueConnection); |
198 connect(mProxyModel, SIGNAL(rowsInserted(QModelIndex, int, int)), |
228 connect(mProxyModel, SIGNAL(rowsInserted(QModelIndex, int, int)), |
199 this, SLOT(setNoResultsVisibility())); |
229 this, SLOT(setNoResultsVisibility())); |
200 connect(mProxyModel, SIGNAL(rowsRemoved(QModelIndex, int, int)), |
230 connect(mProxyModel, SIGNAL(rowsRemoved(QModelIndex, int, int)), |
201 this, SLOT(setNoResultsVisibility())); |
231 this, SLOT(setNoResultsVisibility())); |
202 connect(mSearchPanel, SIGNAL(exitClicked()), |
232 connect(mSearchPanel, SIGNAL(exitClicked()), |
203 this, SLOT(hideSearchPanel())); |
233 this, SLOT(hideSearchPanel())); |
204 connect(mSearchPanel, SIGNAL(criteriaChanged(QString)), |
234 connect(mSearchPanel, SIGNAL(criteriaChanged(QString)), |
205 this, SLOT(findItem(QString))); |
235 this, SLOT(findItem(QString)), Qt::UniqueConnection); |
206 } |
236 } |
207 |
237 |
208 /*! |
238 /*! |
209 Disconnects signals \a exitClicked and \a criteriaChanged emitted |
239 Disconnects signals \a exitClicked and \a criteriaChanged emitted |
210 by search panel from handling slots of the object or its members |
240 by search panel from handling slots of the object or its members |
223 { |
253 { |
224 HSMENUTEST_FUNC_ENTRY("HsSearchView::searchFinished"); |
254 HSMENUTEST_FUNC_ENTRY("HsSearchView::searchFinished"); |
225 |
255 |
226 mIndexToScrollAfterSearchDone = firstVisibleItemIndex(mSearchListView); |
256 mIndexToScrollAfterSearchDone = firstVisibleItemIndex(mSearchListView); |
227 |
257 |
228 setOriginatingContext(); |
258 // emiting searchComplete must be done |
229 |
259 // after this->isActive() returns false |
230 mMainWindow.setCurrentView(mBuilder.currentView()); |
260 mSearchListView = NULL; |
231 |
261 mSearchPanel = NULL; |
232 mListView->scrollTo(mProxyModel->mapToSource( |
262 |
233 mIndexToScrollAfterSearchDone), |
263 emit searchComplete(mProxyModel->mapToSource( |
234 HbAbstractItemView::PositionAtTop); |
264 mIndexToScrollAfterSearchDone)); |
235 |
265 |
236 HbVkbHost::detachHost(mSearchView); |
266 HbVkbHost::detachHost(mSearchView); |
237 mVkbHost.reset(NULL); |
267 mVkbHost.reset(NULL); |
238 mSearchListView = NULL; |
268 |
239 mSearchPanel = NULL; |
|
240 mProxyModel->setSourceModel(NULL); |
269 mProxyModel->setSourceModel(NULL); |
241 HSMENUTEST_FUNC_EXIT("HsSearchView::searchFinished"); |
270 HSMENUTEST_FUNC_EXIT("HsSearchView::searchFinished"); |
242 } |
271 } |
243 |
272 |
244 /*! |
273 /*! |
252 |
281 |
253 mProxyModel->setFilterRegExp( |
282 mProxyModel->setFilterRegExp( |
254 QRegExp("(^|\\b)" + criteriaStr, Qt::CaseInsensitive)); |
283 QRegExp("(^|\\b)" + criteriaStr, Qt::CaseInsensitive)); |
255 |
284 |
256 mSearchListView->scrollTo( |
285 mSearchListView->scrollTo( |
257 mProxyModel->index(0,0), HbAbstractItemView::PositionAtTop); |
286 mProxyModel->index(0, 0), HbAbstractItemView::PositionAtTop); |
258 |
287 |
259 HSMENUTEST_FUNC_EXIT("HsSearchView::findItem"); |
288 HSMENUTEST_FUNC_EXIT("HsSearchView::findItem"); |
260 } |
289 } |
261 |
290 |
262 /*! |
291 /*! |
338 mBuilder.setStateContext(mStateContext); |
367 mBuilder.setStateContext(mStateContext); |
339 mBuilder.setOperationalContext(HsItemViewContext); |
368 mBuilder.setOperationalContext(HsItemViewContext); |
340 } |
369 } |
341 |
370 |
342 /*! |
371 /*! |
343 \retval true when search view is already invoked, \a false otherwise. |
372 \retval true when search view is actually responsible for view management, |
|
373 \a false otherwise. |
344 */ |
374 */ |
345 bool HsSearchView::isActive() const |
375 bool HsSearchView::isActive() const |
346 { |
376 { |
347 return mSearchListView != NULL; |
377 return mSearchListView != NULL; |
348 } |
378 } |
349 |
379 |
|
380 /*! |
|
381 Slot to close virtual keyboard. |
|
382 */ |
|
383 void HsSearchView::hideVkb() |
|
384 { |
|
385 sendEvent(QEvent::CloseSoftwareInputPanel); |
|
386 } |
|
387 |
|
388 /*! |
|
389 Makes Vkb open provided there is an editor visible in the graphics scene. |
|
390 */ |
|
391 void HsSearchView::openVkb() |
|
392 { |
|
393 sendEvent(QEvent::RequestSoftwareInputPanel); |
|
394 } |
|
395 |
|
396 /*! |
|
397 Sends QEvent. |
|
398 \param eventType Identifies event to be sent. |
|
399 */ |
|
400 void HsSearchView::sendEvent(const QEvent::Type eventType) |
|
401 { |
|
402 QInputContext *const ic = qApp->inputContext(); |
|
403 if (ic != NULL) { |
|
404 QScopedPointer<QEvent> event( |
|
405 new QEvent(eventType)); |
|
406 |
|
407 ic->filterEvent(event.data()); |
|
408 } |
|
409 |
|
410 } |
|
411 |