diff options
Diffstat (limited to 'src')
28 files changed, 884 insertions, 317 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 22419da0..239f5b3b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -59,6 +59,7 @@ SET( rekonq_KDEINIT_SRCS urlbar/urlresolver.cpp urlbar/listitem.cpp urlbar/rsswidget.cpp + urlbar/bookmarkwidget.cpp #---------------------------------------- analyzer/analyzerpanel.cpp analyzer/networkanalyzer.cpp diff --git a/src/bookmarks/bookmarkcontextmenu.cpp b/src/bookmarks/bookmarkcontextmenu.cpp index 96668003..019d9eb9 100644 --- a/src/bookmarks/bookmarkcontextmenu.cpp +++ b/src/bookmarks/bookmarkcontextmenu.cpp @@ -268,8 +268,11 @@ void BookmarkContextMenu::newBookmarkGroup() { KBookmark newBk; newBk = dialog->createNewFolder("New folder", selected.parentGroup()); - selected.parentGroup().moveBookmark(newBk, selected); - manager()->emitChanged(newBk.parentGroup()); + if (!newBk.isNull()) + { + selected.parentGroup().moveBookmark(newBk, selected); + manager()->emitChanged(newBk.parentGroup()); + } } } else diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp index 792baaeb..bba9dd77 100644 --- a/src/bookmarks/bookmarksmanager.cpp +++ b/src/bookmarks/bookmarksmanager.cpp @@ -388,13 +388,15 @@ BookmarkProvider::~BookmarkProvider() void BookmarkProvider::setupBookmarkBar(BookmarkToolBar *toolbar) { + if (m_bookmarkToolBars.contains(toolbar)) + return; + kDebug() << "new bookmark bar..."; - + m_bookmarkToolBars.append(toolbar); toolbar->setContextMenuPolicy(Qt::CustomContextMenu); connect(toolbar, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &))); - slotBookmarksChanged("", ""); kDebug() << "new bookmark bar... DONE!"; } @@ -591,3 +593,41 @@ void BookmarkProvider::slotPanelChanged() panel->startLoadFoldedState(); } } + + +KBookmark BookmarkProvider::bookmarkForUrl(const KUrl &url) +{ + KBookmark found; + + KBookmarkGroup root = rootGroup(); + if (root.isNull()) + { + return found; + } + + return bookmarkForUrl(root, url); +} + + +KBookmark BookmarkProvider::bookmarkForUrl(const KBookmark &bookmark, const KUrl &url) +{ + KBookmark found; + + if (bookmark.isGroup()) + { + KBookmarkGroup group = bookmark.toGroup(); + KBookmark bookmark = group.first(); + + while (!bookmark.isNull() && found.isNull()) + { + found = bookmarkForUrl(bookmark, url); + bookmark = group.next(bookmark); + } + } + else if (!bookmark.isSeparator() && bookmark.url() == url) + { + found = bookmark; + } + + return found; +} diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h index 72ea1c3c..eeb5391d 100644 --- a/src/bookmarks/bookmarksmanager.h +++ b/src/bookmarks/bookmarksmanager.h @@ -271,6 +271,8 @@ public: void registerBookmarkPanel(BookmarksPanel *panel); void removeBookmarkPanel(BookmarksPanel *panel); + KBookmark bookmarkForUrl(const KUrl &url); + signals: /** * @short This signal is emitted when an url has to be loaded @@ -305,6 +307,9 @@ private slots: private: QList<KBookmark> find(QList<KBookmark> list, const KBookmark &bookmark, QString text); + QString titleForBookmarkUrl(const KBookmark &bookmark, const QString &url); + KBookmark bookmarkForUrl(const KBookmark &bookmark, const KUrl &url); + KBookmarkManager *m_manager; BookmarkOwner *m_owner; KActionCollection *m_actionCollection; diff --git a/src/bookmarks/bookmarkstreemodel.cpp b/src/bookmarks/bookmarkstreemodel.cpp index 7063bf9b..299efaf0 100644 --- a/src/bookmarks/bookmarkstreemodel.cpp +++ b/src/bookmarks/bookmarkstreemodel.cpp @@ -406,15 +406,15 @@ bool BookmarksTreeModel::dropMimeData(const QMimeData *data, Qt::DropAction acti if (parent.isValid()) root = bookmarkForIndex(parent).toGroup(); - if (!destIndex.isValid()) + if (destIndex.isValid() && row != -1) { - root.deleteBookmark(bookmark); - root.addBookmark(bookmark); - } + root.moveBookmark(bookmark, root.previous(dropDestBookmark)); - else if (row != 1) + } + else { - root.moveBookmark(bookmark, root.previous(dropDestBookmark)); + root.deleteBookmark(bookmark); + root.addBookmark(bookmark); } Application::bookmarkProvider()->bookmarkManager()->emitChanged(); diff --git a/src/data/CMakeLists.txt b/src/data/CMakeLists.txt index 5f0ac164..ed1ada34 100644 --- a/src/data/CMakeLists.txt +++ b/src/data/CMakeLists.txt @@ -1,3 +1,4 @@ +# image files INSTALL( FILES bg2.png bg.png tile.gif category.png button.png @@ -6,20 +7,30 @@ INSTALL( DESTINATION ${DATA_INSTALL_DIR}/rekonq/pics ) +# default bookmarks INSTALL( FILES defaultbookmarks.xbel DESTINATION ${DATA_INSTALL_DIR}/rekonq ) +# .desktop file INSTALL( FILES rekonq.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) +# htmls INSTALL( FILES rekonqinfo.html home.html DESTINATION ${DATA_INSTALL_DIR}/rekonq/htmls ) + +# opensearch engines +INSTALL( + FILES + google.xml + DESTINATION ${DATA_INSTALL_DIR}/rekonq/opensearch +) diff --git a/src/data/google.xml b/src/data/google.xml new file mode 100644 index 00000000..622a0737 --- /dev/null +++ b/src/data/google.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> + <ShortName>Google</ShortName> + <Description>Google Web Search</Description> + <Url method="get" type="text/html" template="http://www.google.com/search?hl={language}&lr=lang_{language}&q={searchTerms}"/> + <Url method="get" type="application/x-suggestions+json" template="http://suggestqueries.google.com/complete/search?json=t&hl={language}&q={searchTerms}&nolabels=t"/> + <Image width="16" height="16">http://www.google.com/favicon.ico</Image> +</OpenSearchDescription> + diff --git a/src/data/rekonq.desktop b/src/data/rekonq.desktop index a29d37e5..f8a78960 100644 --- a/src/data/rekonq.desktop +++ b/src/data/rekonq.desktop @@ -34,8 +34,13 @@ GenericName[de]=Webbrowser GenericName[en_GB]=Web Browser GenericName[es]=Navegador web GenericName[fr]=Navigateur web +GenericName[it]=Browser Web GenericName[pt]=Navegador Web GenericName[pt_BR]=Navegador Web +GenericName[sr]=Веб прегледач +GenericName[sr@ijekavian]=Веб прегледач +GenericName[sr@ijekavianlatin]=Veb pregledač +GenericName[sr@latin]=Veb pregledač GenericName[sv]=Webbläsare GenericName[uk]=Переглядач Інтернету GenericName[x-test]=xxWeb Browserxx diff --git a/src/findbar.cpp b/src/findbar.cpp index 495e4f96..b3b80fac 100644 --- a/src/findbar.cpp +++ b/src/findbar.cpp @@ -144,6 +144,7 @@ void FindBar::show() // show findbar if not visible if (isHidden()) { + emit visibilityChanged(true); QWidget::show(); emit searchString(m_lineEdit->text()); } @@ -183,19 +184,13 @@ void FindBar::notifyMatch(bool match) void FindBar::hide() { m_hideTimer->stop(); + emit visibilityChanged(false); QWidget::hide(); emit(searchString(m_lineEdit->text())); } -void FindBar::setVisible(bool visible) -{ - emit visibilityChanged(visible); - QWidget::setVisible(visible); -} - - void FindBar::toggleVisibility() { - setVisible(!isVisible()); + isVisible() ? hide() : show(); } diff --git a/src/findbar.h b/src/findbar.h index 63b2949b..38bbcbc5 100644 --- a/src/findbar.h +++ b/src/findbar.h @@ -64,9 +64,6 @@ signals: void searchString(const QString &); void visibilityChanged(bool); -protected: - void setVisible(bool visible); - private: KLineEdit *m_lineEdit; QTimer *m_hideTimer; diff --git a/src/search/opensearchengine.cpp b/src/search/opensearchengine.cpp index a7bcf11e..ab12d2ad 100644 --- a/src/search/opensearchengine.cpp +++ b/src/search/opensearchengine.cpp @@ -1,182 +1,219 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@gmail.com> - * Copyright 2009 Christian Franke <cfchris6@ts2server.com> - * Copyright 2009 Fredy Yanardi <fyanardi@gmail.com> - * - * 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 of the License, 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. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> +* Copyright (C) 2009 by Christian Franke <cfchris6@ts2server.com> +* Copyright (C) 2009 by Fredy Yanardi <fyanardi@gmail.com> +* Copyright (C) 2010 by Lionel Chauvin <megabigbug@yahoo.fr> +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes #include "opensearchengine.h" +// Qt Includes #include <QtCore/QRegExp> #include <QtCore/QStringList> #include <QtScript/QScriptEngine> #include <QtScript/QScriptValue> + OpenSearchEngine::OpenSearchEngine(QObject *) : m_scriptEngine(0) { } + OpenSearchEngine::~OpenSearchEngine() { - if (m_scriptEngine) { + if (m_scriptEngine) + { delete m_scriptEngine; } } + QString OpenSearchEngine::parseTemplate(const QString &searchTerm, const QString &searchTemplate) { QString result = searchTemplate; - result.replace(QLatin1String("{count}"), QLatin1String("20")); - result.replace(QLatin1String("{startIndex}"), QLatin1String("0")); - result.replace(QLatin1String("{startPage}"), QLatin1String("0")); + result.replace(QL1S("{count}"), QL1S("20")); + result.replace(QL1S("{startIndex}"), QL1S("0")); + result.replace(QL1S("{startPage}"), QL1S("0")); // TODO - get setting from KDE - result.replace(QLatin1String("{language}"), QLatin1String("en-US")); - result.replace(QLatin1String("{inputEncoding}"), QLatin1String("UTF-8")); - result.replace(QLatin1String("{outputEncoding}"), QLatin1String("UTF-8")); - result.replace(QLatin1String("{searchTerms}"), searchTerm); + result.replace(QL1S("{language}"), QL1S("en-US")); + result.replace(QL1S("{inputEncoding}"), QL1S("UTF-8")); + result.replace(QL1S("{outputEncoding}"), QL1S("UTF-8")); + result.replace(QL1S("{searchTerms}"), searchTerm); return result; } + QString OpenSearchEngine::name() const { return m_name; } + void OpenSearchEngine::setName(const QString &name) { m_name = name; } + QString OpenSearchEngine::description() const { return m_description; } + void OpenSearchEngine::setDescription(const QString &description) { m_description = description; } + QString OpenSearchEngine::searchUrlTemplate() const { return m_searchUrlTemplate; } + void OpenSearchEngine::setSearchUrlTemplate(const QString &searchUrlTemplate) { m_searchUrlTemplate = searchUrlTemplate; } + KUrl OpenSearchEngine::searchUrl(const QString &searchTerm) const { - if (m_searchUrlTemplate.isEmpty()) { + if (m_searchUrlTemplate.isEmpty()) + { return KUrl(); } KUrl retVal = KUrl::fromEncoded(parseTemplate(searchTerm, m_searchUrlTemplate).toUtf8()); - QList<Parameter>::const_iterator end = m_searchParameters.constEnd(); - QList<Parameter>::const_iterator i = m_searchParameters.constBegin(); - for (; i != end; ++i) { + QList<Parameter>::const_iterator i; + for ( i = m_searchParameters.constBegin(); i != m_searchParameters.constEnd(); ++i) + { retVal.addQueryItem(i->first, parseTemplate(searchTerm, i->second)); } return retVal; } + bool OpenSearchEngine::providesSuggestions() const { return !m_suggestionsUrlTemplate.isEmpty(); } + QString OpenSearchEngine::suggestionsUrlTemplate() const { return m_suggestionsUrlTemplate; } + void OpenSearchEngine::setSuggestionsUrlTemplate(const QString &suggestionsUrlTemplate) { m_suggestionsUrlTemplate = suggestionsUrlTemplate; } + KUrl OpenSearchEngine::suggestionsUrl(const QString &searchTerm) const { - if (m_suggestionsUrlTemplate.isEmpty()) { + if (m_suggestionsUrlTemplate.isEmpty()) + { return KUrl(); } KUrl retVal = KUrl::fromEncoded(parseTemplate(searchTerm, m_suggestionsUrlTemplate).toUtf8()); - QList<Parameter>::const_iterator end = m_suggestionsParameters.constEnd(); - QList<Parameter>::const_iterator i = m_suggestionsParameters.constBegin(); - for (; i != end; ++i) { + QList<Parameter>::const_iterator i; + for( i = m_suggestionsParameters.constBegin(); i != m_suggestionsParameters.constEnd(); ++i) + { retVal.addQueryItem(i->first, parseTemplate(searchTerm, i->second)); } - return retVal; } + QList<OpenSearchEngine::Parameter> OpenSearchEngine::searchParameters() const { return m_searchParameters; } + void OpenSearchEngine::setSearchParameters(const QList<Parameter> &searchParameters) { m_searchParameters = searchParameters; } + QList<OpenSearchEngine::Parameter> OpenSearchEngine::suggestionsParameters() const { return m_suggestionsParameters; } + void OpenSearchEngine::setSuggestionsParameters(const QList<Parameter> &suggestionsParameters) { m_suggestionsParameters = suggestionsParameters; } + QString OpenSearchEngine::imageUrl() const { return m_imageUrl; } + void OpenSearchEngine::setImageUrl(const QString &imageUrl) { m_imageUrl = imageUrl; } + QImage OpenSearchEngine::image() const { return m_image; } + void OpenSearchEngine::setImage(const QImage &image) { m_image = image; } + bool OpenSearchEngine::isValid() const { return (!m_name.isEmpty() && !m_searchUrlTemplate.isEmpty()); } + bool OpenSearchEngine::operator==(const OpenSearchEngine &other) const { return (m_name == other.m_name @@ -188,36 +225,45 @@ bool OpenSearchEngine::operator==(const OpenSearchEngine &other) const && m_suggestionsParameters == other.m_suggestionsParameters); } + bool OpenSearchEngine::operator<(const OpenSearchEngine &other) const { return (m_name < other.m_name); } + QStringList OpenSearchEngine::parseSuggestion(const QByteArray &resp) { QString response(resp); response = response.trimmed(); - if (response.isEmpty()) { + if (response.isEmpty()) + { return QStringList(); } - if (!response.startsWith(QLatin1Char('[')) || !response.endsWith(QLatin1Char(']'))) { + if ( !response.startsWith(QL1C('[')) + || !response.endsWith(QL1C(']')) + ) + { return QStringList(); } - if (!m_scriptEngine) { + if (!m_scriptEngine) + { m_scriptEngine = new QScriptEngine(); } // Evaluate the JSON response using QtScript. - if (!m_scriptEngine->canEvaluate(response)) { + if (!m_scriptEngine->canEvaluate(response)) + { return QStringList(); } QScriptValue responseParts = m_scriptEngine->evaluate(response); - if (!responseParts.property(1).isArray()) { + if (!responseParts.property(1).isArray()) + { return QStringList(); } @@ -226,4 +272,3 @@ QStringList OpenSearchEngine::parseSuggestion(const QByteArray &resp) return suggestionsList; } - diff --git a/src/search/opensearchengine.h b/src/search/opensearchengine.h index c981f443..f2329624 100644 --- a/src/search/opensearchengine.h +++ b/src/search/opensearchengine.h @@ -1,35 +1,52 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@gmail.com> - * Copyright 2009 Christian Franke <cfchris6@ts2server.com> - * - * 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 of the License, 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. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> +* Copyright (C) 2009 by Christian Franke <cfchris6@ts2server.com> +* Copyright (C) 2010 by Lionel Chauvin <megabigbug@yahoo.fr> +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + #ifndef OPENSEARCHENGINE_H #define OPENSEARCHENGINE_H -#include <QtCore/QPair> -#include <QtGui/QImage> +// Rekonq Includes +#include "rekonq_defines.h" + +// KDE Includes #include <KUrl> +// Qt Includes +#include <QtCore/QPair> +#include <QtGui/QImage> + +// Forward Declarations class QNetworkAccessManager; class QNetworkReply; class QScriptEngine; + class OpenSearchEngine { public: diff --git a/src/search/opensearchmanager.cpp b/src/search/opensearchmanager.cpp index 6e37db77..463c0a11 100644 --- a/src/search/opensearchmanager.cpp +++ b/src/search/opensearchmanager.cpp @@ -1,35 +1,50 @@ -/* This file is part of the KDE project - * Copyright (C) 2009 Fredy Yanardi <fyanardi@gmail.com> - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Fredy Yanardi <fyanardi@gmail.com> +* Copyright (C) 2010 by Lionel Chauvin <megabigbug@yahoo.fr> +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes #include "opensearchmanager.h" +#include "opensearchmanager.moc" -#include <QtCore/QFile> +// Local Includes +#include "opensearchengine.h" +#include "opensearchreader.h" +#include "opensearchwriter.h" +// KDE Includes #include <KDebug> #include <KGlobal> #include <KStandardDirs> #include <KUrl> #include <kio/scheduler.h> -#include "opensearchengine.h" -#include "opensearchreader.h" -#include "opensearchwriter.h" +// Qt Includes +#include <QtCore/QFile> + OpenSearchManager::OpenSearchManager(QObject *parent) : QObject(parent) @@ -38,34 +53,44 @@ OpenSearchManager::OpenSearchManager(QObject *parent) m_state = IDLE; } -OpenSearchManager::~OpenSearchManager() { + +OpenSearchManager::~OpenSearchManager() +{ qDeleteAll(m_enginesMap.values()); m_enginesMap.clear(); } + void OpenSearchManager::setSearchProvider(const QString &searchProvider) { m_activeEngine = 0; - if (!m_enginesMap.contains(searchProvider)) { - const QString fileName = KGlobal::dirs()->findResource("data", "konqueror/opensearch/" + searchProvider + ".xml"); - if (fileName.isEmpty()) { + if (!m_enginesMap.contains(searchProvider)) + { + const QString fileName = KGlobal::dirs()->findResource("data", "rekonq/opensearch/" + searchProvider + ".xml"); + kDebug() << searchProvider << " file name path: " << fileName; + if (fileName.isEmpty()) + { + kDebug() << "OpenSearch file name empty"; return; } QFile file(fileName); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - kWarning(1202) << "Cannot open opensearch description file: " + fileName; + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + kDebug() << "Cannot open opensearch description file: " + fileName; return; } OpenSearchReader reader; OpenSearchEngine *engine = reader.read(&file); - if (engine) { + if (engine) + { m_enginesMap.insert(searchProvider, engine); } - else { + else + { return; } } @@ -73,72 +98,81 @@ void OpenSearchManager::setSearchProvider(const QString &searchProvider) m_activeEngine = m_enginesMap.value(searchProvider); } + bool OpenSearchManager::isSuggestionAvailable() { return m_activeEngine != 0; } + void OpenSearchManager::addOpenSearchEngine(const KUrl &url, const QString &title) { Q_UNUSED(title); m_jobData.clear(); - if (m_state != IDLE) { + if (m_state != IDLE) + { // TODO: cancel job } m_state = REQ_DESCRIPTION; KIO::TransferJob *job = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo); - connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)), - this, SLOT(dataReceived(KIO::Job *, const QByteArray &))); - connect(job, SIGNAL(result(KJob *)), SLOT(jobFinished(KJob *))); + connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)), this, SLOT(dataReceived(KIO::Job *, const QByteArray &))); + connect(job, SIGNAL(result(KJob *)), this, SLOT(jobFinished(KJob *))); } + void OpenSearchManager::requestSuggestion(const QString &searchText) { - if (!m_activeEngine) { + if (!m_activeEngine) return; - } - if (m_state != IDLE) { + if (m_state != IDLE) + { // TODO: cancel job } m_state = REQ_SUGGESTION; KUrl url = m_activeEngine->suggestionsUrl(searchText); - kDebug(1202) << "Requesting for suggestions: " << url.url(); + kDebug() << "Requesting for suggestions: " << url.url(); m_jobData.clear(); + KIO::TransferJob *job = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo); - connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)), - this, SLOT(dataReceived(KIO::Job *, const QByteArray &))); - connect(job, SIGNAL(result(KJob *)), SLOT(jobFinished(KJob *))); + connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)), this, SLOT(dataReceived(KIO::Job *, const QByteArray &))); + connect(job, SIGNAL(result(KJob *)), this, SLOT(jobFinished(KJob *))); } + void OpenSearchManager::dataReceived(KIO::Job *job, const QByteArray &data) { Q_UNUSED(job); m_jobData.append(data); } + void OpenSearchManager::jobFinished(KJob *job) { - if (job->error()) { + if (job->error()) return; // just silently return - } - if (m_state == REQ_SUGGESTION) { + if (m_state == REQ_SUGGESTION) + { const QStringList suggestionsList = m_activeEngine->parseSuggestion(m_jobData); - kDebug(1202) << "Received suggestion from " << m_activeEngine->name() << ": " << suggestionsList; + kDebug() << "Received suggestion from " << m_activeEngine->name() << ": " << suggestionsList; emit suggestionReceived(suggestionsList); + return; } - else if (m_state == REQ_DESCRIPTION) { + + if (m_state == REQ_DESCRIPTION) + { OpenSearchReader reader; OpenSearchEngine *engine = reader.read(m_jobData); - if (engine) { + if (engine) + { m_enginesMap.insert(engine->name(), engine); - QString path = KGlobal::dirs()->findResource("data", "konqueror/opensearch/"); + QString path = KGlobal::dirs()->findResource("data", "rekonq/opensearch/"); QString fileName = trimmedEngineName(engine->name()); QFile file(path + fileName + ".xml"); OpenSearchWriter writer; @@ -147,29 +181,33 @@ void OpenSearchManager::jobFinished(KJob *job) QString searchUrl = OpenSearchEngine::parseTemplate("\\{@}", engine->searchUrlTemplate()); emit openSearchEngineAdded(engine->name(), searchUrl, fileName); } - else { + else + { kFatal() << "Error while adding new open search engine"; } } } + QString OpenSearchManager::trimmedEngineName(const QString &engineName) const { QString trimmed; QString::ConstIterator constIter = engineName.constBegin(); - while (constIter != engineName.constEnd()) { - if (constIter->isSpace()) { + while (constIter != engineName.constEnd()) + { + if (constIter->isSpace()) + { trimmed.append('-'); } - else if (*constIter != '.') { - trimmed.append(constIter->toLower()); + else + { + if (*constIter != '.') + { + trimmed.append(constIter->toLower()); + } } constIter++; } return trimmed; } - -#include "opensearchmanager.moc" - - diff --git a/src/search/opensearchmanager.h b/src/search/opensearchmanager.h index 59e7e6b2..8a45b83c 100644 --- a/src/search/opensearchmanager.h +++ b/src/search/opensearchmanager.h @@ -1,45 +1,66 @@ -/* This file is part of the KDE project - * Copyright (C) 2009 Fredy Yanardi <fyanardi@gmail.com> - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Fredy Yanardi <fyanardi@gmail.com> +* Copyright (C) 2010 by Lionel Chauvin <megabigbug@yahoo.fr> +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + #ifndef OPENSEARCHMANAGER_H #define OPENSEARCHMANAGER_H -#include <QtCore/QObject> + +// Rekonq Includes +#include "rekonq_defines.h" + +// KDE Includes #include <kio/jobclasses.h> -class SuggestionEngine; +// Qt Includes +#include <QtCore/QObject> +// Forward Declarations +class SuggestionEngine; class OpenSearchEngine; + /** - * This class acts as a proxy between the SearchBar plugin and the individual suggestion engine. - * This class has a map of all available engines, and route the suggestion request to the correct engine + * This class acts as a proxy between the SearchBar plugin + * and the individual suggestion engine. + * This class has a map of all available engines, + * and route the suggestion request to the correct engine. */ class OpenSearchManager : public QObject { Q_OBJECT - enum STATE { + enum STATE + { REQ_SUGGESTION, REQ_DESCRIPTION, IDLE }; + public: /** * Constructor @@ -85,4 +106,3 @@ private: }; #endif // OPENSEARCHMANAGER_H - diff --git a/src/search/opensearchreader.cpp b/src/search/opensearchreader.cpp index 0aa0f91f..5b7ece2c 100644 --- a/src/search/opensearchreader.cpp +++ b/src/search/opensearchreader.cpp @@ -1,48 +1,63 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@gmail.com> - * Copyright 2009 Fredy Yanardi <fyanardi@gmail.com> - * - * 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 of the License, 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. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> +* Copyright (C) 2009 by Fredy Yanardi <fyanardi@gmail.com> +* Copyright (C) 2010 by Lionel Chauvin <megabigbug@yahoo.fr> +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes #include "opensearchreader.h" +// Local Includes #include "opensearchengine.h" +// Qt Includes #include <QtCore/QIODevice> + OpenSearchReader::OpenSearchReader() : QXmlStreamReader() { } + OpenSearchEngine *OpenSearchReader::read(const QByteArray &data) { clear(); - addData(data); return read(); } + OpenSearchEngine *OpenSearchReader::read(QIODevice *device) { clear(); - if (!device->isOpen()) { + if (!device->isOpen()) + { device->open(QIODevice::ReadOnly); } @@ -50,6 +65,7 @@ OpenSearchEngine *OpenSearchReader::read(QIODevice *device) return read(); } + OpenSearchEngine *OpenSearchReader::read() { OpenSearchEngine *engine = new OpenSearchEngine(); @@ -58,28 +74,40 @@ OpenSearchEngine *OpenSearchReader::read() readNext(); } - if (name() != QLatin1String("OpenSearchDescription") - || namespaceUri() != QLatin1String("http://a9.com/-/spec/opensearch/1.1/")) { + if ( name() != QL1S("OpenSearchDescription") + || namespaceUri() != QL1S("http://a9.com/-/spec/opensearch/1.1/") + ) + { raiseError(QObject::tr("The file is not an OpenSearch 1.1 file.")); return engine; } - while (!(isEndElement() && name() == QLatin1String("OpenSearchDescription")) && !atEnd()) { + while (!(isEndElement() && name() == QL1S("OpenSearchDescription")) && !atEnd()) + { readNext(); - if (!isStartElement()) { + if (!isStartElement()) continue; - } - if (name() == QLatin1String("ShortName")) { + // ShortName + if (name() == QL1S("ShortName")) + { engine->setName(readElementText()); + continue; } - else if (name() == QLatin1String("Description")) { + + // Description + if (name() == QL1S("Description")) + { engine->setDescription(readElementText()); + continue; } - else if (name() == QLatin1String("Url")) { - QString type = attributes().value(QLatin1String("type")).toString(); - QString url = attributes().value(QLatin1String("template")).toString(); + + // Url + if (name() == QL1S("Url")) + { + QString type = attributes().value(QL1S("type")).toString(); + QString url = attributes().value(QL1S("template")).toString(); if (url.isEmpty()) continue; @@ -88,46 +116,59 @@ OpenSearchEngine *OpenSearchReader::read() readNext(); - while (!(isEndElement() && name() == QLatin1String("Url"))) { - if (!isStartElement() || (name() != QLatin1String("Param") && name() != QLatin1String("Parameter"))) { + while (!(isEndElement() && name() == QL1S("Url"))) + { + if (!isStartElement() || (name() != QL1S("Param") && name() != QL1S("Parameter"))) { readNext(); continue; } - QString key = attributes().value(QLatin1String("name")).toString(); - QString value = attributes().value(QLatin1String("value")).toString(); + QString key = attributes().value(QL1S("name")).toString(); + QString value = attributes().value(QL1S("value")).toString(); - if (!key.isEmpty() && !value.isEmpty()) { + if (!key.isEmpty() && !value.isEmpty()) + { parameters.append(OpenSearchEngine::Parameter(key, value)); } - while (!isEndElement()) { + while (!isEndElement()) + { readNext(); } } - if (type == QLatin1String("application/x-suggestions+json")) { + if (type == QL1S("application/x-suggestions+json")) + { engine->setSuggestionsUrlTemplate(url); engine->setSuggestionsParameters(parameters); } - else { + else + { engine->setSearchUrlTemplate(url); engine->setSearchParameters(parameters); } + + continue; } - else if (name() == QLatin1String("Image")) { + + // Image + if (name() == QL1S("Image")) + { engine->setImageUrl(readElementText()); + continue; } - if (!engine->name().isEmpty() - && !engine->description().isEmpty() - && !engine->suggestionsUrlTemplate().isEmpty() - && !engine->searchUrlTemplate().isEmpty() - && !engine->imageUrl().isEmpty()) { + // Engine check + if ( !engine->name().isEmpty() + && !engine->description().isEmpty() + && !engine->suggestionsUrlTemplate().isEmpty() + && !engine->searchUrlTemplate().isEmpty() + && !engine->imageUrl().isEmpty() + ) + { break; } } return engine; } - diff --git a/src/search/opensearchreader.h b/src/search/opensearchreader.h index 5481881a..4e2444e0 100644 --- a/src/search/opensearchreader.h +++ b/src/search/opensearchreader.h @@ -1,29 +1,45 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@gmail.com> - * - * 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 of the License, 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. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> +* Copyright (C) 2010 by Lionel Chauvin <megabigbug@yahoo.fr> +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + #ifndef OPENSEARCHREADER_H #define OPENSEARCHREADER_H + +// Rekonq Includes +#include "rekonq_defines.h" + +// Qt Includes #include <QtCore/QXmlStreamReader> +// Forward Declarations class OpenSearchEngine; + class OpenSearchReader : public QXmlStreamReader { public: diff --git a/src/search/opensearchwriter.cpp b/src/search/opensearchwriter.cpp index a18ce0e2..81ce022c 100644 --- a/src/search/opensearchwriter.cpp +++ b/src/search/opensearchwriter.cpp @@ -1,29 +1,44 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@gmail.com> - * - * 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 of the License, 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. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> +* Copyright (C) 2010 by Lionel Chauvin <megabigbug@yahoo.fr> +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes #include "opensearchwriter.h" +// Local Includes #include "opensearchengine.h" +// KDE Includes +#include <KDebug> + +// Qt Includes #include <QtCore/QIODevice> -#include <KDebug> + OpenSearchWriter::OpenSearchWriter() : QXmlStreamWriter() @@ -31,6 +46,7 @@ OpenSearchWriter::OpenSearchWriter() setAutoFormatting(true); } + bool OpenSearchWriter::write(QIODevice *device, OpenSearchEngine *engine) { if (!engine) @@ -44,34 +60,40 @@ bool OpenSearchWriter::write(QIODevice *device, OpenSearchEngine *engine) return true; } + void OpenSearchWriter::write(OpenSearchEngine *engine) { writeStartDocument(); - writeStartElement(QLatin1String("OpenSearchDescription")); - writeDefaultNamespace(QLatin1String("http://a9.com/-/spec/opensearch/1.1/")); + writeStartElement(QL1S("OpenSearchDescription")); + writeDefaultNamespace(QL1S("http://a9.com/-/spec/opensearch/1.1/")); - if (!engine->name().isEmpty()) { - writeTextElement(QLatin1String("ShortName"), engine->name()); + if (!engine->name().isEmpty()) + { + writeTextElement(QL1S("ShortName"), engine->name()); } - if (!engine->description().isEmpty()) { - writeTextElement(QLatin1String("Description"), engine->description()); + if (!engine->description().isEmpty()) + { + writeTextElement(QL1S("Description"), engine->description()); } - if (!engine->searchUrlTemplate().isEmpty()) { - writeStartElement(QLatin1String("Url")); - writeAttribute(QLatin1String("method"), QLatin1String("get")); - writeAttribute(QLatin1String("template"), engine->searchUrlTemplate()); + if (!engine->searchUrlTemplate().isEmpty()) + { + writeStartElement(QL1S("Url")); + writeAttribute(QL1S("method"), QL1S("get")); + writeAttribute(QL1S("template"), engine->searchUrlTemplate()); - if (!engine->searchParameters().empty()) { - writeNamespace(QLatin1String("http://a9.com/-/spec/opensearch/extensions/parameters/1.0/"), QLatin1String("p")); + if (!engine->searchParameters().empty()) + { + writeNamespace(QL1S("http://a9.com/-/spec/opensearch/extensions/parameters/1.0/"), QL1S("p")); QList<OpenSearchEngine::Parameter>::const_iterator end = engine->searchParameters().constEnd(); QList<OpenSearchEngine::Parameter>::const_iterator i = engine->searchParameters().constBegin(); - for (; i != end; ++i) { - writeStartElement(QLatin1String("p:Parameter")); - writeAttribute(QLatin1String("name"), i->first); - writeAttribute(QLatin1String("value"), i->second); + for (; i != end; ++i) + { + writeStartElement(QL1S("p:Parameter")); + writeAttribute(QL1S("name"), i->first); + writeAttribute(QL1S("value"), i->second); writeEndElement(); } } @@ -79,21 +101,24 @@ void OpenSearchWriter::write(OpenSearchEngine *engine) writeEndElement(); } - if (!engine->suggestionsUrlTemplate().isEmpty()) { - writeStartElement(QLatin1String("Url")); - writeAttribute(QLatin1String("method"), QLatin1String("get")); - writeAttribute(QLatin1String("type"), QLatin1String("application/x-suggestions+json")); - writeAttribute(QLatin1String("template"), engine->suggestionsUrlTemplate()); + if (!engine->suggestionsUrlTemplate().isEmpty()) + { + writeStartElement(QL1S("Url")); + writeAttribute(QL1S("method"), QL1S("get")); + writeAttribute(QL1S("type"), QL1S("application/x-suggestions+json")); + writeAttribute(QL1S("template"), engine->suggestionsUrlTemplate()); - if (!engine->suggestionsParameters().empty()) { - writeNamespace(QLatin1String("http://a9.com/-/spec/opensearch/extensions/parameters/1.0/"), QLatin1String("p")); + if (!engine->suggestionsParameters().empty()) + { + writeNamespace(QL1S("http://a9.com/-/spec/opensearch/extensions/parameters/1.0/"), QL1S("p")); QList<OpenSearchEngine::Parameter>::const_iterator end = engine->suggestionsParameters().constEnd(); QList<OpenSearchEngine::Parameter>::const_iterator i = engine->suggestionsParameters().constBegin(); - for (; i != end; ++i) { - writeStartElement(QLatin1String("p:Parameter")); - writeAttribute(QLatin1String("name"), i->first); - writeAttribute(QLatin1String("value"), i->second); + for (; i != end; ++i) + { + writeStartElement(QL1S("p:Parameter")); + writeAttribute(QL1S("name"), i->first); + writeAttribute(QL1S("value"), i->second); writeEndElement(); } } @@ -102,9 +127,8 @@ void OpenSearchWriter::write(OpenSearchEngine *engine) } if (!engine->imageUrl().isEmpty()) - writeTextElement(QLatin1String("Image"), engine->imageUrl()); + writeTextElement(QL1S("Image"), engine->imageUrl()); writeEndElement(); writeEndDocument(); } - diff --git a/src/search/opensearchwriter.h b/src/search/opensearchwriter.h index b089c4bb..6a2e0d11 100644 --- a/src/search/opensearchwriter.h +++ b/src/search/opensearchwriter.h @@ -1,31 +1,46 @@ -/* - * Copyright 2009 Jakub Wieczorek <faw217@gmail.com> - * - * 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 of the License, 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. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Jakub Wieczorek <faw217@gmail.com> +* Copyright (C) 2010 by Lionel Chauvin <megabigbug@yahoo.fr> +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* 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 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + #ifndef OPENSEARCHWRITER_H #define OPENSEARCHWRITER_H + +// Rekonq Includes +#include "rekonq_defines.h" + +// Qt Includes #include <QtCore/QXmlStreamWriter> +// Forward Declarations class QIODevice; - class OpenSearchEngine; + class OpenSearchWriter : public QXmlStreamWriter { public: diff --git a/src/settings/settingsdialog.cpp b/src/settings/settingsdialog.cpp index d53b1900..cd64f434 100644 --- a/src/settings/settingsdialog.cpp +++ b/src/settings/settingsdialog.cpp @@ -36,7 +36,7 @@ #include "application.h" #include "mainwindow.h" #include "webtab.h" -#include "search/searchengine.h" +#include "searchengine.h" // Widget Includes #include "adblockwidget.h" diff --git a/src/urlbar/bookmarkwidget.cpp b/src/urlbar/bookmarkwidget.cpp new file mode 100644 index 00000000..3380ec57 --- /dev/null +++ b/src/urlbar/bookmarkwidget.cpp @@ -0,0 +1,172 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com> +* +* +* 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 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Auto Includes +#include "bookmarkwidget.h" +#include "bookmarkwidget.moc" + +// Local includes +#include "application.h" +#include "bookmarksmanager.h" + +// KDE Includes +#include <KLocalizedString> +#include <KLineEdit> +#include <KMessageBox> + +// Qt Includes +#include <QtGui/QFormLayout> +#include <QtGui/QDialogButtonBox> +#include <QtGui/QLabel> +#include <QtGui/QPushButton> + + + +BookmarkWidget::BookmarkWidget(const KBookmark &bookmark, QWidget *parent) + : QFrame(parent, Qt::Popup) + , m_bookmark(bookmark) +{ + setAttribute(Qt::WA_DeleteOnClose); + setFixedWidth(350); + setFrameStyle(QFrame::Panel); + + QFormLayout *layout = new QFormLayout(this); + setLayout(layout); + + QHBoxLayout *hLayout = new QHBoxLayout(); + + QLabel *bookmarkIcon = new QLabel(this); + bookmarkIcon->setPixmap(KIcon("bookmarks").pixmap(32, 32)); + hLayout->addWidget(bookmarkIcon); + hLayout->setSpacing(10); + + QVBoxLayout *vLayout = new QVBoxLayout(); + + QLabel *bookmarkInfo = new QLabel(this); + bookmarkInfo->setText(i18n("Edit this Bookmark")); + QFont font; + font.setPointSize(font.pointSize() + 2); + bookmarkInfo->setFont(font); + + vLayout->addWidget(bookmarkInfo); + + QPushButton *removeButton = new QPushButton(this); + removeButton->setText(i18n("Remove this Bookmark")); + connect(removeButton, SIGNAL(clicked()), this, SLOT(removeBookmark())); + + vLayout->addWidget(removeButton); + hLayout->addLayout(vLayout); + layout->addItem(hLayout); + + + QLabel *nameLabel = new QLabel(this); + nameLabel->setText(i18n("Name:")); + + m_name = new KLineEdit(this); + if (m_bookmark.isNull()) + { + m_name->setEnabled(false); + } + else + { + m_name->setText(m_bookmark.text()); + m_name->setFocus(); + } + + layout->addRow(nameLabel, m_name); + + QLabel *urlLabel = new QLabel(this); + urlLabel->setText("URL:"); + + KLineEdit *url = new KLineEdit(this); + url->setText(m_bookmark.url().url()); + url->setEnabled(false); + + layout->addRow(urlLabel, url); + + QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); + buttonBox->button(QDialogButtonBox::Ok)->setText(i18n("Done")); + connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + + layout->addWidget(buttonBox); +} + + +BookmarkWidget::~BookmarkWidget() +{ + delete m_name; +} + + +void BookmarkWidget::accept() +{ + if (!m_bookmark.isNull() && m_name->text() != m_bookmark.fullText()) + { + m_bookmark.setFullText(m_name->text()); + Application::bookmarkProvider()->bookmarkManager()->emitChanged(); + } + reject(); +} + + +void BookmarkWidget::reject() +{ + close(); + deleteLater(); +} + + +void BookmarkWidget::showAt(const QPoint &pos) +{ + QPoint p; + p.setX(pos.x()); + p.setY(pos.y() + 12); + move(p); + show(); +} + + +void BookmarkWidget::removeBookmark() +{ + bool folder = m_bookmark.isGroup(); + + if (KMessageBox::warningContinueCancel( + QApplication::activeWindow(), + folder ? i18n("Are you sure you wish to remove the bookmark folder\n\"%1\"?", m_bookmark.text()) + : i18n("Are you sure you wish to remove the bookmark\n\"%1\"?", m_bookmark.text()), + folder ? i18n("Bookmark Folder Deletion") + : i18n("Bookmark Deletion"), + KStandardGuiItem::del()) + == KMessageBox::Continue + ) + { + m_bookmark.parentGroup().deleteBookmark(m_bookmark); + Application::bookmarkProvider()->bookmarkManager()->emitChanged(); + } + + reject(); +} diff --git a/src/urlbar/bookmarkwidget.h b/src/urlbar/bookmarkwidget.h new file mode 100644 index 00000000..cdab328e --- /dev/null +++ b/src/urlbar/bookmarkwidget.h @@ -0,0 +1,63 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com> +* +* +* 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 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#ifndef BOOKMARKWIDGET_H +#define BOOKMARKWIDGET_H + +// Rekonq Includes +#include "rekonq_defines.h" + +// KDE Includes +#include <KUrl> +#include <KBookmark> +#include <KLineEdit> + +// Qt Includes +#include <QtGui/QFrame> + + +class BookmarkWidget : public QFrame +{ + Q_OBJECT + +public: + BookmarkWidget(const KBookmark &bookmark, QWidget *parent = 0); + ~BookmarkWidget(); + + void showAt(const QPoint &pos); + +private slots: + void accept(); + void reject(); + void removeBookmark(); + +private: + KBookmark m_bookmark; + KLineEdit *m_name; + +}; + +#endif // BOOKMARKWIDGET_H diff --git a/src/urlbar/completionwidget.cpp b/src/urlbar/completionwidget.cpp index 2afc44b2..a9203bf7 100644 --- a/src/urlbar/completionwidget.cpp +++ b/src/urlbar/completionwidget.cpp @@ -34,7 +34,7 @@ // Local Includes #include "application.h" #include "urlresolver.h" -#include "search/searchengine.h" +#include "searchengine.h" #include "urlbar.h" // KDE Includes diff --git a/src/urlbar/listitem.cpp b/src/urlbar/listitem.cpp index a6258cb5..e9bb6fbb 100644 --- a/src/urlbar/listitem.cpp +++ b/src/urlbar/listitem.cpp @@ -36,7 +36,7 @@ #include "application.h" #include "websnap.h" #include "completionwidget.h" -#include "search/searchengine.h" +#include "searchengine.h" // KDE Includes #include <KIcon> diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp index d924a30d..e2033120 100644 --- a/src/urlbar/urlbar.cpp +++ b/src/urlbar/urlbar.cpp @@ -41,6 +41,8 @@ #include "webpage.h" #include "webview.h" #include "completionwidget.h" +#include "bookmarksmanager.h" +#include "bookmarkwidget.h" // KDE Includes #include <KCompletionBox> @@ -107,6 +109,11 @@ UrlBar::UrlBar(QWidget *parent) connect(_tab->view(), SIGNAL(loadFinished(bool)), this, SLOT(loadFinished())); connect(_tab->view(), SIGNAL(loadStarted()), this, SLOT(clearRightIcons())); + // bookmark icon + _icon->setIcon(KIcon("bookmarks").pixmap(32,32, QIcon::Disabled)); + connect(Application::bookmarkProvider()->bookmarkManager(), SIGNAL(changed(const QString &, const QString &)), this, SLOT(onBookmarksChanged())); + connect(_icon, SIGNAL(clicked(const QPoint &)), this, SLOT(showBookmarkInfo(const QPoint &))); + // load typed urls connect(this, SIGNAL(returnPressed(const QString &)), this, SLOT(loadTyped(const QString &))); @@ -138,7 +145,8 @@ void UrlBar::setQUrl(const QUrl& url) clearFocus(); KLineEdit::setUrl(url); setCursorPosition(0); - _icon->setIcon(Application::icon(url)); +// _icon->setIcon(Application::icon(url)); +// updateIcon(); } } @@ -300,6 +308,16 @@ void UrlBar::loadFinished() return; } + // setting bookmark icon + if (Application::bookmarkProvider()->bookmarkForUrl(_tab->url()).isNull()) + { + _icon->setIcon(KIcon("bookmarks").pixmap(32,32, QIcon::Disabled)); + } + else + { + _icon->setIcon(KIcon("bookmarks")); + } + // show KGet downloads?? if (ReKonfig::kgetList()) { @@ -330,6 +348,35 @@ void UrlBar::loadFinished() } +void UrlBar::showBookmarkInfo(const QPoint &pos) +{ + if( _tab->url().scheme() == QL1S("about") ) + return; + + KBookmark bookmark = Application::bookmarkProvider()->bookmarkForUrl(_tab->url()); + + IconButton *bt = qobject_cast<IconButton *>(this->sender()); + if (!bt) + return; + + if (bookmark.isNull()) + { + bookmark = Application::bookmarkProvider()->rootGroup().addBookmark(_tab->view()->title(), _tab->url()); + Application::bookmarkProvider()->bookmarkManager()->emitChanged(); + } + + BookmarkWidget *widget = new BookmarkWidget(bookmark, window()); + widget->showAt(pos); +} + + +void UrlBar::onBookmarksChanged() +{ + clearRightIcons(); + loadFinished(); +} + + void UrlBar::loadTyped(const QString &text) { activated( KUrl(text) ); diff --git a/src/urlbar/urlbar.h b/src/urlbar/urlbar.h index 7fbe8bb4..d0e2b60e 100644 --- a/src/urlbar/urlbar.h +++ b/src/urlbar/urlbar.h @@ -104,6 +104,9 @@ private slots: void detectTypedString(const QString &); void suggest(); + void showBookmarkInfo(const QPoint &pos); + void onBookmarksChanged(); + protected: void paintEvent(QPaintEvent *event); void keyPressEvent(QKeyEvent *event); diff --git a/src/webview.cpp b/src/webview.cpp index 195f38af..441225af 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -37,7 +37,7 @@ #include "mainview.h" #include "webpage.h" #include "bookmarksmanager.h" -#include "search/searchengine.h" +#include "searchengine.h" #include "websnap.h" // KDE Includes diff --git a/src/zoombar.cpp b/src/zoombar.cpp index 485d71a9..b07aee03 100644 --- a/src/zoombar.cpp +++ b/src/zoombar.cpp @@ -124,11 +124,19 @@ void ZoomBar::show() // show findbar if not visible if (isHidden()) { + emit visibilityChanged(true); QWidget::show(); } } +void ZoomBar::hide() +{ + emit visibilityChanged(false); + QWidget::hide(); +} + + void ZoomBar::zoomIn() { setValue(m_zoomSlider->value() + 1); @@ -168,14 +176,7 @@ void ZoomBar::setValue(int value) } -void ZoomBar::setVisible(bool visible) -{ - emit visibilityChanged(visible); - QWidget::setVisible(visible); -} - - void ZoomBar::toggleVisibility() { - setVisible(!isVisible()); + isVisible() ? hide() : show(); } diff --git a/src/zoombar.h b/src/zoombar.h index 8e8d9aba..adb0067b 100644 --- a/src/zoombar.h +++ b/src/zoombar.h @@ -54,6 +54,8 @@ public: public slots: void show(); + void hide(); + void zoomIn(); void zoomOut(); void zoomNormal(); @@ -65,9 +67,6 @@ public slots: signals: void visibilityChanged(bool); -protected: - void setVisible(bool visible); - private: QToolButton *m_zoomIn; QToolButton *m_zoomOut; |