/* ============================================================  *  * This file is a part of the reKonq project  * * Copyright (C) 2007-2008 Trolltech ASA. All rights reserved * Copyright (C) 2008 by Andrea Diamantini  * *  * 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 2, 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.  *  * ============================================================ */ // Local Includes #include "toolbarsearch.h" #include "autosaver.h" // Qt Includes #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("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("reKonq")); 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();; }