/* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Qt Software Information (qt-info@nokia.com) ** ** This file is part of the demonstration applications of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "WBToolBarSearch.h" #include <QtGui> #include <QtWebKit> #include "network/UBAutoSaver.h" #include "core/memcheck.h" /* ToolbarSearch is a very basic search widget that also contains a small history. Searches are turned into urls that use Google to perform search */ WBToolbarSearch::WBToolbarSearch(QWidget *parent) : WBSearchLineEdit(parent) , mAutosaver(new UBAutoSaver(this)) , mMaxSavedSearches(10) , mStringListModel(new QStringListModel(this)) { QMenu *m = menu(); connect(m, SIGNAL(aboutToShow()), this, SLOT(aboutToShowMenu())); connect(m, SIGNAL(triggered(QAction*)), this, SLOT(triggeredMenuAction(QAction*))); QCompleter *completer = new QCompleter(mStringListModel, this); completer->setCompletionMode(QCompleter::InlineCompletion); lineEdit()->setCompleter(completer); connect(lineEdit(), SIGNAL(returnPressed()), SLOT(searchNow())); setInactiveText(tr("Search")); load(); } WBToolbarSearch::~WBToolbarSearch() { mAutosaver->saveIfNeccessary(); } void WBToolbarSearch::save() { QSettings settings; settings.beginGroup(QLatin1String("toolbarsearch")); settings.setValue(QLatin1String("recentSearches"), mStringListModel->stringList()); settings.setValue(QLatin1String("maximumSaved"), mMaxSavedSearches); settings.endGroup(); } void WBToolbarSearch::load() { QSettings settings; settings.beginGroup(QLatin1String("toolbarsearch")); QStringList list = settings.value(QLatin1String("recentSearches")).toStringList(); mMaxSavedSearches = settings.value(QLatin1String("maximumSaved"), mMaxSavedSearches).toInt(); mStringListModel->setStringList(list); settings.endGroup(); } void WBToolbarSearch::searchNow() { QString searchText = lineEdit()->text(); QStringList newList = mStringListModel->stringList(); if (newList.contains(searchText)) newList.removeAt(newList.indexOf(searchText)); newList.prepend(searchText); if (newList.size() >= mMaxSavedSearches) newList.removeLast(); QWebSettings *globalSettings = QWebSettings::globalSettings(); if (!globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) { mStringListModel->setStringList(newList); mAutosaver->changeOccurred(); } QUrl url(QLatin1String("http://www.google.com/search")); url.addQueryItem(QLatin1String("q"), searchText); url.addQueryItem(QLatin1String("ie"), QLatin1String("UTF-8")); url.addQueryItem(QLatin1String("oe"), QLatin1String("UTF-8")); url.addQueryItem(QLatin1String("client"), QLatin1String("uniboard-browser")); emit search(url); } void WBToolbarSearch::aboutToShowMenu() { lineEdit()->selectAll(); QMenu *m = menu(); m->clear(); QStringList list = mStringListModel->stringList(); if (list.isEmpty()) { m->addAction(tr("No Recent Searches")); return; } QAction *recent = m->addAction(tr("Recent Searches")); recent->setEnabled(false); for (int i = 0; i < list.count(); ++i) { QString text = list.at(i); m->addAction(text)->setData(text); } m->addSeparator(); m->addAction(tr("Clear Recent Searches"), this, SLOT(clear())); } void WBToolbarSearch::triggeredMenuAction(QAction *action) { QVariant v = action->data(); if (v.canConvert<QString>()) { QString text = v.toString(); lineEdit()->setText(text); searchNow(); } } void WBToolbarSearch::clear() { mStringListModel->setStringList(QStringList()); mAutosaver->changeOccurred();; }