homescreenapp/stateplugins/hsapplibrarystateplugin/src/hssearchview.cpp
changeset 85 35368b604b28
parent 77 4b195f3bea29
child 96 458d8c8d9580
equal deleted inserted replaced
77:4b195f3bea29 85:35368b604b28
    14  * Description: hssearchview.cpp
    14  * Description: hssearchview.cpp
    15  *
    15  *
    16  */
    16  */
    17 
    17 
    18 #include <QApplication>
    18 #include <QApplication>
    19 #include <QInputContext>
       
    20 #include <QSortFilterProxyModel>
    19 #include <QSortFilterProxyModel>
    21 
       
    22 #include <HbGroupBox>
    20 #include <HbGroupBox>
    23 #include <HbLineEdit>
    21 #include <HbLineEdit>
    24 #include <HbListView>
    22 #include <HbListView>
    25 #include <HbAbstractViewItem>
    23 #include <HbAbstractViewItem>
    26 #include <HbView>
    24 #include <HbView>
    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