toolbarsearch.cpp Example File
demos/browser/toolbarsearch.cpp
#include "toolbarsearch.h"
#include "autosave.h"
#include <QtCore/QUrl>
#include <QtCore/QSettings>
#include <QtGui/QMenu>
#include <QtGui/QCompleter>
#include <QtGui/QStringListModel>
ToolbarSearch::ToolbarSearch(QWidget *parent) : SearchLineEdit(parent),
m_autosave(new AutoSave(this))
{
QMenu *m = menu();
connect(m, SIGNAL(aboutToShow()), this, SLOT(aboutToShowMenu()));
connect(m, SIGNAL(triggered(QAction*)), this, SLOT(triggeredMenuAction(QAction*)));
stringListModel = new QStringListModel(this);
QCompleter *completer = new QCompleter(stringListModel, this);
completer->setCompletionMode(QCompleter::InlineCompletion);
setCompleter(completer);
connect(this, SIGNAL(returnPressed()), SLOT(searchNow()));
setInactiveText(tr("Google"));
load();
}
ToolbarSearch::~ToolbarSearch()
{
m_autosave->saveNow();
}
void ToolbarSearch::save()
{
QSettings settings;
settings.beginGroup("toolbarsearch");
settings.setValue("recentSearches", stringListModel->stringList());
settings.setValue("maximumSaved", m_maxSavedSearches);
}
void ToolbarSearch::load()
{
QSettings settings;
settings.beginGroup("toolbarsearch");
QStringList list = settings.value("recentSearches").toStringList();
m_maxSavedSearches = settings.value("maximumSaved", 10).toInt();
stringListModel->setStringList(list);
}
void ToolbarSearch::searchNow()
{
QString searchText = text();
QStringList list = stringListModel->stringList();
if (list.contains(searchText))
list.removeAt(list.indexOf(searchText));
list.prepend(searchText);
if (list.size() >= m_maxSavedSearches)
list.removeLast();
stringListModel->setStringList(list);
m_autosave->changed();
QUrl url("http:www.google.com/search");
url.addQueryItem("q", searchText);
url.addQueryItem("ie", "UTF-8");
url.addQueryItem("oe", "UTF-8");
emit search(url);
}
void ToolbarSearch::aboutToShowMenu()
{
selectAll();
QMenu *m = menu();
m->clear();
QStringList list = 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)
m->addAction(list.at(i))->setData(list.at(i));
m->addSeparator();
m->addAction(tr("Clear Recent Searches"), this, SLOT(clear()));
}
void ToolbarSearch::triggeredMenuAction(QAction *action)
{
QVariant v = action->data();
if (v.canConvert<QString>()) {
QString text = v.toString();
setText(text);
searchNow();
}
}
void ToolbarSearch::clear()
{
stringListModel->setStringList(QStringList());
m_autosave->changed();
}