diff options
29 files changed, 885 insertions, 318 deletions
| diff --git a/CMakeLists.txt b/CMakeLists.txt index 8de22b5b..75ebfc26 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ PROJECT( rekonq )  # Informations to update before to release this package.  # rekonq info -SET(REKONQ_VERSION "0.5.54" ) +SET(REKONQ_VERSION "0.5.55" )  configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/version.h ) 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; | 
