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