filemanager/src/filemanager/src/fmfindwidget.cpp
changeset 14 1957042d8c7e
child 16 ada7962b4308
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/src/filemanager/src/fmfindwidget.cpp	Fri Apr 16 14:53:38 2010 +0300
@@ -0,0 +1,200 @@
+/*  
+* Copyright (c) 2009 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:
+*     Zhiqiang Yang <zhiqiang.yang@nokia.com>
+* 
+* Description:
+*     The source file of the file find widget of file manager
+*
+*/
+
+#include "fmfindwidget.h"
+#include "fmfindresultmodel.h"
+#include "fmviewmanager.h"
+#include "fmoperationservice.h"
+
+#include <QGraphicsLinearLayout>
+#include <QFileInfo>
+
+#include <hblistview.h>
+#include <hbsearchpanel.h>
+#include <hblabel.h>
+#include <hbwidget.h>
+
+FmFindWidget::FmFindWidget( QGraphicsItem *parent )
+    : HbWidget( parent )
+{
+    init();
+}
+
+FmFindWidget::~FmFindWidget()
+{
+}
+
+void FmFindWidget::itemActivated(const QModelIndex &index)
+{   
+    FmOperationService *operationService = FmViewManager::viewManager()->operationService();
+    if( !operationService ) {
+        return;
+    }
+
+    QFileInfo fileInfo = mModel->fileInfo( index );
+    if ( fileInfo.isFile() ) {
+        operationService->syncLaunchFileOpen( fileInfo.filePath() );
+    }else if( fileInfo.isDir() ) {
+        emit activated( fileInfo.filePath() );
+    }
+}
+
+void FmFindWidget::find( const QString &keyword, const QString &path )
+{
+    mModel->setFindPath( path );
+    
+    QRegExp regExp( '*' + keyword + '*' );
+    regExp.setPatternSyntax( QRegExp::Wildcard );
+    mModel->setPattern( regExp );
+
+    mModel->find();
+}
+
+void FmFindWidget::stopFind()
+{
+    mModel->stop();
+}
+
+void FmFindWidget::on_resultModel_finished()
+{
+    emit finished();
+}
+
+void FmFindWidget::on_resultModel_modelCountChanged( int count )
+{
+    if( count > 0 ) {
+        activateContentWidget( ResultListView );
+    } else {
+        activateContentWidget( EmptyTipWidget );
+    }
+}
+
+void FmFindWidget::activateContentWidget( ContentWidgetType contentWidgetType )
+{
+    switch( contentWidgetType )
+    {
+    case EmptyTipWidget:
+        {
+        if( mLayout->count() > 0 ) {
+            if( mLayout->itemAt( 0 ) == mListView ) {
+                mLayout->removeItem( mListView );
+                mLayout->addItem( mEmptyTipWidget );
+            } 
+        } else {
+            mLayout->addItem( mEmptyTipWidget );
+        }
+        mListView->hide();
+        mEmptyTipWidget->show();
+        deActiveSearchPanel();
+        }
+        break;
+    case ResultListView:
+        {
+        if( mLayout->count() > 0 ) {
+            if( mLayout->itemAt( 0 ) == mEmptyTipWidget ) {
+                mLayout->removeItem( mEmptyTipWidget );
+                mLayout->addItem( mListView );
+            } 
+        } else {
+            mLayout->addItem( mListView );
+        }
+        mEmptyTipWidget->hide();
+        mListView->show();
+        activeSearchPanel();
+        }
+        break;
+    }
+}
+
+void FmFindWidget::init()
+{
+    mLayout = new QGraphicsLinearLayout( this );
+    mLayout->setOrientation( Qt::Vertical );
+
+    mModel = new FmFindResultModel( this );
+    mModel->setObjectName( "resultModel" );
+
+    connect( mModel, SIGNAL(finished()), this, SLOT( on_resultModel_finished()) );
+
+    connect( mModel, SIGNAL( modelCountChanged( int )),
+        this, SLOT( on_resultModel_modelCountChanged( int )) );
+
+    mListView = new HbListView( this );
+    mListView->setModel( mModel );
+
+    mEmptyTipWidget = new HbWidget( this );
+    QGraphicsLinearLayout *emptyTipLayout = new QGraphicsLinearLayout( mEmptyTipWidget );
+    HbLabel *emptyTipLable = new HbLabel( tr( "No found files or folders" ), mEmptyTipWidget );
+    emptyTipLayout->addItem( emptyTipLable );
+ 
+    initSearchPanel();
+    activateContentWidget( EmptyTipWidget );
+    
+    setLayout( mLayout );
+
+    connect( mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemActivated(QModelIndex)));
+}
+
+void FmFindWidget::initSearchPanel()
+{
+    mSearchPanel = new HbSearchPanel( this );
+    mSearchPanel->setObjectName( "searchPanel" );
+//    mSearchPanel->setSearchOptionsEnabled( true );
+    mSearchPanel->setProgressive( false );
+    mSearchPanel->hide();
+    
+    connect( mSearchPanel, SIGNAL( criteriaChanged( const QString & ) ),
+        this, SLOT( on_searchPanel_criteriaChanged( const QString & ) ) );
+    
+    connect( mSearchPanel, SIGNAL( exitClicked() ),
+        this, SLOT( on_searchPanel_exitClicked() ) );
+}
+
+void FmFindWidget::sortFiles( FmFindResultModel::SortFlag sortFlag )
+{
+    mModel->sort( sortFlag );
+}
+
+void FmFindWidget::activeSearchPanel()
+{
+    mLayout->addItem( mSearchPanel );
+    mSearchPanel->show();
+}
+
+void FmFindWidget::on_searchPanel_criteriaChanged( const QString &criteria )
+{
+    mFindTargetPath.clear();
+    emit startSearch( mFindTargetPath, criteria );
+}
+
+void FmFindWidget::on_searchPanel_exitClicked()
+{
+    mSearchPanel->hide();
+    mLayout->removeItem( mSearchPanel );
+}
+
+void FmFindWidget::deActiveSearchPanel()
+{
+    mSearchPanel->hide();
+    mLayout->removeItem( mSearchPanel );
+
+}
+
+
+