filebrowser/ui/src/searchview.cpp
changeset 17 4f2773374eff
child 19 4b22a598b890
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filebrowser/ui/src/searchview.cpp	Fri May 14 15:53:02 2010 +0300
@@ -0,0 +1,235 @@
+/*
+* 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:
+*
+*/
+
+#include "searchview.h"
+#include "enginewrapper.h"
+
+#include <HbView>
+#include <HbMainWindow>
+
+#include <HbDataForm>
+#include <HbDataFormModel>
+#include <HbDataFormModelItem>
+#include <HbAction>
+#include <HbPushButton>
+#include <HbListWidget>
+#include <HbListWidgetItem>
+#include <HbDialog>
+#include <HbMenu>
+
+#include <QtGui>
+#include <QDir>
+#include <QFileInfo>
+#include <QProgressBar>
+
+
+const QStringList RECURSEMODES = (QStringList() << "Non-recursive" << "Recursive");
+
+SearchView::SearchView(HbView &mainView, HbMainWindow &mainWindow, EngineWrapper &engineWrapper)
+: mMainWindow(mainWindow),
+  mMainView(mainView),
+  mEngineWrapper(engineWrapper),
+  mAttributes(),
+  mResults(),
+  mForm(0),
+  mSearchFileNameItem(0),
+  mWildCardItem(0),
+  mHasString(0),
+  mRecurse(0),
+  mMinSize(0),
+  mMaxSize(0),
+  mMinDate(0),
+  mMaxDate(0),
+  mPath()
+{
+}
+
+SearchView::~SearchView() 
+{
+}
+
+void SearchView::open(const QString &path)
+{   
+    // Remove main view from main window
+    mMainWindow.removeView(&mMainView);
+    mMainWindow.addView(this);
+    // Set title and add this view to main window
+    setTitle("Search");
+	
+    mForm = new HbDataForm(/*HbFormView::ModeEdit,*/ this);
+    HbDataFormModel *model = new HbDataFormModel();
+    mPath = path;
+    mSearchFileNameItem = new HbDataFormModelItem(HbDataFormModelItem::TextItem);
+    mSearchFileNameItem->setLabel("Search dir: ");
+
+    mWildCardItem = new HbDataFormModelItem(HbDataFormModelItem::TextItem);
+    mWildCardItem->setLabel("Wildcards: ");
+
+    mHasString = new HbDataFormModelItem(HbDataFormModelItem::TextItem);
+    mHasString->setLabel("Has string: ");
+    
+    mRecurse = new HbDataFormModelItem(HbDataFormModelItem::ComboBoxItem);
+    mRecurse->setLabel("Recurse: ");
+    mRecurse->setContentWidgetData("items", RECURSEMODES);
+    
+    mMinSize = new HbDataFormModelItem(HbDataFormModelItem::TextItem);
+    mMinSize->setLabel("Min size: ");
+    
+    mMaxSize = new HbDataFormModelItem(HbDataFormModelItem::TextItem);
+    mMaxSize->setLabel("Max size: ");
+    
+    mMinDate = new HbDataFormModelItem(HbDataFormModelItem::TextItem);
+    mMinDate->setLabel("Min date: ");
+    mMinDate->setContentWidgetData("text", "01/01/1980");
+    
+    mMaxDate = new HbDataFormModelItem(HbDataFormModelItem::TextItem);
+    mMaxDate->setLabel("Max date: ");
+    mMaxDate->setContentWidgetData("text", "31/12/2060");
+    
+    // load file search attribute values from FB engine:
+    loadAttributes();
+    
+    model->appendDataFormItem(mSearchFileNameItem);
+    model->appendDataFormItem(mWildCardItem);
+    model->appendDataFormItem(mHasString);
+    model->appendDataFormItem(mRecurse);
+    model->appendDataFormItem(mMinSize);
+    model->appendDataFormItem(mMaxSize);
+    model->appendDataFormItem(mMinDate);
+    model->appendDataFormItem(mMaxDate);
+    mForm->setModel(model);
+
+    QGraphicsLinearLayout* layout = new QGraphicsLinearLayout(Qt::Vertical,this);
+
+    HbPushButton* buttonSearch = new HbPushButton("Search");
+    buttonSearch->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
+    connect(buttonSearch, SIGNAL(clicked()), this, SLOT(startFileSearch()));
+
+	HbPushButton* buttonCancel = new HbPushButton("Cancel");
+    buttonCancel->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
+    connect(buttonCancel, SIGNAL(clicked()), this, SLOT(backButtonClicked()));
+
+    // Create widget and layout for buttons
+    QGraphicsWidget *buttonsWidget = new QGraphicsWidget(this);
+    QGraphicsGridLayout *gridLayout = new QGraphicsGridLayout(buttonsWidget);
+    
+    // add buttons to layout
+    gridLayout->addItem(buttonSearch, 0, 0);
+	gridLayout->addItem(buttonCancel, 0, 1);
+    buttonsWidget->setLayout(gridLayout);
+	// add form and buttons widget to list layout
+	layout->addItem(mForm);
+	layout->addItem(buttonsWidget);
+    setLayout(layout);
+    // about to close connect to go back to file browser view
+    connect(this, SIGNAL(aboutToClose()), this, SLOT(backButtonClicked())); 
+}
+
+void SearchView::backButtonClicked()
+{
+    mMainWindow.removeView(this);
+	mForm->deleteLater();
+	mForm = 0;
+    mMainWindow.addView(&mMainView);
+}
+
+void SearchView::startFileSearch()
+{
+    // save form data values and set them as search attributes into FB engine. 
+    readFormItems();
+    mEngineWrapper.setFileSearchAttributes(mAttributes);
+    
+    // Create busy indicator widget with  label **Searching**. Launch it to screen when
+    // FB Utils engine started for file search.  Hide busy indicator when search completed.
+    QProgressBar *progressBar = new QProgressBar();
+	progressBar->setMaximumHeight(16);
+	progressBar->setMaximumWidth(200);    
+    progressBar->setTextVisible(false);
+    progressBar->setMaximum(0);
+    progressBar->setMinimum(0);
+    progressBar->setValue(1);
+
+    QWidget *busyIndWidget = new QWidget();
+    busyIndWidget->setGeometry(12, 50, 120, 60);
+    QVBoxLayout *vbl = new QVBoxLayout(busyIndWidget);
+    QLabel *label = new QLabel("**Searching**");
+    vbl->addWidget(label);
+    vbl->addWidget(progressBar);
+    QHBoxLayout *hbl1 = new QHBoxLayout();
+    vbl->addLayout(hbl1);   
+    busyIndWidget->show();        
+    qApp->processEvents();
+    bool err = mEngineWrapper.searchFiles();
+    busyIndWidget->hide();
+
+    // show results of file search:
+    mResults = mEngineWrapper.getSearchResults();
+    fileSearchResults();
+}
+
+
+void SearchView::loadAttributes()
+{
+    // get settings from engine;
+    mAttributes = mEngineWrapper.getFileSearchAttributes();
+    
+    // set data:
+    mSearchFileNameItem->setContentWidgetData("text", mPath);
+    mSearchFileNameItem->setContentWidgetData("text", mAttributes.mSearchDir);
+    mWildCardItem->setContentWidgetData("text",mAttributes.mWildCards);
+    mHasString->setContentWidgetData("text", mAttributes.mTextInFile);
+
+    mRecurse->setContentWidgetData("selected",mAttributes.mRecurse);
+
+    mMinSize->setContentWidgetData("text",mAttributes.mMinSize);
+    mMaxSize->setContentWidgetData("text", mAttributes.mMaxSize);
+
+    mMinDate->setContentWidgetData("text", mAttributes.mMinDate);
+    mMaxDate->setContentWidgetData("text", mAttributes.mMaxDate);
+}
+
+
+void SearchView::fileSearchResults()
+{
+    HbDialog *dialog = new HbDialog();
+    dialog->setDismissPolicy(HbPopup::TapOutside);
+    dialog->setTimeout(HbPopup::NoTimeout);
+
+    // Create a list and some simple content for it
+    HbListWidget *resultsList = new HbListWidget();
+    resultsList->addItem(QString("%1 entries found").arg(mResults.mNumberOfFoundFiles));
+    for (int i = 0; i < mResults.mFoundFilesList->size(); i++) {
+        resultsList->addItem(QString("%1").arg(mResults.mFoundFilesList->at(i)));
+        }
+    dialog->setContentWidget(resultsList);    
+    dialog->open();
+}
+
+/**
+ * Reads form items and saves values of them into member variable mAttributes
+ */
+void SearchView::readFormItems()
+{
+    mAttributes.mSearchDir  = mSearchFileNameItem->contentWidgetData("text").toString();
+    mAttributes.mWildCards  = mWildCardItem->contentWidgetData("text").toString();
+    mAttributes.mTextInFile = mHasString->contentWidgetData("text").toString();
+    mAttributes.mMinSize    = mMinSize->contentWidgetData("text").toInt();
+    mAttributes.mMaxSize    = mMaxSize->contentWidgetData("text").toInt();
+    mAttributes.mMinDate    = mMinDate->contentWidgetData("text").toDate();
+    mAttributes.mMaxDate    = mMaxDate->contentWidgetData("text").toDate();
+    mAttributes.mRecurse    = mRecurse->contentWidgetData("selected").toBool();
+}