Mercurial > projects > qtd
diff demos/browser/toolbarsearch.d @ 45:71b382c10ef6
add coarse and incomplete QT browser port
author | mandel |
---|---|
date | Sun, 17 May 2009 18:49:59 +0000 |
parents | |
children | 7bfd46c330dc |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/demos/browser/toolbarsearch.d Sun May 17 18:49:59 2009 +0000 @@ -0,0 +1,191 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ +module toolbarsearch; + +import searchlineedit; + +import autosaver; + +import QtCore.QSettings; +import QtCore.QUrl; + +import QtGui.QCompleter; +import QtGui.QMenu; +import QtGui.QStringListModel; + +import QtWebKit/QWebSettings; + +/* +QT_BEGIN_NAMESPACE +class QUrl; +class QAction; +class QStringListModel; +QT_END_NAMESPACE + +class AutoSaver; +*/ + +class ToolbarSearch : public SearchLineEdit +{ + Q_OBJECT + +signals: + void search(const QUrl &url); + +public: + +/* + ToolbarSearch is a very basic search widget that also contains a small history. + Searches are turned into urls that use Google to perform search + */ +this(QWidget *parent = null) + +{ + super(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(); +} + ~this() +{ + m_autosaver.saveIfNeccessary(); +} + +public slots: + void clear() +{ + m_stringListModel.setStringList(QStringList()); + m_autosaver.changeOccurred();; +} + + void 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); +} + +private slots: + void save() +{ + QSettings settings; + settings.beginGroup(QLatin1String("toolbarsearch")); + settings.setValue(QLatin1String("recentSearches"), m_stringListModel.stringList()); + settings.setValue(QLatin1String("maximumSaved"), m_maxSavedSearches); + settings.endGroup(); +} + + + void 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 triggeredMenuAction(QAction *action) +{ + QVariant v = action.data(); + if (v.canConvert<QString>()) { + QString text = v.toString(); + lineEdit().setText(text); + searchNow(); + } +} + +private: + void 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(); +} + + AutoSaver *m_autosaver; + int m_maxSavedSearches; + QStringListModel *m_stringListModel; +}