/**************************************************************************** ** ** Copyright (C) 2008 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. ** ** 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 General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License versions 2.0 or 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 GNU General Public Licensing requirements will be met: ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and ** http://www.gnu.org/copyleft/gpl.html. In addition, as a special ** exception, Nokia gives you certain additional rights. These rights ** are described in the Nokia Qt GPL Exception version 1.3, included in ** the file GPL_EXCEPTION.txt in this package. ** ** Qt for Windows(R) Licensees ** As a special exception, Nokia, as the sole copyright holder for Qt ** Designer, grants users of the Qt/Eclipse Integration plug-in the ** right for the Qt/Eclipse Integration to link to functionality ** provided by Qt Designer and its related libraries. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** ****************************************************************************/ #include "toolbarsearch.h" #include "autosaver.h" #include #include #include #include #include #include /* ToolbarSearch is a very basic search widget that also contains a small history. Searches are turned into urls that use Google to perform search */ ToolbarSearch::ToolbarSearch(QWidget *parent) : SearchLineEdit(parent) , m_autosaver(new AutoSaver(this)) , m_maxSavedSearches(10) , m_stringListModel(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(m_stringListModel, this); completer->setCompletionMode(QCompleter::InlineCompletion); lineEdit()->setCompleter(completer); connect(lineEdit(), SIGNAL(returnPressed()), SLOT(searchNow())); setInactiveText(tr("Google")); load(); } ToolbarSearch::~ToolbarSearch() { m_autosaver->saveIfNeccessary(); } void ToolbarSearch::save() { QSettings settings; settings.beginGroup(QLatin1String("toolbarsearch")); settings.setValue(QLatin1String("recentSearches"), m_stringListModel->stringList()); settings.setValue(QLatin1String("maximumSaved"), m_maxSavedSearches); settings.endGroup(); } void ToolbarSearch::load() { QSettings settings; settings.beginGroup(QLatin1String("toolbarsearch")); QStringList list = settings.value(QLatin1String("recentSearches")).toStringList(); m_maxSavedSearches = settings.value(QLatin1String("maximumSaved"), m_maxSavedSearches).toInt(); m_stringListModel->setStringList(list); settings.endGroup(); } void ToolbarSearch::searchNow() { QString searchText = lineEdit()->text(); QStringList newList = m_stringListModel->stringList(); if (newList.contains(searchText)) newList.removeAt(newList.indexOf(searchText)); newList.prepend(searchText); if (newList.size() >= m_maxSavedSearches) newList.removeLast(); QWebSettings *globalSettings = QWebSettings::globalSettings(); if (!globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) { m_stringListModel->setStringList(newList); m_autosaver->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("qtdemobrowser")); emit search(url); } void ToolbarSearch::aboutToShowMenu() { lineEdit()->selectAll(); QMenu *m = menu(); m->clear(); QStringList list = m_stringListModel->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 ToolbarSearch::triggeredMenuAction(QAction *action) { QVariant v = action->data(); if (v.canConvert()) { QString text = v.toString(); lineEdit()->setText(text); searchNow(); } } void ToolbarSearch::clear() { m_stringListModel->setStringList(QStringList()); m_autosaver->changeOccurred();; }