locationpickerservice/src/locationpickersearchview.cpp
branchRCL_3
changeset 36 1fc85118c3ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationpickerservice/src/locationpickersearchview.cpp	Tue Aug 31 15:09:25 2010 +0300
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: LocationPickerSearchView implementation
+*
+*/
+
+#include <HbListViewItem>
+#include <QStandardItemModel>
+#include <HbSearchPanel>
+#include <HbListView>
+#include <HbTextItem>
+#include <HbDocumentLoader>
+#include <QGraphicsLinearLayout>
+#include <HbMenu>
+#include <HbAction>
+
+#include "locationpickerproxymodel.h"
+#include "locationpickersearchview.h"
+#include "locationpickerdatamanager.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------
+// LocationPickerSearchView::LocationPickerSearchView()
+// ----------------------------------------------------
+LocationPickerSearchView::LocationPickerSearchView( HbDocumentLoader &aLoader )
+    :mProxyModel(NULL),
+    mModel(NULL),
+    mListView(NULL),
+    mSearchPanel(NULL),
+    mEmptyLabel(NULL),
+    mVerticalLayout(NULL),
+    mDocumentLoader(aLoader),
+	mLongPressMenu(NULL),
+	mSelectAction(NULL)
+{
+
+}
+// ----------------------------------------------------
+// LocationPickerSearchView::~LocationPickerSearchView()
+// ----------------------------------------------------
+LocationPickerSearchView::~LocationPickerSearchView()
+{
+    delete mProxyModel;
+    delete mEmptyLabel;
+}
+
+// ----------------------------------------------------
+// LocationPickerSearchView::init()
+// ----------------------------------------------------
+void LocationPickerSearchView::init( QStandardItemModel *aModel )
+{   
+    mModel = aModel;
+    //get listview from docml
+    mListView = qobject_cast<HbListView*>(
+            mDocumentLoader.findObject(QString("SearchListView")));
+    if(!mListView)
+    {
+        qFatal("Error Reading Docml");   
+    }
+    //get search panel from docml
+    mSearchPanel = qobject_cast<HbSearchPanel*>(
+            mDocumentLoader.findObject(QString("searchPanel")));
+    //conect to respective slots
+    connect(mListView, SIGNAL(activated(const QModelIndex &)), this, SLOT(handleActivated
+    (const QModelIndex &)));
+    connect(mListView,SIGNAL(longPressed(HbAbstractViewItem*, const QPointF &)),this,
+                SLOT(launchPopUpMenu(HbAbstractViewItem*, const QPointF &)));
+    connect(mSearchPanel, SIGNAL(exitClicked()),this, SLOT(handleExit()));
+    connect(mSearchPanel,SIGNAL(criteriaChanged(QString)),this,SLOT(doSearch(QString)));
+    
+    //Set graphics size for the list items.
+    HbListViewItem *hbListItem = new HbListViewItem();
+    hbListItem->setGraphicsSize(HbListViewItem::Thumbnail);
+    mListView->setItemPrototype( hbListItem );
+
+    // Create the proxy model.
+    mProxyModel = new LocationPickerProxyModel();
+    mProxyModel->setSourceModel(mModel);
+    mListView->setModel(mProxyModel);
+
+    // set filter properties
+    mProxyModel->setDynamicSortFilter(TRUE);
+    mProxyModel->setSortRole(Qt::DisplayRole);
+    mProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
+    // sort 
+    mProxyModel->sort(0, Qt::AscendingOrder);
+}
+
+// ----------------------------------------------------
+// LocationPickerSearchView::handleExit()
+// ----------------------------------------------------
+void LocationPickerSearchView::handleExit()
+{   
+    //emit signal to switch the current view
+    emit switchView();
+}
+
+// ----------------------------------------------------
+// LocationPickerSearchView::doSearch()
+// ----------------------------------------------------
+void LocationPickerSearchView::doSearch( QString aCriteria )
+{
+    // use the string to search
+    mProxyModel->filterParameterChanged(aCriteria);
+    mProxyModel->setFilterFixedString(aCriteria);
+    //if no entries presentdisplay empty text item
+    if (!mProxyModel->rowCount() )
+    {
+        if(!mEmptyLabel)
+        {    
+            QGraphicsWidget *widget = NULL;
+            widget = mDocumentLoader.findWidget(QString("container"));
+            mVerticalLayout = static_cast<QGraphicsLinearLayout*>(widget->layout());
+            if(!widget || !mVerticalLayout)
+            {
+                qFatal("Error Reading Docml"); 
+            }
+            mVerticalLayout->removeItem(mListView);
+            mListView->setVisible(false);
+            mEmptyLabel = new HbTextItem(hbTrId("txt_lint_list_no_results"));
+            mEmptyLabel->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+            mEmptyLabel->setFontSpec(HbFontSpec(HbFontSpec::Primary));
+            mEmptyLabel->setAlignment(Qt::AlignCenter);
+            mVerticalLayout->insertItem(0, mEmptyLabel);
+            mEmptyLabel->setVisible(true);
+        }
+    }
+    //else display the result
+    else if (mEmptyLabel)
+    {   
+        mVerticalLayout->removeItem(mEmptyLabel);
+        mEmptyLabel->setVisible(false);
+        delete mEmptyLabel;
+        mEmptyLabel=NULL;
+        mVerticalLayout->insertItem(0, mListView);
+        mListView->setVisible(true);
+    }
+}
+
+// ----------------------------------------------------
+// LocationPickerSearchView::handleActivated()
+// ----------------------------------------------------
+void LocationPickerSearchView::handleActivated( const QModelIndex &aIndex )
+{
+    QModelIndex index = mProxyModel->mapToSource(aIndex);
+    quint32 lm = 0;
+    getData( index, lm );
+    //emit item is selectedsignal
+    emit selectItem( lm );
+}
+
+// ----------------------------------------------------------------------------
+// LocationPickerSearchView::getData()
+// ----------------------------------------------------------------------------
+
+void LocationPickerSearchView::getData( QModelIndex aIndex, quint32& aValue )
+{
+    QStandardItem* item = mModel->item( aIndex.row(), aIndex.column() );
+    QVariant var = item->data( Qt::UserRole );
+    aValue = var.toUInt();
+}
+
+// -----------------------------------------------------------------------------
+// LocationPickerSearchView::launchPopUpMenu()
+// -----------------------------------------------------------------------------
+void LocationPickerSearchView::launchPopUpMenu(HbAbstractViewItem *aItem, const QPointF &aPoint)
+{
+    mLongPressMenu = new HbMenu();
+    mLongPressMenu->setTimeout(HbMenu::NoTimeout);
+    mSelectAction  = mLongPressMenu->addAction(hbTrId("txt_lint_list_select"));
+    mIndex = aItem->modelIndex();
+    connect(mSelectAction, SIGNAL(triggered()),this, SLOT(handleLongPress()));
+    mLongPressMenu->setPreferredPos(aPoint);
+    connect(mLongPressMenu,SIGNAL(aboutToClose ()),this,SLOT(deleteMenu()));
+    mLongPressMenu->open();
+}
+
+// -----------------------------------------------------------------------------
+// LocationPickerSearchView::handleLongPress()
+// -----------------------------------------------------------------------------
+void LocationPickerSearchView::handleLongPress()
+{
+    handleActivated(mIndex);
+}
+
+// -----------------------------------------------------------------------------
+// LocationPickerSearchView::deleteMenu()
+// -----------------------------------------------------------------------------
+void LocationPickerSearchView::deleteMenu()
+{
+    mLongPressMenu->deleteLater();
+    mLongPressMenu = NULL;
+    mSelectAction->deleteLater();
+    mSelectAction = NULL;
+}