homescreenapp/stateplugins/hsapplibrarystateplugin/src/hssearchview.cpp
author hgs
Mon, 18 Oct 2010 10:20:15 +0300
changeset 98 e6f74eb7f69f
parent 97 66b5fe3c07fd
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * Initial Contributors:
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
 *
hgs
parents:
diff changeset
    12
 * Contributors:
hgs
parents:
diff changeset
    13
 *
hgs
parents:
diff changeset
    14
 * Description: hssearchview.cpp
hgs
parents:
diff changeset
    15
 *
hgs
parents:
diff changeset
    16
 */
hgs
parents:
diff changeset
    17
71
hgs
parents: 69
diff changeset
    18
#include <QApplication>
69
hgs
parents:
diff changeset
    19
#include <HbGroupBox>
hgs
parents:
diff changeset
    20
#include <HbLineEdit>
hgs
parents:
diff changeset
    21
#include <HbListView>
hgs
parents:
diff changeset
    22
#include <HbAbstractViewItem>
hgs
parents:
diff changeset
    23
#include <HbView>
hgs
parents:
diff changeset
    24
#include <HbSearchPanel>
97
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
    25
#include <HbScrollBar>
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
    26
#include <HbIndexFeedback>
69
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
#include <caitemmodel.h>
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#include "hslistviewitem.h"
hgs
parents:
diff changeset
    31
#include "hsmainwindow.h"
hgs
parents:
diff changeset
    32
#include "hssearchview.h"
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
/*!
81
hgs
parents: 71
diff changeset
    35
 * \fn void activated(const QModelIndex &index)
hgs
parents: 71
diff changeset
    36
 * This signal is emitted when item is tapped.
hgs
parents: 71
diff changeset
    37
 * \param index of an item that was tapped.
hgs
parents: 71
diff changeset
    38
 */
hgs
parents: 71
diff changeset
    39
hgs
parents: 71
diff changeset
    40
 /*!
hgs
parents: 71
diff changeset
    41
 * \fn void longPressed(HbAbstractViewItem *item, const QPointF &coords)
hgs
parents: 71
diff changeset
    42
 * This singal is emitted when view is long pressed.
hgs
parents: 71
diff changeset
    43
 * \param item View item that was long pressed.
hgs
parents: 71
diff changeset
    44
 * \param coords View coordinates of the long press.
hgs
parents: 71
diff changeset
    45
 */
hgs
parents: 71
diff changeset
    46
 
hgs
parents: 71
diff changeset
    47
 /*!
hgs
parents: 71
diff changeset
    48
  * \fn void searchComplete(const QModelIndex &firstMatching)
hgs
parents: 71
diff changeset
    49
  * This signal is emitted when search action has been finished 
hgs
parents: 71
diff changeset
    50
  * and search view is about to quit.
hgs
parents: 71
diff changeset
    51
  * \param firstMatching of first item in search filtered view.
hgs
parents: 71
diff changeset
    52
  */
hgs
parents: 71
diff changeset
    53
    
hgs
parents: 71
diff changeset
    54
    
hgs
parents: 71
diff changeset
    55
/*!
69
hgs
parents:
diff changeset
    56
  Set up proxy model for search.
hgs
parents:
diff changeset
    57
  \param builder Retrieves UI widgets.
hgs
parents:
diff changeset
    58
  \param stateContext Identifies the state where search starts from.
hgs
parents:
diff changeset
    59
  \param mainWindow Enables switching between originating and search view.
hgs
parents:
diff changeset
    60
 */
hgs
parents:
diff changeset
    61
HsSearchView::HsSearchView(HsMenuViewBuilder &builder,
98
hgs
parents: 97
diff changeset
    62
        HsStateContext stateContext, HsMainWindow &mainWindow, 
hgs
parents: 97
diff changeset
    63
        HsOperationalContext operationalContext) :
90
hgs
parents: 81
diff changeset
    64
    mProxyModel(new HsSearchFilterProxyModel(this)), mSearchView(NULL),
69
hgs
parents:
diff changeset
    65
    mSearchListView(NULL), mSearchPanel(NULL), mStateContext(stateContext),
98
hgs
parents: 97
diff changeset
    66
    mOperationalContext(operationalContext), mBuilder(builder), 
hgs
parents: 97
diff changeset
    67
    mMainWindow(mainWindow), mView(NULL), mVkbHost(NULL), 
hgs
parents: 97
diff changeset
    68
    mSearchViewBuilder(), mEmptyResultText(true)
69
hgs
parents:
diff changeset
    69
{
hgs
parents:
diff changeset
    70
    mProxyModel->setFilterRole(CaItemModel::TextRole);
81
hgs
parents: 71
diff changeset
    71
    mProxyModel->setFilterKeyColumn(0);
69
hgs
parents:
diff changeset
    72
    mProxyModel->setSortRole(CaItemModel::TextRole);
81
hgs
parents: 71
diff changeset
    73
    mProxyModel->setDynamicSortFilter(true);
69
hgs
parents:
diff changeset
    74
}
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
/*!
hgs
parents:
diff changeset
    77
  Empty.
hgs
parents:
diff changeset
    78
 */
hgs
parents:
diff changeset
    79
HsSearchView::~HsSearchView()
hgs
parents:
diff changeset
    80
{
hgs
parents:
diff changeset
    81
}
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
/*!
hgs
parents:
diff changeset
    84
    Makes the UI to show or hide view search panel.
hgs
parents:
diff changeset
    85
    When search panel is shown the view toolbar and status pane
hgs
parents:
diff changeset
    86
    are hidden until search panel is hidden.
hgs
parents:
diff changeset
    87
    \param visible When true search panel will be shown,
hgs
parents:
diff changeset
    88
     otherwise it will be hidden.
hgs
parents:
diff changeset
    89
 */
hgs
parents:
diff changeset
    90
void HsSearchView::setSearchPanelVisible(bool visible)
hgs
parents:
diff changeset
    91
{
hgs
parents:
diff changeset
    92
    HSMENUTEST_FUNC_ENTRY("HsMenuView::setSearchPanelVisible");
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
    if (visible && !isActive()) {
hgs
parents:
diff changeset
    95
        searchBegins();
hgs
parents:
diff changeset
    96
        connectSearchItemViewsSignals();
hgs
parents:
diff changeset
    97
        connectSearchPanelSignals();
hgs
parents:
diff changeset
    98
    } else if (isActive()) {
hgs
parents:
diff changeset
    99
        disconnectSearchPanelSignals();
hgs
parents:
diff changeset
   100
        disconnectSearchItemViewsSignals();
hgs
parents:
diff changeset
   101
        searchFinished();
hgs
parents:
diff changeset
   102
    }
hgs
parents:
diff changeset
   103
    HSMENUTEST_FUNC_EXIT("HsMenuView::setSearchPanelVisible");
hgs
parents:
diff changeset
   104
}
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
/*!
hgs
parents:
diff changeset
   107
    \param view List view to operate on.
71
hgs
parents: 69
diff changeset
   108
    \return Index of F=first visible item of \a view if any
69
hgs
parents:
diff changeset
   109
    or default QModelIndex otherwise.
hgs
parents:
diff changeset
   110
 */
98
hgs
parents: 97
diff changeset
   111
QModelIndex HsSearchView::firstVisibleItemIndex(
hgs
parents: 97
diff changeset
   112
        const HbAbstractItemView *view) const
69
hgs
parents:
diff changeset
   113
{
71
hgs
parents: 69
diff changeset
   114
    const QList<HbAbstractViewItem *> array = view->visibleItems();
hgs
parents: 69
diff changeset
   115
    if (array.count()) {
hgs
parents: 69
diff changeset
   116
        return array[0]->modelIndex();
69
hgs
parents:
diff changeset
   117
    }
71
hgs
parents: 69
diff changeset
   118
    return QModelIndex();
69
hgs
parents:
diff changeset
   119
}
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
/*!
hgs
parents:
diff changeset
   122
 Displays search panel with view representing search results.
hgs
parents:
diff changeset
   123
 */
hgs
parents:
diff changeset
   124
void HsSearchView::searchBegins()
hgs
parents:
diff changeset
   125
{
hgs
parents:
diff changeset
   126
    HSMENUTEST_FUNC_ENTRY("HsSearchView::searchBegins");
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
    setOriginatingContext();
hgs
parents:
diff changeset
   129
98
hgs
parents: 97
diff changeset
   130
    mView = mBuilder.currentAbstractItemView();
hgs
parents: 97
diff changeset
   131
    mSearchViewInitialIndex = firstVisibleItemIndex(mView);
69
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
    mProxyModel->invalidate();
98
hgs
parents: 97
diff changeset
   134
    mProxyModel->setSourceModel(mView->model());
90
hgs
parents: 81
diff changeset
   135
    mCriteria = QString("");
hgs
parents: 81
diff changeset
   136
    mProxyModel->setFilterString(mCriteria);
69
hgs
parents:
diff changeset
   137
71
hgs
parents: 69
diff changeset
   138
    mSearchView = mSearchViewBuilder.searchView();
hgs
parents: 69
diff changeset
   139
    mSearchListView = mSearchViewBuilder.searchListView();
hgs
parents: 69
diff changeset
   140
    mSearchPanel = mSearchViewBuilder.searchPanel();
69
hgs
parents:
diff changeset
   141
    initSearchPanel(*mSearchPanel);
hgs
parents:
diff changeset
   142
    mVkbHost.reset(new HbShrinkingVkbHost(mSearchView));
hgs
parents:
diff changeset
   143
71
hgs
parents: 69
diff changeset
   144
    if (mBuilder.currentViewLabel()) {
hgs
parents: 69
diff changeset
   145
        mSearchViewBuilder.searchViewLabel()->setHeading(
hgs
parents: 69
diff changeset
   146
                mBuilder.currentViewLabel()->heading());
69
hgs
parents:
diff changeset
   147
    }
97
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   148
    
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   149
    if (mStateContext == HsCollectionContext){
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   150
    	mSearchViewBuilder.setSearchLabledContext();
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   151
    }
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   152
    
69
hgs
parents:
diff changeset
   153
    mSearchView->hideItems(Hb::AllItems);
90
hgs
parents: 81
diff changeset
   154
    HsListViewItem *item = new HsListViewItem();
hgs
parents: 81
diff changeset
   155
    item->setTextFormat(Qt::RichText);
hgs
parents: 81
diff changeset
   156
hgs
parents: 81
diff changeset
   157
    mSearchListView->setModel(mProxyModel, item);
97
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   158
    mSearchListView->verticalScrollBar()->setInteractive(true);
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   159
    if (mStateContext == HsAllAppsContext) {
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   160
        HbIndexFeedback *indexFeedback = new HbIndexFeedback(mSearchListView);
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   161
        indexFeedback->setIndexFeedbackPolicy(
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   162
                HbIndexFeedback::IndexFeedbackSingleCharacter);
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   163
        indexFeedback->setItemView(mSearchListView);
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   164
    }
98
hgs
parents: 97
diff changeset
   165
hgs
parents: 97
diff changeset
   166
    mSearchListView->scrollTo(
hgs
parents: 97
diff changeset
   167
            mProxyModel->mapFromSource(mSearchViewInitialIndex),
hgs
parents: 97
diff changeset
   168
            HbAbstractItemView::PositionAtTop);
97
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   169
    
69
hgs
parents:
diff changeset
   170
    mMainWindow.setCurrentView(mSearchView);
hgs
parents:
diff changeset
   171
81
hgs
parents: 71
diff changeset
   172
    openVkb();
hgs
parents: 71
diff changeset
   173
71
hgs
parents: 69
diff changeset
   174
    setNoResultsVisibility();
69
hgs
parents:
diff changeset
   175
    HSMENUTEST_FUNC_EXIT("HsSearchView::searchBegins");
hgs
parents:
diff changeset
   176
}
hgs
parents:
diff changeset
   177
71
hgs
parents: 69
diff changeset
   178
/*!
hgs
parents: 69
diff changeset
   179
 Handles button visibility.
hgs
parents: 69
diff changeset
   180
 \param visibility indicates whether show or not to show 'empty' label.
hgs
parents: 69
diff changeset
   181
 */
hgs
parents: 69
diff changeset
   182
void HsSearchView::setNoResultsVisibility()
hgs
parents: 69
diff changeset
   183
{
hgs
parents: 69
diff changeset
   184
    if (mProxyModel->rowCount() && mEmptyResultText) {
hgs
parents: 69
diff changeset
   185
        mSearchViewBuilder.loadViewListSection();
hgs
parents: 69
diff changeset
   186
        mEmptyResultText = false;
hgs
parents: 69
diff changeset
   187
    } else if (!mProxyModel->rowCount() && !mEmptyResultText) {
hgs
parents: 69
diff changeset
   188
        mSearchViewBuilder.loadViewEmptySection();
hgs
parents: 69
diff changeset
   189
        mEmptyResultText = true;
hgs
parents: 69
diff changeset
   190
    }
hgs
parents: 69
diff changeset
   191
}
69
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
/*
hgs
parents:
diff changeset
   194
 Connects \a activated and \a longPressed signals coming from search list
hgs
parents:
diff changeset
   195
 view to emit corresponding signal of this object with translated model index.
hgs
parents:
diff changeset
   196
*/
hgs
parents:
diff changeset
   197
void HsSearchView::connectSearchItemViewsSignals()
hgs
parents:
diff changeset
   198
{
81
hgs
parents: 71
diff changeset
   199
    connect(mSearchListView, SIGNAL(pressed(QModelIndex)),
hgs
parents: 71
diff changeset
   200
                this, SLOT(hideVkb()), Qt::UniqueConnection);
69
hgs
parents:
diff changeset
   201
    connect(mSearchListView, SIGNAL(activated(QModelIndex)),
81
hgs
parents: 71
diff changeset
   202
            this, SLOT(activatedProxySlot(QModelIndex)), Qt::UniqueConnection);
69
hgs
parents:
diff changeset
   203
    connect(mSearchListView, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
81
hgs
parents: 71
diff changeset
   204
            this, SLOT(longPressedProxySlot(HbAbstractViewItem *, QPointF)), 
hgs
parents: 71
diff changeset
   205
			    Qt::UniqueConnection);
hgs
parents: 71
diff changeset
   206
69
hgs
parents:
diff changeset
   207
}
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
/*!
hgs
parents:
diff changeset
   210
 Disconnects \a activated and \a longPressed signals coming from list
hgs
parents:
diff changeset
   211
 view from to emit corresponding signal
hgs
parents:
diff changeset
   212
 of this object with translated model index.
hgs
parents:
diff changeset
   213
*/
hgs
parents:
diff changeset
   214
void HsSearchView::disconnectSearchItemViewsSignals()
hgs
parents:
diff changeset
   215
{
81
hgs
parents: 71
diff changeset
   216
    disconnect(mSearchListView, SIGNAL(pressed(QModelIndex)),
hgs
parents: 71
diff changeset
   217
            this, SLOT(hideVkb()));
69
hgs
parents:
diff changeset
   218
    disconnect(mSearchListView, SIGNAL(activated(QModelIndex)),
hgs
parents:
diff changeset
   219
            this, SLOT(activatedProxySlot(QModelIndex)));
hgs
parents:
diff changeset
   220
    disconnect(mSearchListView,
hgs
parents:
diff changeset
   221
            SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
hgs
parents:
diff changeset
   222
            this, SLOT(longPressedProxySlot(HbAbstractViewItem *, QPointF)));
hgs
parents:
diff changeset
   223
}
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
/*!
hgs
parents:
diff changeset
   227
 Makes search panel invisible.
hgs
parents:
diff changeset
   228
 Equivalent to \a setSearchPanelVisible(false).
hgs
parents:
diff changeset
   229
 */
hgs
parents:
diff changeset
   230
void HsSearchView::hideSearchPanel()
hgs
parents:
diff changeset
   231
{
hgs
parents:
diff changeset
   232
    HSMENUTEST_FUNC_ENTRY("HsMenuView::hideSearchPanel");
hgs
parents:
diff changeset
   233
    setSearchPanelVisible(false);
hgs
parents:
diff changeset
   234
    HSMENUTEST_FUNC_EXIT("HsMenuView::hideSearchPanel");
hgs
parents:
diff changeset
   235
}
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
/*!
hgs
parents:
diff changeset
   238
 Connects signals \a exitClicked and \a criteriaChanged emitted
hgs
parents:
diff changeset
   239
 by search panel with handling slots of the object or its members.
hgs
parents:
diff changeset
   240
*/
hgs
parents:
diff changeset
   241
void HsSearchView::connectSearchPanelSignals()
hgs
parents:
diff changeset
   242
{
81
hgs
parents: 71
diff changeset
   243
    connect(mProxyModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)),
hgs
parents: 71
diff changeset
   244
            this, SLOT(setNoResultsVisibility()), Qt::UniqueConnection);
71
hgs
parents: 69
diff changeset
   245
    connect(mProxyModel, SIGNAL(rowsInserted(QModelIndex, int, int)),
hgs
parents: 69
diff changeset
   246
            this, SLOT(setNoResultsVisibility()));
hgs
parents: 69
diff changeset
   247
    connect(mProxyModel, SIGNAL(rowsRemoved(QModelIndex, int, int)),
hgs
parents: 69
diff changeset
   248
            this, SLOT(setNoResultsVisibility()));
69
hgs
parents:
diff changeset
   249
    connect(mSearchPanel, SIGNAL(exitClicked()),
hgs
parents:
diff changeset
   250
            this, SLOT(hideSearchPanel()));
hgs
parents:
diff changeset
   251
    connect(mSearchPanel, SIGNAL(criteriaChanged(QString)),
81
hgs
parents: 71
diff changeset
   252
            this, SLOT(findItem(QString)), Qt::UniqueConnection);
69
hgs
parents:
diff changeset
   253
}
hgs
parents:
diff changeset
   254
hgs
parents:
diff changeset
   255
/*!
hgs
parents:
diff changeset
   256
 Disconnects signals \a exitClicked and \a criteriaChanged emitted
hgs
parents:
diff changeset
   257
 by search panel from handling slots of the object or its members
hgs
parents:
diff changeset
   258
 Scrolls view to state before connections.
hgs
parents:
diff changeset
   259
*/
hgs
parents:
diff changeset
   260
void HsSearchView::disconnectSearchPanelSignals()
hgs
parents:
diff changeset
   261
{
71
hgs
parents: 69
diff changeset
   262
    mProxyModel->disconnect(this);
hgs
parents: 69
diff changeset
   263
    mSearchPanel->disconnect(this);
69
hgs
parents:
diff changeset
   264
}
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
/*!
hgs
parents:
diff changeset
   267
  Scrolls originating view to first item matching search criteria.
hgs
parents:
diff changeset
   268
 */
hgs
parents:
diff changeset
   269
void HsSearchView::searchFinished()
hgs
parents:
diff changeset
   270
{
hgs
parents:
diff changeset
   271
    HSMENUTEST_FUNC_ENTRY("HsSearchView::searchFinished");
hgs
parents:
diff changeset
   272
71
hgs
parents: 69
diff changeset
   273
    mIndexToScrollAfterSearchDone = firstVisibleItemIndex(mSearchListView);
69
hgs
parents:
diff changeset
   274
81
hgs
parents: 71
diff changeset
   275
    // emiting searchComplete must be done
hgs
parents: 71
diff changeset
   276
    // after this->isActive() returns false
hgs
parents: 71
diff changeset
   277
    mSearchListView = NULL;
hgs
parents: 71
diff changeset
   278
    mSearchPanel = NULL;
hgs
parents: 71
diff changeset
   279
    
hgs
parents: 71
diff changeset
   280
    emit searchComplete(mProxyModel->mapToSource(
hgs
parents: 71
diff changeset
   281
            mIndexToScrollAfterSearchDone));
69
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
    HbVkbHost::detachHost(mSearchView);
hgs
parents:
diff changeset
   284
    mVkbHost.reset(NULL);
81
hgs
parents: 71
diff changeset
   285
71
hgs
parents: 69
diff changeset
   286
    mProxyModel->setSourceModel(NULL);
69
hgs
parents:
diff changeset
   287
    HSMENUTEST_FUNC_EXIT("HsSearchView::searchFinished");
hgs
parents:
diff changeset
   288
}
hgs
parents:
diff changeset
   289
hgs
parents:
diff changeset
   290
/*!
hgs
parents:
diff changeset
   291
 Looks up for item and if found scrolls to it.
hgs
parents:
diff changeset
   292
 \param criteriaStr The item name to find.
hgs
parents:
diff changeset
   293
 */
hgs
parents:
diff changeset
   294
void HsSearchView::findItem(QString criteriaStr)
hgs
parents:
diff changeset
   295
{
hgs
parents:
diff changeset
   296
    qDebug() << "HsSearchView::findItem: " + criteriaStr;
hgs
parents:
diff changeset
   297
    HSMENUTEST_FUNC_ENTRY("HsSearchView::findItem");
hgs
parents:
diff changeset
   298
90
hgs
parents: 81
diff changeset
   299
    if (criteriaStr == mCriteria) 
hgs
parents: 81
diff changeset
   300
        return;
69
hgs
parents:
diff changeset
   301
90
hgs
parents: 81
diff changeset
   302
    mCriteria = criteriaStr;
hgs
parents: 81
diff changeset
   303
    mProxyModel->setFilterString(criteriaStr);
hgs
parents: 81
diff changeset
   304
    if(criteriaStr.isEmpty())
hgs
parents: 81
diff changeset
   305
        mSearchListView->scrollTo(
hgs
parents: 81
diff changeset
   306
                mProxyModel->index(0, 0), HbAbstractItemView::PositionAtTop);
69
hgs
parents:
diff changeset
   307
hgs
parents:
diff changeset
   308
    HSMENUTEST_FUNC_EXIT("HsSearchView::findItem");
hgs
parents:
diff changeset
   309
}
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
/*!
hgs
parents:
diff changeset
   312
 Slot used to translate activated signal from proxy model to normal model.
hgs
parents:
diff changeset
   313
 \param index Represents an item activated in search list view.
hgs
parents:
diff changeset
   314
 */
hgs
parents:
diff changeset
   315
void HsSearchView::activatedProxySlot(const QModelIndex &index)
hgs
parents:
diff changeset
   316
{
hgs
parents:
diff changeset
   317
    emit activated(mProxyModel->mapToSource(index));
hgs
parents:
diff changeset
   318
}
hgs
parents:
diff changeset
   319
hgs
parents:
diff changeset
   320
/*!
hgs
parents:
diff changeset
   321
 Slot used to forward 'long pressed' signal with item description transladed
hgs
parents:
diff changeset
   322
 from search view context to context of the view search was requested from.
hgs
parents:
diff changeset
   323
  \param item Long pressed item.
hgs
parents:
diff changeset
   324
  \param coords Coordinates of the long press action.
hgs
parents:
diff changeset
   325
 */
71
hgs
parents: 69
diff changeset
   326
void HsSearchView::longPressedProxySlot(
hgs
parents: 69
diff changeset
   327
        HbAbstractViewItem *item, const QPointF &coords)
69
hgs
parents:
diff changeset
   328
{
hgs
parents:
diff changeset
   329
    /*
hgs
parents:
diff changeset
   330
    this is a kind of hack, introduced for reasons:
hgs
parents:
diff changeset
   331
    item object should be reusable later, but orbit (or qt) prevents setting
hgs
parents:
diff changeset
   332
    its index model to previous state
hgs
parents:
diff changeset
   333
    */
71
hgs
parents: 69
diff changeset
   334
    mSearchViewLongPressedIndex = mProxyModel->mapToSource(
hgs
parents: 69
diff changeset
   335
            item->modelIndex());
69
hgs
parents:
diff changeset
   336
    QScopedPointer<HbAbstractViewItem> itemNew(item->createItem());
hgs
parents:
diff changeset
   337
    itemNew->setModelIndex(mSearchViewLongPressedIndex);
hgs
parents:
diff changeset
   338
    emit longPressed(itemNew.data(), coords);
hgs
parents:
diff changeset
   339
}
hgs
parents:
diff changeset
   340
hgs
parents:
diff changeset
   341
/*!
hgs
parents:
diff changeset
   342
  Sets up search panel.
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
 \param searchPanel Search panel to initialize.
hgs
parents:
diff changeset
   345
 */
hgs
parents:
diff changeset
   346
void HsSearchView::initSearchPanel(HbSearchPanel &searchPanel)
hgs
parents:
diff changeset
   347
{
hgs
parents:
diff changeset
   348
    HbLineEdit *const lineEdit(searchPanelLineEdit(searchPanel));
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
    lineEdit->setText("");
hgs
parents:
diff changeset
   351
    lineEdit->setFocus();
71
hgs
parents: 69
diff changeset
   352
    lineEdit->setInputMethodHints(
hgs
parents: 69
diff changeset
   353
            Qt::ImhNoPredictiveText | Qt::ImhNoAutoUppercase);
69
hgs
parents:
diff changeset
   354
}
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
/*!
hgs
parents:
diff changeset
   357
 \param searchPanel Search panel to operate on.
hgs
parents:
diff changeset
   358
 \return Line edit of the searchPanel on success, NULL otherwise.
hgs
parents:
diff changeset
   359
 */
hgs
parents:
diff changeset
   360
HbLineEdit *HsSearchView::searchPanelLineEdit(
hgs
parents:
diff changeset
   361
        HbSearchPanel &searchPanel) const
hgs
parents:
diff changeset
   362
{
hgs
parents:
diff changeset
   363
    HSMENUTEST_FUNC_ENTRY("HsSearchView::searchPanelLineEdit");
hgs
parents:
diff changeset
   364
hgs
parents:
diff changeset
   365
    HbLineEdit *result(0);
hgs
parents:
diff changeset
   366
    foreach(QGraphicsItem *obj, searchPanel.childItems()) {
hgs
parents:
diff changeset
   367
        QGraphicsWidget *const widget = static_cast<QGraphicsWidget *>(obj);
hgs
parents:
diff changeset
   368
        if (widget != NULL) {
hgs
parents:
diff changeset
   369
            HbLineEdit *const lineEdit = qobject_cast<HbLineEdit *>(widget);
hgs
parents:
diff changeset
   370
            if (lineEdit != NULL) {
hgs
parents:
diff changeset
   371
                result = lineEdit;
hgs
parents:
diff changeset
   372
                break;
hgs
parents:
diff changeset
   373
            }
hgs
parents:
diff changeset
   374
        }
hgs
parents:
diff changeset
   375
    }
hgs
parents:
diff changeset
   376
    HSMENUTEST_FUNC_EXIT("HsSearchView::searchPanelLineEdit");
hgs
parents:
diff changeset
   377
hgs
parents:
diff changeset
   378
    return result;
hgs
parents:
diff changeset
   379
}
hgs
parents:
diff changeset
   380
hgs
parents:
diff changeset
   381
/*!
hgs
parents:
diff changeset
   382
  Sets the builder context to the one determined by \a mStateContext and
hgs
parents:
diff changeset
   383
  \a HsItemViewContext.
hgs
parents:
diff changeset
   384
 */
hgs
parents:
diff changeset
   385
void HsSearchView::setOriginatingContext()
hgs
parents:
diff changeset
   386
{
hgs
parents:
diff changeset
   387
    mBuilder.setStateContext(mStateContext);
98
hgs
parents: 97
diff changeset
   388
    mBuilder.setOperationalContext(mOperationalContext);
69
hgs
parents:
diff changeset
   389
}
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
/*!
81
hgs
parents: 71
diff changeset
   392
  \retval true when search view is actually responsible for view management, 
hgs
parents: 71
diff changeset
   393
  \a false otherwise.
69
hgs
parents:
diff changeset
   394
 */
hgs
parents:
diff changeset
   395
bool HsSearchView::isActive() const
hgs
parents:
diff changeset
   396
{
hgs
parents:
diff changeset
   397
    return mSearchListView != NULL;
hgs
parents:
diff changeset
   398
}
hgs
parents:
diff changeset
   399
81
hgs
parents: 71
diff changeset
   400
/*!
98
hgs
parents: 97
diff changeset
   401
  Sets the operation context to the mOperationalContext.
hgs
parents: 97
diff changeset
   402
  \param operationalContext value of operational context to be set.  
hgs
parents: 97
diff changeset
   403
 */
hgs
parents: 97
diff changeset
   404
void HsSearchView::setOperationalContext(
hgs
parents: 97
diff changeset
   405
        HsOperationalContext operationalContext)
hgs
parents: 97
diff changeset
   406
{
hgs
parents: 97
diff changeset
   407
    mOperationalContext = operationalContext;
hgs
parents: 97
diff changeset
   408
}
hgs
parents: 97
diff changeset
   409
hgs
parents: 97
diff changeset
   410
/*!
81
hgs
parents: 71
diff changeset
   411
  Slot to close virtual keyboard.
hgs
parents: 71
diff changeset
   412
 */
hgs
parents: 71
diff changeset
   413
void HsSearchView::hideVkb()
hgs
parents: 71
diff changeset
   414
{
hgs
parents: 71
diff changeset
   415
    sendEvent(QEvent::CloseSoftwareInputPanel);
hgs
parents: 71
diff changeset
   416
}
hgs
parents: 71
diff changeset
   417
hgs
parents: 71
diff changeset
   418
/*!
hgs
parents: 71
diff changeset
   419
 Makes Vkb open provided there is an editor visible in the graphics scene.
hgs
parents: 71
diff changeset
   420
 */
hgs
parents: 71
diff changeset
   421
void HsSearchView::openVkb()
hgs
parents: 71
diff changeset
   422
{
hgs
parents: 71
diff changeset
   423
    sendEvent(QEvent::RequestSoftwareInputPanel);
hgs
parents: 71
diff changeset
   424
}
hgs
parents: 71
diff changeset
   425
hgs
parents: 71
diff changeset
   426
/*!
hgs
parents: 71
diff changeset
   427
  Sends QEvent.
hgs
parents: 71
diff changeset
   428
  \param eventType Identifies event to be sent.
hgs
parents: 71
diff changeset
   429
 */
hgs
parents: 71
diff changeset
   430
void HsSearchView::sendEvent(const QEvent::Type eventType)
hgs
parents: 71
diff changeset
   431
{
hgs
parents: 71
diff changeset
   432
    QInputContext *const ic = qApp->inputContext();
hgs
parents: 71
diff changeset
   433
    if (ic != NULL) {
hgs
parents: 71
diff changeset
   434
        QScopedPointer<QEvent> event(
hgs
parents: 71
diff changeset
   435
            new QEvent(eventType));
hgs
parents: 71
diff changeset
   436
hgs
parents: 71
diff changeset
   437
        ic->filterEvent(event.data());
hgs
parents: 71
diff changeset
   438
    }
hgs
parents: 71
diff changeset
   439
hgs
parents: 71
diff changeset
   440
}
hgs
parents: 71
diff changeset
   441
97
66b5fe3c07fd 201039_01
hgs
parents: 90
diff changeset
   442