toolbarsearch.cpp
上传用户:huahtool
上传日期:2015-12-10
资源大小:1089k
文件大小:5k
源码类别:

浏览器

开发平台:

Visual C++

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the demonstration applications of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #include "toolbarsearch.h"
  38. #include "autosaver.h"
  39. #include <QtCore/QSettings>
  40. #include <QtCore/QUrl>
  41. #include <QtGui/QCompleter>
  42. #include <QtGui/QMenu>
  43. #include <QtGui/QStringListModel>
  44. #include <QtWebKit/QWebSettings>
  45. /*
  46.     ToolbarSearch is a very basic search widget that also contains a small history.
  47.     Searches are turned into urls that use Google to perform search
  48.  */
  49. ToolbarSearch::ToolbarSearch(QWidget *parent)
  50.     : SearchLineEdit(parent)
  51.     , m_autosaver(new AutoSaver(this))
  52.     , m_maxSavedSearches(10)
  53.     , m_stringListModel(new QStringListModel(this))
  54. {
  55.     QMenu *m = menu();
  56.     connect(m, SIGNAL(aboutToShow()), this, SLOT(aboutToShowMenu()));
  57.     connect(m, SIGNAL(triggered(QAction*)), this, SLOT(triggeredMenuAction(QAction*)));
  58.     QCompleter *completer = new QCompleter(m_stringListModel, this);
  59.     completer->setCompletionMode(QCompleter::InlineCompletion);
  60.     lineEdit()->setCompleter(completer);
  61.     connect(lineEdit(), SIGNAL(returnPressed()), SLOT(searchNow()));
  62.     setInactiveText(tr("Google"));
  63.     load();
  64. }
  65. ToolbarSearch::~ToolbarSearch()
  66. {
  67.     m_autosaver->saveIfNeccessary();
  68. }
  69. void ToolbarSearch::save()
  70. {
  71.     QSettings settings;
  72.     settings.beginGroup(QLatin1String("toolbarsearch"));
  73.     settings.setValue(QLatin1String("recentSearches"), m_stringListModel->stringList());
  74.     settings.setValue(QLatin1String("maximumSaved"), m_maxSavedSearches);
  75.     settings.endGroup();
  76. }
  77. void ToolbarSearch::load()
  78. {
  79.     QSettings settings;
  80.     settings.beginGroup(QLatin1String("toolbarsearch"));
  81.     QStringList list = settings.value(QLatin1String("recentSearches")).toStringList();
  82.     m_maxSavedSearches = settings.value(QLatin1String("maximumSaved"), m_maxSavedSearches).toInt();
  83.     m_stringListModel->setStringList(list);
  84.     settings.endGroup();
  85. }
  86. void ToolbarSearch::searchNow()
  87. {
  88.     QString searchText = lineEdit()->text();
  89.     QStringList newList = m_stringListModel->stringList();
  90.     if (newList.contains(searchText))
  91.         newList.removeAt(newList.indexOf(searchText));
  92.     newList.prepend(searchText);
  93.     if (newList.size() >= m_maxSavedSearches)
  94.         newList.removeLast();
  95.     QWebSettings *globalSettings = QWebSettings::globalSettings();
  96.     if (!globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) {
  97.         m_stringListModel->setStringList(newList);
  98.         m_autosaver->changeOccurred();
  99.     }
  100.     QUrl url(QLatin1String("http://www.google.com/search"));
  101.     url.addQueryItem(QLatin1String("q"), searchText);
  102.     url.addQueryItem(QLatin1String("ie"), QLatin1String("UTF-8"));
  103.     url.addQueryItem(QLatin1String("oe"), QLatin1String("UTF-8"));
  104.     url.addQueryItem(QLatin1String("client"), QLatin1String("qtdemobrowser"));
  105.     emit search(url);
  106. }
  107. void ToolbarSearch::aboutToShowMenu()
  108. {
  109.     lineEdit()->selectAll();
  110.     QMenu *m = menu();
  111.     m->clear();
  112.     QStringList list = m_stringListModel->stringList();
  113.     if (list.isEmpty()) {
  114.         m->addAction(tr("No Recent Searches"));
  115.         return;
  116.     }
  117.     QAction *recent = m->addAction(tr("Recent Searches"));
  118.     recent->setEnabled(false);
  119.     for (int i = 0; i < list.count(); ++i) {
  120.         QString text = list.at(i);
  121.         m->addAction(text)->setData(text);
  122.     }
  123.     m->addSeparator();
  124.     m->addAction(tr("Clear Recent Searches"), this, SLOT(clear()));
  125. }
  126. void ToolbarSearch::triggeredMenuAction(QAction *action)
  127. {
  128.     QVariant v = action->data();
  129.     if (v.canConvert<QString>()) {
  130.         QString text = v.toString();
  131.         lineEdit()->setText(text);
  132.         searchNow();
  133.     }
  134. }
  135. void ToolbarSearch::clear()
  136. {
  137.     m_stringListModel->setStringList(QStringList());
  138.     m_autosaver->changeOccurred();;
  139. }